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 javax.inject.Inject;
22
23 import java.util.List;
24
25 import org.apache.maven.AbstractCoreMavenComponentTestCase;
26 import org.apache.maven.artifact.Artifact;
27 import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
28 import org.apache.maven.artifact.repository.RepositoryRequest;
29 import org.apache.maven.execution.MavenSession;
30 import org.apache.maven.model.Plugin;
31 import org.apache.maven.plugin.descriptor.MojoDescriptor;
32 import org.apache.maven.plugin.descriptor.PluginDescriptor;
33 import org.apache.maven.project.MavenProject;
34 import org.codehaus.plexus.classworlds.realm.ClassRealm;
35 import org.codehaus.plexus.component.repository.ComponentDescriptor;
36 import org.codehaus.plexus.testing.PlexusTest;
37 import org.junit.jupiter.api.Test;
38
39 import static org.junit.jupiter.api.Assertions.assertEquals;
40 import static org.junit.jupiter.api.Assertions.assertNotNull;
41 import static org.junit.jupiter.api.Assertions.fail;
42
43 @PlexusTest
44 public class PluginManagerTest extends AbstractCoreMavenComponentTestCase {
45
46 @Inject
47 private BuildPluginManager pluginManager;
48
49 protected String getProjectsDirectory() {
50 return "src/test/projects/plugin-manager";
51 }
52
53 @Test
54 public void testPluginLoading() throws Exception {
55 MavenSession session = createMavenSession(null);
56 Plugin plugin = new Plugin();
57 plugin.setGroupId("org.apache.maven.its.plugins");
58 plugin.setArtifactId("maven-it-plugin");
59 plugin.setVersion("0.1");
60 PluginDescriptor pluginDescriptor = pluginManager.loadPlugin(
61 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
62 assertNotNull(pluginDescriptor);
63 }
64
65 @Test
66 public void testMojoDescriptorRetrieval() throws Exception {
67 MavenSession session = createMavenSession(null);
68 String goal = "it";
69 Plugin plugin = new Plugin();
70 plugin.setGroupId("org.apache.maven.its.plugins");
71 plugin.setArtifactId("maven-it-plugin");
72 plugin.setVersion("0.1");
73
74 MojoDescriptor mojoDescriptor = pluginManager.getMojoDescriptor(
75 plugin,
76 goal,
77 session.getCurrentProject().getRemotePluginRepositories(),
78 session.getRepositorySession());
79 assertNotNull(mojoDescriptor);
80 assertEquals(goal, mojoDescriptor.getGoal());
81
82
83
84 PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
85 assertNotNull(pluginDescriptor);
86 assertEquals("org.apache.maven.its.plugins", pluginDescriptor.getGroupId());
87 assertEquals("maven-it-plugin", pluginDescriptor.getArtifactId());
88 assertEquals("0.1", pluginDescriptor.getVersion());
89 }
90
91
92
93
94
95
96
97
98
99
100
101
102 @Test
103 public void testRemoteResourcesPlugin() throws Exception {
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 }
128
129
130 @Test
131 public void testSurefirePlugin() throws Exception {
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 }
152
153 @Test
154 public void testMojoConfigurationIsMergedCorrectly() throws Exception {}
155
156
157
158
159
160
161 @Test
162 public void testMojoWhereInternallyStatedDependencyIsOverriddenByProject() throws Exception {}
163
164
165
166
167
168 @Test
169 public void testMojoThatIsPresentInTheCurrentBuild() throws Exception {}
170
171
172
173
174
175 @Test
176 public void testAggregatorMojo() throws Exception {}
177
178
179
180
181
182 @Test
183 public void testMojoThatRequiresExecutionToAGivenPhaseBeforeExecutingItself() throws Exception {}
184
185
186
187
188
189
190
191 @Test
192 public void testThatPluginDependencyThatHasSystemScopeIsResolved() throws Exception {
193 MavenSession session = createMavenSession(getProject("project-contributing-system-scope-plugin-dep"));
194 MavenProject project = session.getCurrentProject();
195 Plugin plugin = project.getPlugin("org.apache.maven.its.plugins:maven-it-plugin");
196
197 RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
198 repositoryRequest.setLocalRepository(getLocalRepository());
199 repositoryRequest.setRemoteRepositories(getPluginArtifactRepositories());
200
201 PluginDescriptor pluginDescriptor = pluginManager.loadPlugin(
202 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
203 pluginManager.getPluginRealm(session, pluginDescriptor);
204 List<Artifact> artifacts = pluginDescriptor.getArtifacts();
205
206 for (Artifact a : artifacts) {
207 if (a.getGroupId().equals("org.apache.maven.its.mng3586")
208 && a.getArtifactId().equals("tools")) {
209
210 return;
211 }
212 }
213
214 fail("Can't find the system scoped dependency in the plugin artifacts.");
215 }
216
217
218
219
220
221 protected void assertPluginDescriptor(
222 MojoDescriptor mojoDescriptor, String groupId, String artifactId, String version) {
223 assertNotNull(mojoDescriptor);
224 PluginDescriptor pd = mojoDescriptor.getPluginDescriptor();
225 assertNotNull(pd);
226 assertEquals(groupId, pd.getGroupId());
227 assertEquals(artifactId, pd.getArtifactId());
228 assertEquals(version, pd.getVersion());
229 }
230
231 @Test
232 public void testPluginRealmCache() throws Exception {
233 RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
234 repositoryRequest.setLocalRepository(getLocalRepository());
235 repositoryRequest.setRemoteRepositories(getPluginArtifactRepositories());
236
237
238 MavenSession session = createMavenSession(getProject("project-contributing-system-scope-plugin-dep"));
239 MavenProject project = session.getCurrentProject();
240 Plugin plugin = project.getPlugin("org.apache.maven.its.plugins:maven-it-plugin");
241
242 PluginDescriptor pluginDescriptor = pluginManager.loadPlugin(
243 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
244 pluginManager.getPluginRealm(session, pluginDescriptor);
245
246 assertEquals(1, pluginDescriptor.getDependencies().size());
247
248 for (ComponentDescriptor<?> descriptor : pluginDescriptor.getComponents()) {
249 assertNotNull(descriptor.getRealm());
250 assertNotNull(descriptor.getImplementationClass());
251 }
252
253
254 session = createMavenSession(getProject("project-contributing-system-scope-plugin-dep"));
255 project = session.getCurrentProject();
256 plugin = project.getPlugin("org.apache.maven.its.plugins:maven-it-plugin");
257
258 pluginDescriptor = pluginManager.loadPlugin(
259 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
260 pluginManager.getPluginRealm(session, pluginDescriptor);
261
262 assertEquals(1, pluginDescriptor.getDependencies().size());
263
264 for (ComponentDescriptor<?> descriptor : pluginDescriptor.getComponents()) {
265 assertNotNull(descriptor.getRealm());
266 assertNotNull(descriptor.getImplementationClass());
267 }
268 }
269
270 @Test
271 public void testBuildExtensionsPluginLoading() throws Exception {
272 RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
273 repositoryRequest.setLocalRepository(getLocalRepository());
274 repositoryRequest.setRemoteRepositories(getPluginArtifactRepositories());
275
276
277 MavenSession session = createMavenSession(getProject("project-with-build-extensions-plugin"));
278 MavenProject project = session.getCurrentProject();
279 Plugin plugin = project.getPlugin("org.apache.maven.its.plugins:maven-it-plugin");
280
281 PluginDescriptor pluginDescriptor = pluginManager.loadPlugin(
282 plugin, session.getCurrentProject().getRemotePluginRepositories(), session.getRepositorySession());
283 ClassRealm pluginRealm = pluginManager.getPluginRealm(session, pluginDescriptor);
284
285 assertEquals(pluginRealm, pluginDescriptor.getComponents().get(0).getRealm());
286 }
287 }