1 package org.apache.maven.reporting.exec;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.DefaultMaven;
23 import org.apache.maven.Maven;
24 import org.apache.maven.RepositoryUtils;
25 import org.apache.maven.artifact.repository.ArtifactRepository;
26 import org.apache.maven.cli.MavenCli;
27 import org.apache.maven.execution.DefaultMavenExecutionRequest;
28 import org.apache.maven.execution.DefaultMavenExecutionResult;
29 import org.apache.maven.execution.MavenExecutionRequest;
30 import org.apache.maven.execution.MavenExecutionRequestPopulator;
31 import org.apache.maven.execution.MavenExecutionResult;
32 import org.apache.maven.execution.MavenSession;
33 import org.apache.maven.model.Build;
34 import org.apache.maven.model.Dependency;
35 import org.apache.maven.model.Plugin;
36 import org.apache.maven.model.PluginManagement;
37 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
38 import org.apache.maven.project.MavenProject;
39 import org.apache.maven.repository.RepositorySystem;
40 import org.apache.maven.settings.Settings;
41 import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
42 import org.apache.maven.settings.building.SettingsBuilder;
43 import org.apache.maven.settings.building.SettingsBuildingException;
44 import org.apache.maven.settings.building.SettingsBuildingRequest;
45 import org.codehaus.plexus.ContainerConfiguration;
46 import org.codehaus.plexus.PlexusConstants;
47 import org.codehaus.plexus.PlexusTestCase;
48 import org.codehaus.plexus.classworlds.realm.ClassRealm;
49 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
50 import org.eclipse.aether.RepositorySystemSession;
51 import org.eclipse.aether.artifact.Artifact;
52 import org.eclipse.aether.repository.RemoteRepository;
53 import org.eclipse.aether.repository.WorkspaceReader;
54 import org.eclipse.aether.repository.WorkspaceRepository;
55
56 import java.io.File;
57 import java.util.Arrays;
58 import java.util.Collections;
59 import java.util.List;
60
61
62
63
64 public class TestDefaultMavenReportExecutor
65 extends PlexusTestCase
66 {
67 @Override
68 protected void customizeContainerConfiguration( @SuppressWarnings( "unused" ) final ContainerConfiguration configuration )
69 {
70 super.customizeContainerConfiguration( configuration );
71 configuration.setAutoWiring( true ).setClassPathScanning( PlexusConstants.SCANNING_CACHE );
72 }
73
74 MavenExecutionRequest request = null;
75
76 ArtifactRepository localArtifactRepository;
77
78 public void testSimpleLookup()
79 throws Exception
80 {
81 MavenReportExecutor mavenReportExecutor = lookup( MavenReportExecutor.class );
82 assertNotNull( mavenReportExecutor );
83 }
84
85 public void testSimpleBuildReports()
86 throws Exception
87 {
88 ReportSet reportSet = new ReportSet();
89 reportSet.getReports().add( "test-javadoc" );
90 reportSet.getReports().add( "javadoc" );
91
92 MavenProject mavenProject = getMavenProject();
93 List<MavenReportExecution> mavenReportExecutions = buildReports( mavenProject, reportSet );
94
95 assertNotNull( mavenReportExecutions );
96 assertEquals( 2, mavenReportExecutions.size() );
97 assertEquals( "testapidocs/index", mavenReportExecutions.get( 0 ).getMavenReport().getOutputName() );
98 assertEquals( "apidocs/index", mavenReportExecutions.get( 1 ).getMavenReport().getOutputName() );
99 }
100
101 public void testMultipleReportSets()
102 throws Exception
103 {
104 ReportSet reportSet = new ReportSet();
105 reportSet.getReports().add( "javadoc" );
106 ReportSet reportSet2 = new ReportSet();
107 reportSet2.getReports().add( "test-javadoc" );
108 reportSet2.getReports().add( "javadoc" );
109
110 MavenProject mavenProject = getMavenProject();
111 List<MavenReportExecution> mavenReportExecutions = buildReports( mavenProject, reportSet, reportSet2 );
112
113 assertNotNull( mavenReportExecutions );
114 assertEquals( 3, mavenReportExecutions.size() );
115 assertEquals( "apidocs/index", mavenReportExecutions.get( 0 ).getMavenReport().getOutputName() );
116 assertEquals( "testapidocs/index", mavenReportExecutions.get( 1 ).getMavenReport().getOutputName() );
117 assertEquals( "apidocs/index", mavenReportExecutions.get( 2 ).getMavenReport().getOutputName() );
118 }
119
120 public void testReportingPluginWithDependenciesInPluginManagement()
121 throws Exception
122 {
123 ReportSet reportSet = new ReportSet();
124 reportSet.getReports().add( "javadoc" );
125
126 MavenProject mavenProject = getMavenProject();
127 Plugin plugin = new Plugin();
128 plugin.setGroupId( "org.apache.maven.plugins" );
129 plugin.setArtifactId( "maven-javadoc-plugin" );
130 plugin.setVersion( "3.4.0" );
131 Dependency dependency = new Dependency();
132 dependency.setGroupId( "commons-lang" );
133 dependency.setArtifactId( "commons-lang" );
134 dependency.setVersion( "2.6" );
135 plugin.getDependencies().add( dependency );
136 mavenProject.getBuild().setPluginManagement( new PluginManagement() );
137 mavenProject.getBuild().getPluginManagement().addPlugin( plugin );
138 List<MavenReportExecution> mavenReportExecutions = buildReports( mavenProject, reportSet );
139
140 assertNotNull( mavenReportExecutions );
141 assertEquals( 1, mavenReportExecutions.size() );
142 List<Dependency> dependencies = mavenReportExecutions.get( 0 ).getPlugin().getDependencies();
143 assertEquals( 1, dependencies.size() );
144 assertEquals( "commons-lang", dependencies.get( 0 ).getGroupId() );
145 assertEquals( "2.6", dependencies.get( 0 ).getVersion() );
146 }
147
148 private List<MavenReportExecution> buildReports( MavenProject mavenProject, ReportSet... javadocReportSets )
149 throws Exception
150 {
151 ClassLoader orig = Thread.currentThread().getContextClassLoader();
152 ClassRealm realm = getContainer().getContainerRealm();
153
154 Thread.currentThread().setContextClassLoader( realm );
155 try
156 {
157 MavenReportExecutorRequest mavenReportExecutorRequest = new MavenReportExecutorRequest();
158
159 mavenReportExecutorRequest.setLocalRepository( getLocalArtifactRepository() );
160
161 mavenReportExecutorRequest.setProject( mavenProject );
162
163 MavenSession mavenSession = getMavenSession( getLocalArtifactRepository(), mavenProject );
164 mavenSession.setCurrentProject( mavenProject );
165 mavenSession.setProjects( Arrays.asList( mavenProject ) );
166 mavenReportExecutorRequest.setMavenSession( mavenSession );
167
168 ReportPlugin reportPlugin = new ReportPlugin();
169 reportPlugin.setGroupId( "org.apache.maven.plugins" );
170 reportPlugin.setArtifactId( "maven-javadoc-plugin" );
171 reportPlugin.setVersion( "3.4.0" );
172
173 for ( ReportSet reportSet : javadocReportSets )
174 {
175 reportPlugin.getReportSets().add( reportSet );
176 }
177
178 List<ReportPlugin> reportPlugins = Arrays.asList( reportPlugin );
179
180 mavenReportExecutorRequest.setReportPlugins( reportPlugins.toArray( new ReportPlugin[1] ) );
181
182 MavenReportExecutor mavenReportExecutor = lookup( MavenReportExecutor.class );
183
184 return mavenReportExecutor.buildMavenReports( mavenReportExecutorRequest );
185 }
186 finally
187 {
188 Thread.currentThread().setContextClassLoader( orig );
189 }
190 }
191
192 protected MavenSession getMavenSession( ArtifactRepository localRepository, final MavenProject mavenProject )
193 throws Exception
194 {
195 request = new DefaultMavenExecutionRequest();
196 request.setLocalRepository( localRepository );
197
198 request.setWorkspaceReader( new WorkspaceReader()
199 {
200 @Override
201 public WorkspaceRepository getRepository()
202 {
203 return new WorkspaceRepository();
204 }
205
206 @Override
207 public File findArtifact( Artifact artifact )
208 {
209 return null;
210 }
211
212 @Override
213 public List<String> findVersions( Artifact artifact )
214 {
215 return Collections.emptyList();
216 }
217 } );
218 final Settings settings = getSettings();
219
220 getContainer().lookup( MavenExecutionRequestPopulator.class ).populateFromSettings( request, settings );
221
222 getContainer().lookup( MavenExecutionRequestPopulator.class ).populateDefaults( request );
223
224 request.setLocalRepository( getLocalArtifactRepository() );
225 request.setLocalRepositoryPath( getLocalArtifactRepository().getBasedir() );
226 request.setCacheNotFound( false );
227
228 request.setSystemProperties( System.getProperties() );
229
230 MavenExecutionResult result = new DefaultMavenExecutionResult();
231
232 RepositorySystemSession repositorySystemSession = buildRepositorySystemSession( request );
233
234 return new MavenSession( getContainer(), repositorySystemSession, request, result )
235 {
236 @Override
237 public MavenProject getTopLevelProject()
238 {
239 return mavenProject;
240 }
241
242 @Override
243 public Settings getSettings()
244 {
245 return settings;
246 }
247
248 @Override
249 public List<MavenProject> getProjects()
250 {
251 return Arrays.asList( mavenProject );
252 }
253
254 @Override
255 public MavenProject getCurrentProject()
256 {
257 return mavenProject;
258 }
259
260 };
261 }
262
263 private ArtifactRepository getLocalArtifactRepository()
264 throws Exception
265 {
266 if ( localArtifactRepository != null )
267 {
268 return localArtifactRepository;
269 }
270 String localRepoPath =
271 System.getProperty( "localRepository", MavenCli.userMavenConfigurationHome.getPath() + "/repository" );
272
273 localArtifactRepository = lookup( RepositorySystem.class ).createLocalRepository( new File( localRepoPath ) );
274 return localArtifactRepository;
275 }
276
277 public Settings getSettings()
278 throws ComponentLookupException, SettingsBuildingException
279 {
280
281 SettingsBuildingRequest settingsBuildingRequest = new DefaultSettingsBuildingRequest();
282
283 settingsBuildingRequest.setGlobalSettingsFile( MavenCli.DEFAULT_GLOBAL_SETTINGS_FILE );
284
285 settingsBuildingRequest.setUserSettingsFile( MavenCli.DEFAULT_USER_SETTINGS_FILE );
286
287 settingsBuildingRequest.getSystemProperties().putAll( System.getProperties() );
288
289 return getContainer().lookup( SettingsBuilder.class )
290 .build( settingsBuildingRequest ).getEffectiveSettings();
291
292 }
293
294 protected MavenProject getMavenProject()
295 {
296 MavenProjectStub mavenProjectStub = new MavenProjectStub()
297 {
298 @Override
299 public List<RemoteRepository> getRemotePluginRepositories()
300 {
301 if ( super.getRemotePluginRepositories() == null )
302 {
303 return RepositoryUtils.toRepos( request.getRemoteRepositories() );
304 }
305 return super.getRemotePluginRepositories();
306 }
307
308 @Override
309 public List<ArtifactRepository> getRemoteArtifactRepositories()
310 {
311 if ( super.getRemotePluginRepositories() == null )
312 {
313 return request.getRemoteRepositories();
314 }
315 return super.getRemoteArtifactRepositories();
316 }
317
318 @Override
319 public String getName()
320 {
321 return "foo";
322 }
323
324 @Override
325 public String getVersion()
326 {
327 return "1.0-SNAPSHOT";
328 }
329
330 @Override
331 public boolean isExecutionRoot()
332 {
333 return true;
334 }
335
336 @Override
337 public List<String> getCompileSourceRoots()
338 {
339 return Arrays.asList( "src/main/java" );
340 }
341
342 @Override
343 public List<String> getTestCompileSourceRoots()
344 {
345 return Arrays.asList( "src/test/java" );
346 }
347 };
348
349 mavenProjectStub.setPackaging( "jar" );
350
351 Build build = new Build();
352
353 build.setOutputDirectory( "target" );
354
355 build.setSourceDirectory( "src/main/java" );
356
357 build.setTestSourceDirectory( "src/test/java" );
358
359 mavenProjectStub.setBuild( build );
360
361 return mavenProjectStub;
362 }
363
364 private RepositorySystemSession buildRepositorySystemSession( MavenExecutionRequest request )
365 throws ComponentLookupException
366 {
367 DefaultMaven defaultMaven = (DefaultMaven) getContainer().lookup( Maven.class );
368
369 return defaultMaven.newRepositorySession( request );
370 }
371
372 }