1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugin.internal;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.util.Map;
26
27 import org.apache.maven.artifact.repository.ArtifactRepository;
28 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
29 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
30 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
31 import org.apache.maven.execution.MavenSession;
32 import org.apache.maven.model.Plugin;
33 import org.apache.maven.plugin.InvalidPluginDescriptorException;
34 import org.apache.maven.plugin.InvalidPluginException;
35 import org.apache.maven.plugin.LegacySupport;
36 import org.apache.maven.plugin.MavenPluginManager;
37 import org.apache.maven.plugin.MojoExecution;
38 import org.apache.maven.plugin.MojoExecutionException;
39 import org.apache.maven.plugin.MojoFailureException;
40 import org.apache.maven.plugin.PluginConfigurationException;
41 import org.apache.maven.plugin.PluginDescriptorParsingException;
42 import org.apache.maven.plugin.PluginManager;
43 import org.apache.maven.plugin.PluginManagerException;
44 import org.apache.maven.plugin.PluginNotFoundException;
45 import org.apache.maven.plugin.PluginResolutionException;
46 import org.apache.maven.plugin.descriptor.PluginDescriptor;
47 import org.apache.maven.plugin.prefix.DefaultPluginPrefixRequest;
48 import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
49 import org.apache.maven.plugin.prefix.PluginPrefixRequest;
50 import org.apache.maven.plugin.prefix.PluginPrefixResolver;
51 import org.apache.maven.plugin.prefix.PluginPrefixResult;
52 import org.apache.maven.plugin.version.DefaultPluginVersionRequest;
53 import org.apache.maven.plugin.version.PluginVersionNotFoundException;
54 import org.apache.maven.plugin.version.PluginVersionRequest;
55 import org.apache.maven.plugin.version.PluginVersionResolutionException;
56 import org.apache.maven.plugin.version.PluginVersionResolver;
57 import org.apache.maven.project.MavenProject;
58 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
59 import org.apache.maven.settings.Settings;
60 import org.codehaus.plexus.PlexusContainer;
61 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
62
63
64
65
66 @Singleton
67 @Named
68 public class DefaultPluginManager implements PluginManager {
69
70 @Inject
71 private PlexusContainer container;
72
73 @Inject
74 private MavenPluginManager pluginManager;
75
76 @Inject
77 private PluginVersionResolver pluginVersionResolver;
78
79 @Inject
80 private PluginPrefixResolver pluginPrefixResolver;
81
82 @Inject
83 private LegacySupport legacySupport;
84
85 public void executeMojo(MavenProject project, MojoExecution execution, MavenSession session)
86 throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException,
87 InvalidDependencyVersionException, PluginManagerException, PluginConfigurationException {
88 throw new UnsupportedOperationException();
89 }
90
91 public Object getPluginComponent(Plugin plugin, String role, String roleHint)
92 throws PluginManagerException, ComponentLookupException {
93 MavenSession session = legacySupport.getSession();
94
95 PluginDescriptor pluginDescriptor;
96 try {
97 pluginDescriptor = pluginManager.getPluginDescriptor(
98 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
99
100 pluginManager.setupPluginRealm(pluginDescriptor, session, null, null, null);
101 } catch (Exception e) {
102 throw new PluginManagerException(plugin, e.getMessage(), e);
103 }
104
105 ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
106 try {
107 Thread.currentThread().setContextClassLoader(pluginDescriptor.getClassRealm());
108
109 return container.lookup(role, roleHint);
110 } finally {
111 Thread.currentThread().setContextClassLoader(oldClassLoader);
112 }
113 }
114
115 public Map<String, Object> getPluginComponents(Plugin plugin, String role)
116 throws ComponentLookupException, PluginManagerException {
117 MavenSession session = legacySupport.getSession();
118
119 PluginDescriptor pluginDescriptor;
120 try {
121 pluginDescriptor = pluginManager.getPluginDescriptor(
122 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
123
124 pluginManager.setupPluginRealm(pluginDescriptor, session, null, null, null);
125 } catch (Exception e) {
126 throw new PluginManagerException(plugin, e.getMessage(), e);
127 }
128
129 ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
130 try {
131 Thread.currentThread().setContextClassLoader(pluginDescriptor.getClassRealm());
132
133 return container.lookupMap(role);
134 } finally {
135 Thread.currentThread().setContextClassLoader(oldClassLoader);
136 }
137 }
138
139 public Plugin getPluginDefinitionForPrefix(String prefix, MavenSession session, MavenProject project) {
140 PluginPrefixRequest request = new DefaultPluginPrefixRequest(prefix, session);
141 request.setPom(project.getModel());
142
143 try {
144 PluginPrefixResult result = pluginPrefixResolver.resolve(request);
145
146 Plugin plugin = new Plugin();
147 plugin.setGroupId(result.getGroupId());
148 plugin.setArtifactId(result.getArtifactId());
149
150 return plugin;
151 } catch (NoPluginFoundForPrefixException e) {
152 return null;
153 }
154 }
155
156 public PluginDescriptor getPluginDescriptorForPrefix(String prefix) {
157 MavenSession session = legacySupport.getSession();
158
159 PluginPrefixRequest request = new DefaultPluginPrefixRequest(prefix, session);
160
161 try {
162 PluginPrefixResult result = pluginPrefixResolver.resolve(request);
163
164 Plugin plugin = new Plugin();
165 plugin.setGroupId(result.getGroupId());
166 plugin.setArtifactId(result.getArtifactId());
167
168 return loadPluginDescriptor(plugin, session.getCurrentProject(), session);
169 } catch (Exception e) {
170 return null;
171 }
172 }
173
174 public PluginDescriptor loadPluginDescriptor(Plugin plugin, MavenProject project, MavenSession session)
175 throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
176 InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException,
177 PluginNotFoundException, PluginVersionNotFoundException {
178 return verifyPlugin(plugin, project, session.getSettings(), session.getLocalRepository());
179 }
180
181 public PluginDescriptor loadPluginFully(Plugin plugin, MavenProject project, MavenSession session)
182 throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
183 InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException,
184 PluginNotFoundException, PluginVersionNotFoundException {
185 PluginDescriptor pluginDescriptor = loadPluginDescriptor(plugin, project, session);
186
187 try {
188 pluginManager.setupPluginRealm(pluginDescriptor, session, null, null, null);
189 } catch (PluginResolutionException e) {
190 throw new PluginManagerException(plugin, e.getMessage(), e);
191 }
192
193 return pluginDescriptor;
194 }
195
196 public PluginDescriptor verifyPlugin(
197 Plugin plugin, MavenProject project, Settings settings, ArtifactRepository localRepository)
198 throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
199 InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException,
200 PluginNotFoundException, PluginVersionNotFoundException {
201 MavenSession session = legacySupport.getSession();
202
203 if (plugin.getVersion() == null) {
204 PluginVersionRequest versionRequest = new DefaultPluginVersionRequest(
205 plugin, session.getRepositorySession(), project.getRemotePluginRepositories());
206 plugin.setVersion(pluginVersionResolver.resolve(versionRequest).getVersion());
207 }
208
209 try {
210 return pluginManager.getPluginDescriptor(
211 plugin, project.getRemotePluginRepositories(), session.getRepositorySession());
212 } catch (PluginResolutionException e) {
213 throw new PluginNotFoundException(plugin, project.getPluginArtifactRepositories());
214 } catch (PluginDescriptorParsingException | InvalidPluginDescriptorException e) {
215 throw new PluginManagerException(plugin, e.getMessage(), e);
216 }
217 }
218 }