View Javadoc

1   package org.apache.maven.plugin.javadoc;
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 java.io.File;
23  import java.util.ArrayList;
24  import java.util.Collections;
25  import java.util.List;
26  
27  import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
28  import org.apache.maven.plugin.javadoc.resolver.SourceResolverConfig;
29  import org.apache.maven.project.MavenProject;
30  import org.codehaus.plexus.util.StringUtils;
31  
32  /**
33   * Bundles the Javadoc documentation for <code>test Java code</code> in an <b>NON aggregator</b> project into
34   * a jar using the standard <a href="http://java.sun.com/j2se/javadoc/">Javadoc Tool</a>.
35   *
36   * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
37   * @version $Id: TestJavadocJar.html 829396 2012-08-19 17:35:19Z hboutemy $
38   * @since 2.5
39   * @goal test-jar
40   * @phase package
41   * @requiresDependencyResolution test
42   */
43  public class TestJavadocJar
44      extends JavadocJar
45  {
46      // ----------------------------------------------------------------------
47      // Javadoc Options (should be inline with Javadoc options defined in TestJavadocReport)
48      // ----------------------------------------------------------------------
49  
50      /**
51       * Specifies the destination directory where Javadoc saves the generated HTML files.
52       * <br/>
53       * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#d">d</a>.
54       * <br/>
55       *
56       * @parameter default-value="${project.build.directory}/testapidocs"
57       * @required
58       */
59      private File outputDirectory;
60  
61      /**
62       * Specifies the Test title to be placed near the top of the overview summary file.
63       * <br/>
64       * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#doctitle">doctitle</a>.
65       * <br/>
66       *
67       * @parameter expression="${testDoctitle}" alias="doctitle"
68       * default-value="${project.name} ${project.version} Test API"
69       * @since 2.5
70       */
71      private String testDoctitle;
72  
73      /**
74       * Specifies that Javadoc should retrieve the text for the Test overview documentation from the "source" file
75       * specified by path/filename and place it on the Overview page (overview-summary.html).
76       * <br/>
77       * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overview">overview</a>.
78       * <br/>
79       *
80       * @parameter expression="${testOverview}" alias="overview"
81       * default-value="${basedir}/src/test/javadoc/overview.html"
82       * @since 2.5
83       */
84      private File testOverview;
85  
86      /**
87       * Specifies the Test title to be placed in the HTML title tag.
88       * <br/>
89       * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#windowtitle">windowtitle</a>.
90       * <br/>
91       *
92       * @parameter expression="${testWindowtitle}" alias="windowtitle"
93       * default-value="${project.name} ${project.version} Test API"
94       * @since 2.5
95       */
96      private String testWindowtitle;
97  
98      // ----------------------------------------------------------------------
99      // Mojo Parameters (should be inline with options defined in TestJavadocReport)
100     // ----------------------------------------------------------------------
101 
102     /**
103      * Specifies the Test Javadoc resources directory to be included in the Javadoc (i.e. package.html, images...).
104      *
105      * @parameter expression="${basedir}/src/test/javadoc" alias="javadocDirectory"
106      * @since 2.5
107      */
108     private File testJavadocDirectory;
109 
110     // ----------------------------------------------------------------------
111     // Protected methods
112     // ----------------------------------------------------------------------
113 
114     /** {@inheritDoc} */
115     protected String getClassifier()
116     {
117         return "test-javadoc";
118     }
119 
120     // ----------------------------------------------------------------------
121     // Important Note: should be inline with methods defined in TestJavadocReport
122     // ----------------------------------------------------------------------
123 
124     /** {@inheritDoc} */
125     protected String getOutputDirectory()
126     {
127         return outputDirectory.getAbsoluteFile().toString();
128     }
129 
130     /** {@inheritDoc} */
131     protected File getJavadocDirectory()
132     {
133         return testJavadocDirectory;
134     }
135 
136     /** {@inheritDoc} */
137     protected String getDoctitle()
138     {
139         return testDoctitle;
140     }
141 
142     /** {@inheritDoc} */
143     protected File getOverview()
144     {
145         return testOverview;
146     }
147 
148     /** {@inheritDoc} */
149     protected String getWindowtitle()
150     {
151         return testWindowtitle;
152     }
153 
154     /** {@inheritDoc} */
155     protected List getProjectBuildOutputDirs( MavenProject p )
156     {
157         List dirs = new ArrayList();
158         if ( StringUtils.isNotEmpty( p.getBuild().getOutputDirectory() ) )
159         {
160             dirs.add( p.getBuild().getOutputDirectory() );
161         }
162         if ( StringUtils.isNotEmpty( p.getBuild().getTestOutputDirectory() ) )
163         {
164             dirs.add( p.getBuild().getTestOutputDirectory() );
165         }
166 
167         return dirs;
168     }
169 
170     /** {@inheritDoc} */
171     protected List getProjectSourceRoots( MavenProject p )
172     {
173         if ( "pom".equals( p.getPackaging().toLowerCase() ) )
174         {
175             return Collections.EMPTY_LIST;
176         }
177 
178         return p.getTestCompileSourceRoots();
179     }
180 
181     /** {@inheritDoc} */
182     protected List getExecutionProjectSourceRoots( MavenProject p )
183     {
184         if ( "pom".equals( p.getExecutionProject().getPackaging().toLowerCase() ) )
185         {
186             return Collections.EMPTY_LIST;
187         }
188 
189         return p.getExecutionProject().getTestCompileSourceRoots();
190     }
191 
192     /** {@inheritDoc} */
193     protected List getProjectArtifacts( MavenProject p )
194     {
195         return p.getTestArtifacts();
196     }
197 
198     /** {@inheritDoc} */
199     protected List getCompileArtifacts( ArtifactResolutionResult result )
200     {
201         return JavadocUtil.getCompileArtifacts( result.getArtifacts(), true );
202     }
203     
204     /**
205      * Overriden to enable the resolution of -test-sources jar files.
206      * 
207      * {@inheritDoc}
208      */
209     protected SourceResolverConfig configureDependencySourceResolution( final SourceResolverConfig config )
210     {
211         return super.configureDependencySourceResolution( config ).withoutCompileSources().withTestSources();
212     }
213 }