View Javadoc

1   package org.apache.maven.reporting.exec;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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.Collections;
55  import java.util.List;
56  
57  /**
58   * @author Olivier Lamy
59   */
60  public class TestDefaultMavenReportExecutor
61      extends PlexusTestCase
62  {
63  
64      MavenExecutionRequest request = null;
65  
66      ArtifactRepository localArtifactRepository;
67  
68      public void testSimpleLookup()
69          throws Exception
70      {
71          MavenReportExecutor mavenReportExecutor = lookup( MavenReportExecutor.class );
72          assertNotNull( mavenReportExecutor );
73      }
74  
75      public void testSimpleBuildReports()
76          throws Exception
77      {
78          ReportSet reportSet = new ReportSet();
79          reportSet.getReports().add( "test-javadoc" );
80          reportSet.getReports().add( "javadoc" );
81  
82          List<MavenReportExecution> mavenReportExecutions = buildReports( reportSet );
83  
84          assertNotNull( mavenReportExecutions );
85          assertEquals( 2, mavenReportExecutions.size() );
86          assertEquals( "testapidocs/index", mavenReportExecutions.get( 0 ).getMavenReport().getOutputName() );
87          assertEquals( "apidocs/index", mavenReportExecutions.get( 1 ).getMavenReport().getOutputName() );
88      }
89  
90      public void testMultipleReportSets()
91          throws Exception
92      {
93          ReportSet reportSet = new ReportSet();
94          reportSet.getReports().add( "javadoc" );
95          ReportSet reportSet2 = new ReportSet();
96          reportSet2.getReports().add( "test-javadoc" );
97          reportSet2.getReports().add( "javadoc" );
98  
99          List<MavenReportExecution> mavenReportExecutions = buildReports( reportSet, reportSet2 );
100 
101         assertNotNull( mavenReportExecutions );
102         assertEquals( 3, mavenReportExecutions.size() );
103         assertEquals( "apidocs/index", mavenReportExecutions.get( 0 ).getMavenReport().getOutputName() );
104         assertEquals( "testapidocs/index", mavenReportExecutions.get( 1 ).getMavenReport().getOutputName() );
105         assertEquals( "apidocs/index", mavenReportExecutions.get( 2 ).getMavenReport().getOutputName() );
106     }
107 
108     private List<MavenReportExecution> buildReports( ReportSet... javadocReportSets )
109         throws Exception
110     {
111         ClassLoader orig = Thread.currentThread().getContextClassLoader();
112         ClassRealm realm = getContainer().getContainerRealm();
113 
114         Thread.currentThread().setContextClassLoader( realm );
115         try
116         {
117             MavenReportExecutorRequest mavenReportExecutorRequest = new MavenReportExecutorRequest();
118 
119             mavenReportExecutorRequest.setLocalRepository( getLocalArtifactRepository() );
120 
121             MavenProject mavenProject = getMavenProject();
122 
123             mavenReportExecutorRequest.setProject( mavenProject );
124 
125             MavenSession mavenSession = getMavenSession( getLocalArtifactRepository(), mavenProject );
126             mavenSession.setCurrentProject( mavenProject );
127             mavenSession.setProjects( Lists.<MavenProject>newArrayList( mavenProject ) );
128             mavenReportExecutorRequest.setMavenSession( mavenSession );
129 
130             ReportPlugin reportPlugin = new ReportPlugin();
131             reportPlugin.setGroupId( "org.apache.maven.plugins" );
132             reportPlugin.setArtifactId( "maven-javadoc-plugin" );
133             reportPlugin.setVersion( "2.7" );
134 
135             for ( ReportSet reportSet : javadocReportSets )
136             {
137                 reportPlugin.getReportSets().add( reportSet );
138             }
139 
140             List<ReportPlugin> reportPlugins = Lists.newArrayList( reportPlugin );
141 
142             mavenReportExecutorRequest.setReportPlugins( reportPlugins.toArray( new ReportPlugin[1] ) );
143 
144             MavenReportExecutor mavenReportExecutor = lookup( MavenReportExecutor.class );
145 
146             return mavenReportExecutor.buildMavenReports( mavenReportExecutorRequest );
147         }
148         finally
149         {
150             Thread.currentThread().setContextClassLoader( orig );
151         }
152     }
153 
154     protected MavenSession getMavenSession( ArtifactRepository localRepository, final MavenProject mavenProject )
155         throws Exception
156     {
157         request = new DefaultMavenExecutionRequest();
158         request.setLocalRepository( localRepository );
159 
160         request.setWorkspaceReader( new WorkspaceReader()
161         {
162             public WorkspaceRepository getRepository()
163             {
164                 return new WorkspaceRepository();
165             }
166 
167             public File findArtifact( Artifact artifact )
168             {
169                 return null;
170             }
171 
172             public List<String> findVersions( Artifact artifact )
173             {
174                 return Collections.emptyList();
175             }
176         } );
177         final Settings settings = getSettings();
178 
179         getContainer().lookup( MavenExecutionRequestPopulator.class ).populateFromSettings( request, settings );
180 
181         getContainer().lookup( MavenExecutionRequestPopulator.class ).populateDefaults( request );
182 
183         request.setLocalRepository( getLocalArtifactRepository() );
184         request.setLocalRepositoryPath( getLocalArtifactRepository().getBasedir() );
185         request.setCacheNotFound( false );
186 
187         request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );
188         getContainer().lookup( Logger.class ).setThreshold( 1 );
189 
190         request.setSystemProperties( System.getProperties() );
191 
192         MavenExecutionResult result = new DefaultMavenExecutionResult();
193 
194         RepositorySystemSession repositorySystemSession = buildRepositorySystemSession( request );
195 
196         MavenSession mavenSession = new MavenSession( getContainer(), repositorySystemSession, request, result )
197         {
198             @Override
199             public MavenProject getTopLevelProject()
200             {
201                 return mavenProject;
202             }
203 
204             @Override
205             public Settings getSettings()
206             {
207                 return settings;
208             }
209 
210             @Override
211             public List<MavenProject> getProjects()
212             {
213                 return Lists.newArrayList( mavenProject );
214             }
215 
216             @Override
217             public MavenProject getCurrentProject()
218             {
219                 return mavenProject;
220             }
221 
222         };
223         return mavenSession;
224     }
225 
226     private ArtifactRepository getLocalArtifactRepository()
227         throws Exception
228     {
229         if ( localArtifactRepository != null )
230         {
231             return localArtifactRepository;
232         }
233         String localRepoPath =
234             System.getProperty( "localRepository", MavenCli.userMavenConfigurationHome.getPath() + "/repository" );
235 
236         localArtifactRepository = lookup( RepositorySystem.class ).createLocalRepository( new File( localRepoPath ) );
237         return localArtifactRepository;
238     }
239 
240     public Settings getSettings()
241         throws ComponentLookupException, SettingsBuildingException
242     {
243 
244         SettingsBuildingRequest settingsBuildingRequest = new DefaultSettingsBuildingRequest();
245 
246         settingsBuildingRequest.setGlobalSettingsFile( MavenCli.DEFAULT_GLOBAL_SETTINGS_FILE );
247 
248         settingsBuildingRequest.setUserSettingsFile( MavenCli.DEFAULT_USER_SETTINGS_FILE );
249 
250         settingsBuildingRequest.getSystemProperties().putAll( System.getProperties() );
251 
252         Settings settings =
253             getContainer().lookup( SettingsBuilder.class ).build( settingsBuildingRequest ).getEffectiveSettings();
254 
255         return settings;
256 
257     }
258 
259     protected MavenProject getMavenProject()
260     {
261         MavenProjectStub mavenProjectStub = new MavenProjectStub()
262         {
263             @Override
264             public List<RemoteRepository> getRemotePluginRepositories()
265             {
266                 if ( super.getRemotePluginRepositories() == null )
267                 {
268                     return RepositoryUtils.toRepos( request.getRemoteRepositories() );
269                 }
270                 return super.getRemotePluginRepositories();
271             }
272 
273             @Override
274             public List<ArtifactRepository> getRemoteArtifactRepositories()
275             {
276                 if ( super.getRemotePluginRepositories() == null )
277                 {
278                     return request.getRemoteRepositories();
279                 }
280                 return super.getRemoteArtifactRepositories();
281             }
282 
283             @Override
284             public String getName()
285             {
286                 return "foo";
287             }
288 
289             @Override
290             public String getVersion()
291             {
292                 return "1.0-SNAPSHOT";
293             }
294 
295             @Override
296             public boolean isExecutionRoot()
297             {
298                 return true;
299             }
300 
301             @Override
302             public List<String> getCompileSourceRoots()
303             {
304                 return Lists.newArrayList( "src/main/java" );
305             }
306 
307             @Override
308             public List<String> getTestCompileSourceRoots()
309             {
310                 return Lists.newArrayList( "src/test/java" );
311             }
312         };
313 
314         mavenProjectStub.setPackaging( "jar" );
315 
316         Build build = new Build();
317 
318         build.setOutputDirectory( "target" );
319 
320         build.setSourceDirectory( "src/main/java" );
321 
322         build.setTestSourceDirectory( "src/test/java" );
323 
324         mavenProjectStub.setBuild( build );
325 
326         return mavenProjectStub;
327     }
328 
329     private RepositorySystemSession buildRepositorySystemSession( MavenExecutionRequest request )
330         throws ComponentLookupException
331     {
332         DefaultMaven defaultMaven = (DefaultMaven) getContainer().lookup( Maven.class );
333 
334         return defaultMaven.newRepositorySession( request );
335     }
336 
337 }