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.Arrays;
55  import java.util.Collections;
56  import java.util.List;
57  
58  /**
59   * @author Olivier Lamy
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 }