View Javadoc

1   package org.apache.maven.plugins.site;
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.io.IOException;
24  
25  import java.util.Collections;
26  import java.util.List;
27  import java.util.Locale;
28  import java.util.Map;
29  
30  import org.apache.maven.doxia.siterenderer.DocumentRenderer;
31  import org.apache.maven.doxia.siterenderer.RendererException;
32  import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
33  import org.apache.maven.plugin.MojoExecutionException;
34  import org.apache.maven.plugin.MojoFailureException;
35  import org.apache.maven.reporting.MavenReport;
36  
37  /**
38   * Generates the site for a single project.
39   * <p>
40   * Note that links between module sites in a multi module build will <b>not</b>
41   * work.
42   * </p>
43   *
44   * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
45   * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
46   * @version $Id: SiteMojo.html 816561 2012-05-08 12:02:24Z hboutemy $
47   * @goal site
48   * @requiresDependencyResolution test
49   */
50  public class SiteMojo
51      extends AbstractSiteRenderingMojo
52  {
53      /**
54       * Directory where the project sites and report distributions will be generated.
55       *
56       * @parameter expression="${siteOutputDirectory}" default-value="${project.reporting.outputDirectory}"
57       */
58      protected File outputDirectory;
59  
60      /**
61       * Convenience parameter that allows you to disable report generation.
62       *
63       * @parameter expression="${generateReports}" default-value="true"
64       */
65      private boolean generateReports;
66  
67      /**
68       * Generate a sitemap. The result will be a "sitemap.html" file at the site root.
69       *
70       * @parameter expression="${generateSitemap}" default-value="false"
71       * @since 2.1
72       */
73      private boolean generateSitemap;
74  
75      /**
76       * Whether to validate xml input documents.
77       * If set to true, <strong>all</strong> input documents in xml format
78       * (in particular xdoc and fml) will be validated and any error will
79       * lead to a build failure.
80       *
81       * @parameter expression="${validate}" default-value="false"
82       * @since 2.1.1
83       */
84      private boolean validate;
85  
86      /**
87       * Set this to 'true' to skip site generation.
88       *
89       * @parameter expression="${maven.site.skip}" default-value="false"
90       * @since 2.4
91       */
92      private boolean skip;
93  
94      /**
95       * {@inheritDoc}
96       *
97       * Generate the project site
98       * <p/>
99       * throws MojoExecutionException if any
100      *
101      * @see org.apache.maven.plugin.Mojo#execute()
102      */
103     public void execute()
104         throws MojoExecutionException, MojoFailureException
105     {
106         if ( skip )
107         {
108             getLog().info( "maven.site.skip = true: Skipping site generation" );
109             return;
110         }
111 
112         checkMavenVersion();
113 
114         List<MavenReport> filteredReports;
115         if ( generateReports )
116         {
117             filteredReports = filterReports( reports );
118         }
119         else
120         {
121             filteredReports = Collections.emptyList();
122         }
123 
124         try
125         {
126             List<Locale> localesList = siteTool.getAvailableLocales( locales );
127 
128             // Default is first in the list
129             Locale defaultLocale = localesList.get( 0 );
130             Locale.setDefault( defaultLocale );
131 
132             for ( Locale locale : localesList )
133             {
134                 renderLocale( locale, filteredReports );
135             }
136         }
137         catch ( RendererException e )
138         {
139             throw new MojoExecutionException( "Error during page generation", e );
140         }
141         catch ( IOException e )
142         {
143             throw new MojoExecutionException( "Error during site generation", e );
144         }
145     }
146 
147     private void renderLocale( Locale locale, List<MavenReport> reports )
148         throws IOException, RendererException, MojoFailureException, MojoExecutionException
149     {
150         SiteRenderingContext context = createSiteRenderingContext( locale );
151 
152         context.setInputEncoding( getInputEncoding() );
153         context.setOutputEncoding( getOutputEncoding() );
154         context.setValidate( validate );
155         if ( validate )
156         {
157             getLog().info( "Validation is switched on, xml input documents will be validated!" );
158         }
159 
160         Map<String, DocumentRenderer> documents = locateDocuments( context, reports, locale );
161 
162         File outputDir = getOutputDirectory( locale );
163 
164         // For external reports
165         for ( MavenReport report : reports )
166         {
167             report.setReportOutputDirectory( outputDir );
168         }
169 
170         siteRenderer.render( documents.values(), context, outputDir );
171 
172         if ( generateSitemap )
173         {
174             getLog().info( "Generating Sitemap." );
175 
176             new SiteMap( getOutputEncoding(), i18n )
177                     .generate( context.getDecoration(), generatedSiteDirectory, locale );
178         }
179 
180         // Generated docs must be done afterwards as they are often generated by reports
181         context.getSiteDirectories().clear();
182         context.addSiteDirectory( generatedSiteDirectory );
183 
184         documents = siteRenderer.locateDocumentFiles( context );
185 
186         siteRenderer.render( documents.values(), context, outputDir );
187     }
188 
189     private File getOutputDirectory( Locale locale )
190     {
191         File file;
192         if ( locale.getLanguage().equals( Locale.getDefault().getLanguage() ) )
193         {
194             file = outputDirectory;
195         }
196         else
197         {
198             file = new File( outputDirectory, locale.getLanguage() );
199         }
200 
201         // Safety
202         if ( !file.exists() )
203         {
204             file.mkdirs();
205         }
206 
207         return file;
208     }
209 }