1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugin;
20
21 import java.util.List;
22 import java.util.Map;
23 import org.apache.maven.artifact.Artifact;
24 import org.apache.maven.model.Plugin;
25 import org.apache.maven.project.MavenProject;
26 import org.codehaus.plexus.classworlds.realm.ClassRealm;
27 import org.eclipse.aether.RepositorySystemSession;
28 import org.eclipse.aether.graph.DependencyFilter;
29 import org.eclipse.aether.repository.RemoteRepository;
30
31
32
33
34
35
36
37
38
39 public interface PluginRealmCache {
40
41
42
43 class CacheRecord {
44 public ClassRealm getRealm() {
45 return realm;
46 }
47
48 public List<Artifact> getArtifacts() {
49 return artifacts;
50 }
51
52 private final ClassRealm realm;
53
54 private final List<Artifact> artifacts;
55
56 public CacheRecord(ClassRealm realm, List<Artifact> artifacts) {
57 this.realm = realm;
58 this.artifacts = artifacts;
59 }
60 }
61
62
63
64
65 interface Key {
66
67 }
68
69 @FunctionalInterface
70 interface PluginRealmSupplier {
71 CacheRecord load() throws PluginResolutionException, PluginContainerException;
72 }
73
74 Key createKey(
75 Plugin plugin,
76 ClassLoader parentRealm,
77 Map<String, ClassLoader> foreignImports,
78 DependencyFilter dependencyFilter,
79 List<RemoteRepository> repositories,
80 RepositorySystemSession session);
81
82 CacheRecord get(Key key);
83
84 CacheRecord get(Key key, PluginRealmSupplier supplier) throws PluginResolutionException, PluginContainerException;
85
86 CacheRecord put(Key key, ClassRealm pluginRealm, List<Artifact> pluginArtifacts);
87
88 void flush();
89
90
91
92
93
94
95
96
97
98 void register(MavenProject project, Key key, CacheRecord record);
99 }