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 com.google.common.collect.Lists;
23 import org.apache.maven.DefaultMaven;
24 import org.apache.maven.Maven;
25 import org.apache.maven.RepositoryUtils;
26 import org.apache.maven.artifact.repository.ArtifactRepository;
27 import org.apache.maven.cli.MavenCli;
28 import org.apache.maven.execution.DefaultMavenExecutionRequest;
29 import org.apache.maven.execution.DefaultMavenExecutionResult;
30 import org.apache.maven.execution.MavenExecutionRequest;
31 import org.apache.maven.execution.MavenExecutionRequestPopulator;
32 import org.apache.maven.execution.MavenExecutionResult;
33 import org.apache.maven.execution.MavenSession;
34 import org.apache.maven.model.Build;
35 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
36 import org.apache.maven.project.MavenProject;
37 import org.apache.maven.repository.RepositorySystem;
38 import org.apache.maven.settings.Settings;
39 import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
40 import org.apache.maven.settings.building.SettingsBuilder;
41 import org.apache.maven.settings.building.SettingsBuildingException;
42 import org.apache.maven.settings.building.SettingsBuildingRequest;
43 import org.codehaus.plexus.PlexusTestCase;
44 import org.codehaus.plexus.classworlds.realm.ClassRealm;
45 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
46 import org.codehaus.plexus.logging.Logger;
47 import org.sonatype.aether.RepositorySystemSession;
48 import org.sonatype.aether.artifact.Artifact;
49 import org.sonatype.aether.repository.RemoteRepository;
50 import org.sonatype.aether.repository.WorkspaceReader;
51 import org.sonatype.aether.repository.WorkspaceRepository;
52
53 import java.io.File;
54 import java.util.Arrays;
55 import java.util.Collections;
56 import java.util.List;
57
58
59
60
61 public class TestDefaultMavenReportExecutor
62 extends PlexusTestCase
63 {
64
65 MavenExecutionRequest request = null;
66
67 ArtifactRepository localArtifactRepository;
68
69 public void testSimpleLookup()
70 throws Exception
71 {
72 MavenReportExecutor mavenReportExecutor = lookup( MavenReportExecutor.class );
73 assertNotNull( mavenReportExecutor );
74 }
75
76 public void testSimpleBuildReports()
77 throws Exception
78 {
79 ClassLoader orig = Thread.currentThread().getContextClassLoader();
80 ClassRealm realm = getContainer().getContainerRealm();
81 System.out.println( "realm " + Arrays.asList( realm.getURLs() ) );
82 Thread.currentThread().setContextClassLoader( realm );
83 try
84 {
85 MavenReportExecutorRequest mavenReportExecutorRequest = new MavenReportExecutorRequest();
86
87 mavenReportExecutorRequest.setLocalRepository( getLocalArtifactRepository() );
88
89 MavenProject mavenProject = getMavenProject();
90
91 mavenReportExecutorRequest.setProject( mavenProject );
92
93 MavenSession mavenSession = getMavenSession( getLocalArtifactRepository(), mavenProject );
94 mavenSession.setCurrentProject( mavenProject );
95 mavenSession.setProjects( Lists.<MavenProject>newArrayList( mavenProject ) );
96 mavenReportExecutorRequest.setMavenSession( mavenSession );
97
98 ReportPlugin reportPlugin = new ReportPlugin();
99 reportPlugin.setGroupId( "org.apache.maven.plugins" );
100 reportPlugin.setArtifactId( "maven-javadoc-plugin" );
101 reportPlugin.setVersion( "2.7" );
102
103 ReportSet reportSet = new ReportSet();
104 reportSet.getReports().add( "test-javadoc" );
105 reportSet.getReports().add( "javadoc" );
106 reportPlugin.getReportSets().add( reportSet );
107
108 List<ReportPlugin> reportPlugins = Lists.newArrayList( reportPlugin );
109
110 mavenReportExecutorRequest.setReportPlugins( reportPlugins.toArray( new ReportPlugin[1] ) );
111
112 MavenReportExecutor mavenReportExecutor = lookup( MavenReportExecutor.class );
113
114 List<MavenReportExecution> mavenReportExecutions =
115 mavenReportExecutor.buildMavenReports( mavenReportExecutorRequest );
116
117 assertNotNull( mavenReportExecutions );
118 assertEquals( 2, mavenReportExecutions.size() );
119 assertEquals( "testapidocs/index", mavenReportExecutions.get( 0 ).getMavenReport().getOutputName() );
120 assertEquals( "apidocs/index", mavenReportExecutions.get( 1 ).getMavenReport().getOutputName() );
121 }
122 finally
123 {
124 Thread.currentThread().setContextClassLoader( orig );
125 }
126 }
127
128 protected MavenSession getMavenSession( ArtifactRepository localRepository, final MavenProject mavenProject )
129 throws Exception
130 {
131 request = new DefaultMavenExecutionRequest();
132 request.setLocalRepository( localRepository );
133
134 request.setWorkspaceReader( new WorkspaceReader()
135 {
136 public WorkspaceRepository getRepository()
137 {
138 return new WorkspaceRepository();
139 }
140
141 public File findArtifact( Artifact artifact )
142 {
143 return null;
144 }
145
146 public List<String> findVersions( Artifact artifact )
147 {
148 return Collections.emptyList();
149 }
150 } );
151 final Settings settings = getSettings();
152
153 getContainer().lookup( MavenExecutionRequestPopulator.class ).populateFromSettings( request, settings );
154
155 getContainer().lookup( MavenExecutionRequestPopulator.class ).populateDefaults( request );
156
157 request.setLocalRepository( getLocalArtifactRepository() );
158 request.setLocalRepositoryPath( getLocalArtifactRepository().getBasedir() );
159 request.setCacheNotFound( false );
160
161 request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_DEBUG );
162 getContainer().lookup( Logger.class ).setThreshold( 0 );
163
164 request.setSystemProperties( System.getProperties() );
165
166 MavenExecutionResult result = new DefaultMavenExecutionResult();
167
168 RepositorySystemSession repositorySystemSession = buildRepositorySystemSession( request );
169
170 MavenSession mavenSession = new MavenSession( getContainer(), repositorySystemSession, request, result )
171 {
172 @Override
173 public MavenProject getTopLevelProject()
174 {
175 return mavenProject;
176 }
177
178 @Override
179 public Settings getSettings()
180 {
181 return settings;
182 }
183
184 @Override
185 public List<MavenProject> getProjects()
186 {
187 return Lists.newArrayList( mavenProject );
188 }
189
190 @Override
191 public MavenProject getCurrentProject()
192 {
193 return mavenProject;
194 }
195
196 };
197 return mavenSession;
198 }
199
200 private ArtifactRepository getLocalArtifactRepository()
201 throws Exception
202 {
203 if ( localArtifactRepository != null )
204 {
205 return localArtifactRepository;
206 }
207 String localRepoPath =
208 System.getProperty( "localRepository", MavenCli.userMavenConfigurationHome.getPath() + "/repository" );
209
210 localArtifactRepository = lookup( RepositorySystem.class ).createLocalRepository( new File( localRepoPath ) );
211 return localArtifactRepository;
212 }
213
214 public Settings getSettings()
215 throws ComponentLookupException, SettingsBuildingException
216 {
217
218 SettingsBuildingRequest settingsBuildingRequest = new DefaultSettingsBuildingRequest();
219
220 settingsBuildingRequest.setGlobalSettingsFile( MavenCli.DEFAULT_GLOBAL_SETTINGS_FILE );
221
222 settingsBuildingRequest.setUserSettingsFile( MavenCli.DEFAULT_USER_SETTINGS_FILE );
223
224 settingsBuildingRequest.getSystemProperties().putAll( System.getProperties() );
225
226 Settings settings =
227 getContainer().lookup( SettingsBuilder.class ).build( settingsBuildingRequest ).getEffectiveSettings();
228
229 return settings;
230
231 }
232
233 protected MavenProject getMavenProject()
234 {
235 MavenProjectStub mavenProjectStub = new MavenProjectStub()
236 {
237 @Override
238 public List<RemoteRepository> getRemotePluginRepositories()
239 {
240 if ( super.getRemotePluginRepositories() == null )
241 {
242 return RepositoryUtils.toRepos( request.getRemoteRepositories() );
243 }
244 return super.getRemotePluginRepositories();
245 }
246
247 @Override
248 public List<ArtifactRepository> getRemoteArtifactRepositories()
249 {
250 if ( super.getRemotePluginRepositories() == null )
251 {
252 return request.getRemoteRepositories();
253 }
254 return super.getRemoteArtifactRepositories();
255 }
256
257 @Override
258 public String getName()
259 {
260 return "foo";
261 }
262
263 @Override
264 public String getVersion()
265 {
266 return "1.0-SNAPSHOT";
267 }
268
269 @Override
270 public boolean isExecutionRoot()
271 {
272 return true;
273 }
274
275 @Override
276 public List<String> getCompileSourceRoots()
277 {
278 return Lists.newArrayList( "src/main/java" );
279 }
280
281 @Override
282 public List<String> getTestCompileSourceRoots()
283 {
284 return Lists.newArrayList( "src/test/java" );
285 }
286 };
287
288 mavenProjectStub.setPackaging( "jar" );
289
290 Build build = new Build();
291
292 build.setOutputDirectory( "target" );
293
294 build.setSourceDirectory( "src/main/java" );
295
296 build.setTestSourceDirectory( "src/test/java" );
297
298 mavenProjectStub.setBuild( build );
299
300 return mavenProjectStub;
301 }
302
303 private RepositorySystemSession buildRepositorySystemSession( MavenExecutionRequest request )
304 throws ComponentLookupException
305 {
306 DefaultMaven defaultMaven = (DefaultMaven) getContainer().lookup( Maven.class );
307
308 return defaultMaven.newRepositorySession( request );
309 }
310
311 }