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  import java.io.InputStream;
25  
26  import java.util.List;
27  import java.util.Properties;
28  
29  import org.apache.maven.artifact.repository.ArtifactRepository;
30  import org.apache.maven.doxia.tools.SiteTool;
31  import org.apache.maven.plugin.AbstractMojo;
32  import org.apache.maven.project.MavenProject;
33  
34  import org.codehaus.plexus.i18n.I18N;
35  import org.codehaus.plexus.util.IOUtil;
36  import org.codehaus.plexus.util.ReaderFactory;
37  
38  /**
39   * Base class for site mojos.
40   *
41   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
42   */
43  public abstract class AbstractSiteMojo
44      extends AbstractMojo
45  {
46      /**
47       * A comma separated list of locales supported by Maven. The first valid token will be the default Locale
48       * for this instance of the Java Virtual Machine.
49       *
50       * @parameter expression="${locales}"
51       */
52      protected String locales;
53  
54      /**
55       * SiteTool.
56       *
57       * @component
58       */
59      protected SiteTool siteTool;
60  
61      /**
62       * Internationalization.
63       *
64       * @component
65       */
66      protected I18N i18n;
67  
68      /**
69       * Directory containing the site.xml file and the source for apt, fml and xdoc docs.
70       *
71       * @parameter default-value="${basedir}/src/site"
72       */
73      protected File siteDirectory;
74  
75      /**
76       * The maven project.
77       *
78       * @parameter default-value="${project}"
79       * @required
80       * @readonly
81       */
82      protected MavenProject project;
83  
84      /**
85       * The local repository.
86       *
87       * @parameter default-value="${localRepository}"
88       * @readonly
89       */
90      protected ArtifactRepository localRepository;
91  
92      /**
93       * The reactor projects.
94       *
95       * @parameter default-value="${reactorProjects}"
96       * @required
97       * @readonly
98       */
99      protected List<MavenProject> reactorProjects;
100 
101     /**
102      * Specifies the input encoding.
103      *
104      * @parameter expression="${encoding}" default-value="${project.build.sourceEncoding}"
105      */
106     private String inputEncoding;
107 
108     /**
109      * Specifies the output encoding.
110      *
111      * @parameter expression="${outputEncoding}" default-value="${project.reporting.outputEncoding}"
112      */
113     private String outputEncoding;
114 
115     /**
116      * Gets the input files encoding.
117      *
118      * @return The input files encoding, never <code>null</code>.
119      */
120     protected String getInputEncoding()
121     {
122         return ( inputEncoding == null ) ? ReaderFactory.ISO_8859_1 : inputEncoding;
123     }
124 
125     /**
126      * Gets the effective reporting output files encoding.
127      *
128      * @return The effective reporting output file encoding, never <code>null</code>.
129      */
130     protected String getOutputEncoding()
131     {
132         return ( outputEncoding == null ) ? ReaderFactory.UTF_8 : outputEncoding;
133     }
134 
135     /**
136      * Check the current Maven version and emit a warning if it's Maven 3.
137      * This plugin does not work with Maven 3.x.
138      */
139     protected void checkMavenVersion()
140     {
141         try
142         {
143             final String version = getMavenVersion();
144 
145             if ( version.startsWith( "3" ) )
146             {
147                 getLog().warn( "Running 2.x site-plugin with Maven 3, use site-plugin-3.x instead!" );
148             }
149         }
150         catch ( IOException e )
151         {
152             getLog().debug( "Unable to determine Maven version", e );
153         }
154     }
155 
156     protected String getMavenVersion()
157         throws IOException
158     {
159         // This relies on the fact that MavenProject is the in core classloader
160         // and that the core classloader is for the maven-core artifact
161         // and that should have a pom.properties file
162         // if this ever changes, we will have to revisit this code.
163         final Properties properties = new Properties();
164         final InputStream in =
165             MavenProject.class.getClassLoader().getResourceAsStream( "META-INF/maven/org.apache.maven/maven-core/pom.properties" );
166         try
167         {
168             properties.load( in );
169         }
170         finally
171         {
172             IOUtil.close( in );
173         }
174 
175         return properties.getProperty( "version" ).trim();
176     }
177 }