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 @Named
66 @Singleton
67 @Deprecated
68 public class DefaultPluginManager implements PluginManager {
69
70 private final PlexusContainer container;
71 private final MavenPluginManager pluginManager;
72 private final PluginVersionResolver pluginVersionResolver;
73 private final PluginPrefixResolver pluginPrefixResolver;
74 private final LegacySupport legacySupport;
75
76 @Inject
77 public DefaultPluginManager(
78 PlexusContainer container,
79 MavenPluginManager pluginManager,
80 PluginVersionResolver pluginVersionResolver,
81 PluginPrefixResolver pluginPrefixResolver,
82 LegacySupport legacySupport) {
83 this.container = container;
84 this.pluginManager = pluginManager;
85 this.pluginVersionResolver = pluginVersionResolver;
86 this.pluginPrefixResolver = pluginPrefixResolver;
87 this.legacySupport = legacySupport;
88 }
89
90 @Override
91 public void executeMojo(MavenProject project, MojoExecution execution, MavenSession session)
92 throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException,
93 InvalidDependencyVersionException, PluginManagerException, PluginConfigurationException {
94 throw new UnsupportedOperationException();
95 }
96
97 @Override
98 public Object getPluginComponent(Plugin plugin, String role, String roleHint)
99 throws PluginManagerException, ComponentLookupException {
100 MavenSession session = legacySupport.getSession();
101
102 PluginDescriptor pluginDescriptor;
103 try {
104 pluginDescriptor = pluginManager.getPluginDescriptor(
105 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
106
107 pluginManager.setupPluginRealm(pluginDescriptor, session, null, null, null);
108 } catch (Exception e) {
109 throw new PluginManagerException(plugin, e.getMessage(), e);
110 }
111
112 ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
113 try {
114 Thread.currentThread().setContextClassLoader(pluginDescriptor.getClassRealm());
115
116 return container.lookup(role, roleHint);
117 } finally {
118 Thread.currentThread().setContextClassLoader(oldClassLoader);
119 }
120 }
121
122 @Override
123 public Map<String, Object> getPluginComponents(Plugin plugin, String role)
124 throws ComponentLookupException, PluginManagerException {
125 MavenSession session = legacySupport.getSession();
126
127 PluginDescriptor pluginDescriptor;
128 try {
129 pluginDescriptor = pluginManager.getPluginDescriptor(
130 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
131
132 pluginManager.setupPluginRealm(pluginDescriptor, session, null, null, null);
133 } catch (Exception e) {
134 throw new PluginManagerException(plugin, e.getMessage(), e);
135 }
136
137 ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
138 try {
139 Thread.currentThread().setContextClassLoader(pluginDescriptor.getClassRealm());
140
141 return container.lookupMap(role);
142 } finally {
143 Thread.currentThread().setContextClassLoader(oldClassLoader);
144 }
145 }
146
147 @Override
148 public Plugin getPluginDefinitionForPrefix(String prefix, MavenSession session, MavenProject project) {
149 PluginPrefixRequest request = new DefaultPluginPrefixRequest(prefix, session);
150 request.setPom(project.getModel());
151
152 try {
153 PluginPrefixResult result = pluginPrefixResolver.resolve(request);
154
155 Plugin plugin = new Plugin();
156 plugin.setGroupId(result.getGroupId());
157 plugin.setArtifactId(result.getArtifactId());
158
159 return plugin;
160 } catch (NoPluginFoundForPrefixException e) {
161 return null;
162 }
163 }
164
165 @Override
166 public PluginDescriptor getPluginDescriptorForPrefix(String prefix) {
167 MavenSession session = legacySupport.getSession();
168
169 PluginPrefixRequest request = new DefaultPluginPrefixRequest(prefix, session);
170
171 try {
172 PluginPrefixResult result = pluginPrefixResolver.resolve(request);
173
174 Plugin plugin = new Plugin();
175 plugin.setGroupId(result.getGroupId());
176 plugin.setArtifactId(result.getArtifactId());
177
178 return loadPluginDescriptor(plugin, session.getCurrentProject(), session);
179 } catch (Exception e) {
180 return null;
181 }
182 }
183
184 @Override
185 public PluginDescriptor loadPluginDescriptor(Plugin plugin, MavenProject project, MavenSession session)
186 throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
187 InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException,
188 PluginNotFoundException, PluginVersionNotFoundException {
189 return verifyPlugin(plugin, project, session.getSettings(), session.getLocalRepository());
190 }
191
192 @Override
193 public PluginDescriptor loadPluginFully(Plugin plugin, MavenProject project, MavenSession session)
194 throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
195 InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException,
196 PluginNotFoundException, PluginVersionNotFoundException {
197 PluginDescriptor pluginDescriptor = loadPluginDescriptor(plugin, project, session);
198
199 try {
200 pluginManager.setupPluginRealm(pluginDescriptor, session, null, null, null);
201 } catch (PluginResolutionException e) {
202 throw new PluginManagerException(plugin, e.getMessage(), e);
203 }
204
205 return pluginDescriptor;
206 }
207
208 @Override
209 public PluginDescriptor verifyPlugin(
210 Plugin plugin, MavenProject project, Settings settings, ArtifactRepository localRepository)
211 throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
212 InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException,
213 PluginNotFoundException, PluginVersionNotFoundException {
214 MavenSession session = legacySupport.getSession();
215
216 if (plugin.getVersion() == null) {
217 PluginVersionRequest versionRequest = new DefaultPluginVersionRequest(
218 plugin, session.getRepositorySession(), project.getRemotePluginRepositories());
219 plugin.setVersion(pluginVersionResolver.resolve(versionRequest).getVersion());
220 }
221
222 try {
223 return pluginManager.getPluginDescriptor(
224 plugin, project.getRemotePluginRepositories(), session.getRepositorySession());
225 } catch (PluginResolutionException e) {
226 throw new PluginNotFoundException(plugin, project.getPluginArtifactRepositories());
227 } catch (PluginDescriptorParsingException | InvalidPluginDescriptorException e) {
228 throw new PluginManagerException(plugin, e.getMessage(), e);
229 }
230 }
231 }