MPLUGIN-40: All plugins should by default have an auto-generated goal 'help'
o created a new Mojo which generates a generic HelpMojo class o added PluginHelpGenerator which does the generation o maven-plugin-plugin should extends maven-plugins for the look&feel o update the documentation git-svn-id: https://svn.apache.org/repos/asf/maven/plugin-tools/trunk@617289 13f79535-47bb-0310-9956-ffa450edef68master
parent
dfebacc116
commit
194c3a8eca
|
|
@ -16,29 +16,34 @@
|
||||||
~ KIND, either express or implied. See the License for the
|
~ KIND, either express or implied. See the License for the
|
||||||
~ specific language governing permissions and limitations
|
~ specific language governing permissions and limitations
|
||||||
~ under the License.
|
~ under the License.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
|
||||||
<groupId>org.apache.maven</groupId>
|
|
||||||
<artifactId>maven-plugin-tools</artifactId>
|
|
||||||
<version>2.4-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-plugins</artifactId>
|
||||||
|
<version>8</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-plugin-plugin</artifactId>
|
<artifactId>maven-plugin-plugin</artifactId>
|
||||||
|
<version>2.4-SNAPSHOT</version>
|
||||||
<packaging>maven-plugin</packaging>
|
<packaging>maven-plugin</packaging>
|
||||||
|
|
||||||
<name>Maven PLUGIN Plugin</name>
|
<name>Maven PLUGIN Plugin</name>
|
||||||
<description>
|
<description>
|
||||||
The Plugin Plugin is used to create a Maven plugin descriptor for any Mojo's found in the source tree,
|
The Plugin Plugin is used to create a Maven plugin descriptor for any Mojo's found in the source tree,
|
||||||
to include in the JAR. It is also used to generate Xdoc files for the Mojos as well as for updating the
|
to include in the JAR. It is also used to generate Xdoc files for the Mojos as well as for updating the
|
||||||
plugin registry and the artifact metadata.
|
plugin registry, the artifact metadata and a generic help goal.
|
||||||
</description>
|
</description>
|
||||||
<inceptionYear>2001</inceptionYear>
|
|
||||||
<prerequisites>
|
<prerequisites>
|
||||||
<maven>2.0.6</maven>
|
<maven>2.0.6</maven>
|
||||||
</prerequisites>
|
</prerequisites>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<!-- maven -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven</groupId>
|
<groupId>org.apache.maven</groupId>
|
||||||
<artifactId>maven-plugin-api</artifactId>
|
<artifactId>maven-plugin-api</artifactId>
|
||||||
|
|
@ -130,14 +135,54 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.codehaus.plexus</groupId>
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
<artifactId>plexus-utils</artifactId>
|
<artifactId>plexus-utils</artifactId>
|
||||||
<version>1.4.5</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.codehaus.plexus</groupId>
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
<artifactId>plexus-container-default</artifactId>
|
<artifactId>plexus-container-default</artifactId>
|
||||||
<version>1.0-alpha-9</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<!-- Copy from project up -->
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-plugin-tools-api</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-plugin-tools-model</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-plugin-tools-java</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-plugin-tools-beanshell</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-plugin-descriptor</artifactId>
|
||||||
|
<version>2.0.5</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
|
<artifactId>plexus-utils</artifactId>
|
||||||
|
<version>1.4.9</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
|
<artifactId>plexus-container-default</artifactId>
|
||||||
|
<version>1.0-alpha-9</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<pluginManagement>
|
<pluginManagement>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
@ -149,24 +194,33 @@
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
|
<!-- TODO add this
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-plugin-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>generated-helpmojo</id>
|
||||||
|
<goals>
|
||||||
|
<goal>helpmojo</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
-->
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<doxia.version>1.0-alpha-10-SNAPSHOT</doxia.version>
|
<doxia.version>1.0-alpha-10-SNAPSHOT</doxia.version>
|
||||||
<doxia-sitetools.version>1.0-alpha-10-SNAPSHOT</doxia-sitetools.version>
|
<doxia-sitetools.version>1.0-alpha-10-SNAPSHOT</doxia-sitetools.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
<site>
|
<site>
|
||||||
<id>apache.website</id>
|
<id>apache.website</id>
|
||||||
<url>scp://people.apache.org/www/maven.apache.org/plugins/maven-plugin-plugin</url>
|
<url>scp://people.apache.org/www/maven.apache.org/plugins/maven-plugin-plugin</url>
|
||||||
</site>
|
</site>
|
||||||
</distributionManagement>
|
</distributionManagement>
|
||||||
<reporting>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-plugin-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</reporting>
|
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
package org.apache.maven.plugin.plugin;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
import org.apache.maven.tools.plugin.generator.Generator;
|
||||||
|
import org.apache.maven.tools.plugin.generator.PluginHelpGenerator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates an <code>HelpMojo</code> class.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2.4
|
||||||
|
* @goal helpmojo
|
||||||
|
* @phase generate-sources
|
||||||
|
*/
|
||||||
|
public class HelpGeneratorMojo
|
||||||
|
extends AbstractGeneratorMojo
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The directory where the generated <code>HelpMojo</code> file will be put.
|
||||||
|
*
|
||||||
|
* @parameter expression="${project.build.directory}/generated-sources/plugin"
|
||||||
|
* @required
|
||||||
|
*/
|
||||||
|
protected File outputDirectory;
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
protected File getOutputDirectory()
|
||||||
|
{
|
||||||
|
return outputDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
protected Generator createGenerator()
|
||||||
|
{
|
||||||
|
return new PluginHelpGenerator( getLog() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public void execute()
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
super.execute();
|
||||||
|
|
||||||
|
if ( !project.getCompileSourceRoots().contains( outputDirectory.getAbsolutePath() ) )
|
||||||
|
{
|
||||||
|
project.addCompileSourceRoot( outputDirectory.getAbsolutePath() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
------
|
||||||
|
Configuring Generation of Help Mojo
|
||||||
|
------
|
||||||
|
Vincent Siveton
|
||||||
|
------
|
||||||
|
January 2008
|
||||||
|
------
|
||||||
|
|
||||||
|
~~ Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
~~ or more contributor license agreements. See the NOTICE file
|
||||||
|
~~ distributed with this work for additional information
|
||||||
|
~~ regarding copyright ownership. The ASF licenses this file
|
||||||
|
~~ to you under the Apache License, Version 2.0 (the
|
||||||
|
~~ "License"); you may not use this file except in compliance
|
||||||
|
~~ with the License. You may obtain a copy of the License at
|
||||||
|
~~
|
||||||
|
~~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~~
|
||||||
|
~~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~~ software distributed under the License is distributed on an
|
||||||
|
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~~ KIND, either express or implied. See the License for the
|
||||||
|
~~ specific language governing permissions and limitations
|
||||||
|
~~ under the License.
|
||||||
|
|
||||||
|
Configuring Generation of Help Mojo
|
||||||
|
|
||||||
|
To configure the generation of an <<<Help>>> Mojo, add the following to the project's pom:
|
||||||
|
|
||||||
|
+-----+
|
||||||
|
<project>
|
||||||
|
...
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-plugin-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>generated-helpmojo</id>
|
||||||
|
<goals>
|
||||||
|
<goal>helpmojo</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
...
|
||||||
|
</build>
|
||||||
|
...
|
||||||
|
</project>
|
||||||
|
+-----+
|
||||||
|
|
||||||
|
The mojo is generated by default in <<<$\{project.build.directory\}/generated-sources/plugin>>>.
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
------
|
||||||
|
Configuring Generation of Documentation Reports
|
||||||
|
------
|
||||||
|
Vincent Siveton
|
||||||
|
------
|
||||||
|
January 2008
|
||||||
|
------
|
||||||
|
|
||||||
|
~~ Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
~~ or more contributor license agreements. See the NOTICE file
|
||||||
|
~~ distributed with this work for additional information
|
||||||
|
~~ regarding copyright ownership. The ASF licenses this file
|
||||||
|
~~ to you under the Apache License, Version 2.0 (the
|
||||||
|
~~ "License"); you may not use this file except in compliance
|
||||||
|
~~ with the License. You may obtain a copy of the License at
|
||||||
|
~~
|
||||||
|
~~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~~
|
||||||
|
~~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~~ software distributed under the License is distributed on an
|
||||||
|
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~~ KIND, either express or implied. See the License for the
|
||||||
|
~~ specific language governing permissions and limitations
|
||||||
|
~~ under the License.
|
||||||
|
|
||||||
|
Configuring Generation of Documentation Reports
|
||||||
|
|
||||||
|
To configure the generation of the documentation reports, add the following to the project's pom:
|
||||||
|
|
||||||
|
+-----+
|
||||||
|
<project>
|
||||||
|
...
|
||||||
|
<reporting>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-plugin-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
...
|
||||||
|
</reporting>
|
||||||
|
...
|
||||||
|
</project>
|
||||||
|
+-----+
|
||||||
|
|
||||||
|
The documentation is generated by default in <<<$\{project.build.directory\}/site>>>.
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
------
|
------
|
||||||
Maria Odea Ching
|
Maria Odea Ching
|
||||||
------
|
------
|
||||||
27 July 2006
|
January 2008
|
||||||
------
|
------
|
||||||
|
|
||||||
~~ Licensed to the Apache Software Foundation (ASF) under one
|
~~ Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
|
@ -26,11 +26,12 @@
|
||||||
Maven 2 Plugin Plugin
|
Maven 2 Plugin Plugin
|
||||||
|
|
||||||
The Plugin Plugin is used to create a Maven plugin descriptor for any Mojo's found in the source tree, to include in the JAR.
|
The Plugin Plugin is used to create a Maven plugin descriptor for any Mojo's found in the source tree, to include in the JAR.
|
||||||
It is also used to generate Xdoc files for the Mojos as well as for updating the plugin registry and the artifact metadata.
|
It is also used to generate Xdoc files for the Mojos as well as for updating the plugin registry, the artifact metadata and
|
||||||
|
a generic help goal.
|
||||||
|
|
||||||
* Goals Overview
|
* Goals Overview
|
||||||
|
|
||||||
The Plugin Plugin has five goals:
|
The Plugin Plugin has six goals:
|
||||||
|
|
||||||
* {{{descriptor-mojo.html}plugin:descriptor}} generates a plugin descriptor.
|
* {{{descriptor-mojo.html}plugin:descriptor}} generates a plugin descriptor.
|
||||||
|
|
||||||
|
|
@ -45,6 +46,8 @@ Maven 2 Plugin Plugin
|
||||||
artifact, for subsequent installation and deployment. The first use-case for this is to add the LATEST metadata
|
artifact, for subsequent installation and deployment. The first use-case for this is to add the LATEST metadata
|
||||||
(which is plugin-specific) for shipping alongside the plugin's artifact.
|
(which is plugin-specific) for shipping alongside the plugin's artifact.
|
||||||
|
|
||||||
|
* {{{helpmojo-mojo.html}helpmojo}} generates an help mojo with describes all project mojos.
|
||||||
|
|
||||||
* Usage
|
* Usage
|
||||||
|
|
||||||
Instructions on how to use the Plugin Plugin can be found {{{usage.html}here}}.
|
Instructions on how to use the Plugin Plugin can be found {{{usage.html}here}}.
|
||||||
|
|
@ -55,7 +58,6 @@ Maven 2 Plugin Plugin
|
||||||
|
|
||||||
* {{{examples/generate-descriptor.html}Configuring Generation of Plugin Descriptor}}
|
* {{{examples/generate-descriptor.html}Configuring Generation of Plugin Descriptor}}
|
||||||
|
|
||||||
|
* {{{examples/generate-help.html}Configuring Generation of Help Mojo}}
|
||||||
|
|
||||||
|
[]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,9 @@
|
||||||
Usage
|
Usage
|
||||||
------
|
------
|
||||||
Maria Odea Ching
|
Maria Odea Ching
|
||||||
|
Vincent Siveton
|
||||||
------
|
------
|
||||||
27 July 2006
|
January 2008
|
||||||
------
|
------
|
||||||
|
|
||||||
~~ Licensed to the Apache Software Foundation (ASF) under one
|
~~ Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
|
@ -40,7 +41,7 @@ Usage
|
||||||
mvn package
|
mvn package
|
||||||
+-----+
|
+-----+
|
||||||
|
|
||||||
You will see that the plugin.xml file is generated in the target/classes/META-INF/maven directory of your project. The file is
|
You will see that the plugin.xml file is generated in the <<<target/classes/META-INF/maven>>> directory of your project. The file is
|
||||||
also bundled in the generated jar file.
|
also bundled in the generated jar file.
|
||||||
|
|
||||||
To explicitly execute the <<<plugin:descriptor>>> goal, type the following in the command line:
|
To explicitly execute the <<<plugin:descriptor>>> goal, type the following in the command line:
|
||||||
|
|
@ -57,6 +58,8 @@ mvn plugin:descriptor
|
||||||
mvn plugin:xdoc
|
mvn plugin:xdoc
|
||||||
+-----+
|
+-----+
|
||||||
|
|
||||||
|
The xdoc file is generated by default in <<<$\{project.build.directory\}/generated-site/xdoc>>>.
|
||||||
|
|
||||||
* The <<<plugin:updateRegistry>>> Goal
|
* The <<<plugin:updateRegistry>>> Goal
|
||||||
|
|
||||||
The <<<plugin:updateRegistry>>> goal is bound to the <<<install>>> phase of the build life cycle. This goal updates the
|
The <<<plugin:updateRegistry>>> goal is bound to the <<<install>>> phase of the build life cycle. This goal updates the
|
||||||
|
|
@ -88,3 +91,12 @@ mvn plugin:updateRegistry
|
||||||
mvn package
|
mvn package
|
||||||
+-----+
|
+-----+
|
||||||
|
|
||||||
|
* The <<<plugin:helpmojo>>> Goal
|
||||||
|
|
||||||
|
To generate an <<<HelpMojo>>> for the mojos of your plugin, execute the following on the command line:
|
||||||
|
|
||||||
|
+-----+
|
||||||
|
mvn plugin:helpmojo
|
||||||
|
+-----+
|
||||||
|
|
||||||
|
The mojo is generated by default in <<<$\{project.build.directory\}/generated-sources/plugin>>>.
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@
|
||||||
|
|
||||||
<project name="Maven Plugin Plugin">
|
<project name="Maven Plugin Plugin">
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<menu name="Overview">
|
<menu name="Overview">
|
||||||
<item name="Introduction" href="index.html"/>
|
<item name="Introduction" href="index.html"/>
|
||||||
<item name="Goals" href="plugin-info.html"/>
|
<item name="Goals" href="plugin-info.html"/>
|
||||||
|
|
@ -31,11 +30,12 @@
|
||||||
|
|
||||||
<menu name="Examples">
|
<menu name="Examples">
|
||||||
<item name="Configuring Generation of Plugin Descriptor" href="/examples/generate-descriptor.html"/>
|
<item name="Configuring Generation of Plugin Descriptor" href="/examples/generate-descriptor.html"/>
|
||||||
|
<item name="Configuring Generation of Plugin Documentation" href="/examples/generate-report.html"/>
|
||||||
|
<item name="Configuring Generation of HelpMojo" href="/examples/generate-help.html"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<menu name="Developers">
|
<menu name="Developers">
|
||||||
<item name="Multiple Language Support: Redesign Notes" href="multiple-language-support.html"/>
|
<item name="Multiple Language Support: Redesign Notes" href="multiple-language-support.html"/>
|
||||||
</menu>
|
</menu>
|
||||||
</body>
|
</body>
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,534 @@
|
||||||
|
package org.apache.maven.tools.plugin.generator;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.swing.text.html.HTMLEditorKit;
|
||||||
|
import javax.swing.text.html.parser.ParserDelegator;
|
||||||
|
|
||||||
|
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||||
|
import org.apache.maven.plugin.descriptor.Parameter;
|
||||||
|
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||||
|
import org.apache.maven.plugin.logging.Log;
|
||||||
|
import org.codehaus.plexus.util.IOUtil;
|
||||||
|
import org.codehaus.plexus.util.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates an <code>HelpMojo</code> class.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2.4
|
||||||
|
*/
|
||||||
|
public class PluginHelpGenerator
|
||||||
|
implements Generator
|
||||||
|
{
|
||||||
|
private static final String LS = System.getProperty( "line.separator" );
|
||||||
|
|
||||||
|
private static final String HELP_MOJO_CLASS_NAME = "HelpMojo";
|
||||||
|
|
||||||
|
private static final String HELP_GOAL = "help";
|
||||||
|
|
||||||
|
private final Log log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor
|
||||||
|
*
|
||||||
|
* @param log
|
||||||
|
*/
|
||||||
|
public PluginHelpGenerator( Log log )
|
||||||
|
{
|
||||||
|
this.log = log;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public void execute( File destinationDirectory, PluginDescriptor pluginDescriptor )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
if ( pluginDescriptor.getMojos() == null || pluginDescriptor.getMojos().size() < 1 )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String packageName = discoverPackageName( pluginDescriptor );
|
||||||
|
|
||||||
|
File helpClass = new File( destinationDirectory, packageName.replace( '.', File.separatorChar )
|
||||||
|
+ File.separator + HELP_MOJO_CLASS_NAME + ".java" );
|
||||||
|
|
||||||
|
// Verify that no help goal already exists
|
||||||
|
for ( Iterator it = pluginDescriptor.getMojos().iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
MojoDescriptor descriptor = (MojoDescriptor) it.next();
|
||||||
|
|
||||||
|
if ( descriptor.getGoal().equals( HELP_GOAL )
|
||||||
|
&& !descriptor.getImplementation().equals( packageName + "." + HELP_MOJO_CLASS_NAME ) )
|
||||||
|
{
|
||||||
|
if ( log.isWarnEnabled() )
|
||||||
|
{
|
||||||
|
log.warn( "\n\nAn help goal (" + descriptor.getImplementation()
|
||||||
|
+ ") already exists in this plugin. SKIPPED THE " + HELP_MOJO_CLASS_NAME + " GENERATION.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
helpClass.getParentFile().mkdirs();
|
||||||
|
|
||||||
|
Writer writer = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
writer = new FileWriter( helpClass );
|
||||||
|
writeClass( writer, packageName, pluginDescriptor );
|
||||||
|
writer.flush();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
IOUtil.close( writer );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Private methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the help goal for the generated mojo
|
||||||
|
*/
|
||||||
|
private static String getHelpGoalName()
|
||||||
|
{
|
||||||
|
return HELP_GOAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the full help goal name for the generated mojo
|
||||||
|
*/
|
||||||
|
private static String getFullHelpGoalName( PluginDescriptor pluginDescriptor )
|
||||||
|
{
|
||||||
|
return pluginDescriptor.getGoalPrefix() + ":" + getHelpGoalName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param pluginDescriptor
|
||||||
|
* @return the help description for the generated mojo
|
||||||
|
*/
|
||||||
|
private static String getHelpDescription( PluginDescriptor pluginDescriptor )
|
||||||
|
{
|
||||||
|
return "Display help information on '" + pluginDescriptor.getPluginLookupKey() + "' plugin. Call 'mvn "
|
||||||
|
+ getFullHelpGoalName( pluginDescriptor ) + " -Ddetail=true' to display all details.";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the best package name, based on the number of hits of actual Mojo classes.
|
||||||
|
*
|
||||||
|
* @param pluginDescriptor
|
||||||
|
* @return the best name of the package for the generated mojo
|
||||||
|
*/
|
||||||
|
private static String discoverPackageName( PluginDescriptor pluginDescriptor )
|
||||||
|
{
|
||||||
|
Map packageNames = new HashMap();
|
||||||
|
for ( Iterator it = pluginDescriptor.getMojos().iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
MojoDescriptor descriptor = (MojoDescriptor) it.next();
|
||||||
|
|
||||||
|
String impl = descriptor.getImplementation();
|
||||||
|
if ( impl.lastIndexOf( '.' ) != -1 )
|
||||||
|
{
|
||||||
|
String name = impl.substring( 0, impl.lastIndexOf( '.' ) );
|
||||||
|
if ( packageNames.get( name ) != null )
|
||||||
|
{
|
||||||
|
int next = ( (Integer) packageNames.get( name ) ).intValue() + 1;
|
||||||
|
packageNames.put( name, Integer.valueOf( "" + next ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
packageNames.put( name, Integer.valueOf( "" + 1 ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
packageNames.put( "", Integer.valueOf( "" + 1 ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String packageName = "";
|
||||||
|
int max = 0;
|
||||||
|
for ( Iterator it = packageNames.keySet().iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
String key = it.next().toString();
|
||||||
|
int value = ( (Integer) packageNames.get( key ) ).intValue();
|
||||||
|
if ( value > max )
|
||||||
|
{
|
||||||
|
max = value;
|
||||||
|
packageName = key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return packageName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated the <code>HelpMojo</code> class.
|
||||||
|
*
|
||||||
|
* @param writer
|
||||||
|
* @param packageName
|
||||||
|
* @param pluginDescriptor
|
||||||
|
* @throws IOException if any
|
||||||
|
*/
|
||||||
|
private static void writeClass( Writer writer, String packageName, PluginDescriptor pluginDescriptor )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
if ( packageName.length() > 0 )
|
||||||
|
{
|
||||||
|
writer.write( "package " + packageName + ";" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
writeImports( writer );
|
||||||
|
writer.write( LS );
|
||||||
|
|
||||||
|
writeMojoJavadoc( writer, pluginDescriptor );
|
||||||
|
|
||||||
|
writer.write( "public class HelpMojo" + LS );
|
||||||
|
writer.write( " extends AbstractMojo" + LS );
|
||||||
|
writer.write( "{" + LS );
|
||||||
|
|
||||||
|
writeVariables( writer );
|
||||||
|
|
||||||
|
writer.write( LS );
|
||||||
|
|
||||||
|
writeExecute( writer, pluginDescriptor );
|
||||||
|
|
||||||
|
writer.write( LS );
|
||||||
|
writeUtilities( writer );
|
||||||
|
writer.write( "}" + LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeImports( Writer writer )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
writer.write( "import java.util.ArrayList;" + LS );
|
||||||
|
writer.write( "import java.util.Iterator;" + LS );
|
||||||
|
writer.write( "import java.util.List;" + LS );
|
||||||
|
writer.write( "import java.util.StringTokenizer;" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( "import org.apache.maven.plugin.AbstractMojo;" + LS );
|
||||||
|
writer.write( "import org.apache.maven.plugin.MojoExecutionException;" + LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeMojoJavadoc( Writer writer, PluginDescriptor pluginDescriptor )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
writer.write( "/**" + LS );
|
||||||
|
writer.write( " * " + getHelpDescription( pluginDescriptor ) + LS );
|
||||||
|
writer.write( " *" + LS );
|
||||||
|
writer.write( " * @version generated on " + new Date() + LS );
|
||||||
|
writer.write( " * @goal " + getHelpGoalName() + LS );
|
||||||
|
writer.write( " */" + LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeVariables( Writer writer )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
writer.write( " /** 80-character display buffer */" + LS );
|
||||||
|
writer.write( " private static final int DEFAULT_WIDTH = 80;" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " /** 4 indent spaces */" + LS );
|
||||||
|
writer.write( " private static final String DEFAULT_INDENT = repeat( \" \", 4 );" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " /**" + LS );
|
||||||
|
writer.write( " * If true, display all settable properies for each goal." + LS );
|
||||||
|
writer.write( " *" + LS );
|
||||||
|
writer.write( " * @parameter expression=\"${detail}\" default-value=\"false\"" + LS );
|
||||||
|
writer.write( " */" + LS );
|
||||||
|
writer.write( " private boolean detail;" + LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeExecute( Writer writer, PluginDescriptor pluginDescriptor )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
writer.write( " /** {@inheritDoc} */" + LS );
|
||||||
|
writer.write( " public void execute()" + LS );
|
||||||
|
writer.write( " throws MojoExecutionException" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
|
||||||
|
writer.write( " StringBuffer sb = new StringBuffer();" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " sb.append( \"The '" + pluginDescriptor.getPluginLookupKey() + "' plugin has "
|
||||||
|
+ ( pluginDescriptor.getMojos().size() + 1 ) + " "
|
||||||
|
+ ( ( pluginDescriptor.getMojos().size() + 1 ) > 1 ? "goals" : "goal" ) + ":\" ).append( \"\\n\" );" + LS );
|
||||||
|
writer.write( " sb.append( \"\\n\" );" + LS );
|
||||||
|
|
||||||
|
writer.write( LS );
|
||||||
|
|
||||||
|
for ( Iterator it = pluginDescriptor.getMojos().iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
MojoDescriptor descriptor = (MojoDescriptor) it.next();
|
||||||
|
|
||||||
|
String goal = descriptor.getFullGoalName();
|
||||||
|
String description = StringUtils.isNotEmpty( descriptor.getDescription() ) ? toText( descriptor
|
||||||
|
.getDescription() ) : "No description available.";
|
||||||
|
|
||||||
|
writer.write( " sb.append( \"" + goal + "\" ).append( \"\\n\" );" + LS );
|
||||||
|
writer.write( " for ( Iterator it = toLines( \"" + description + "\" ).iterator(); it.hasNext(); )"
|
||||||
|
+ LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " sb.append( it.next().toString() ).append( \"\\n\" );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
|
||||||
|
if ( descriptor.getParameters() != null && descriptor.getParameters().size() > 0 )
|
||||||
|
{
|
||||||
|
writer.write( " if ( detail )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
|
||||||
|
writer.write( " sb.append( \"\\n\" );" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
|
||||||
|
writer.write( " sb.append( repeat( \" \", 4 ) );" + LS );
|
||||||
|
writer.write( " sb.append( \"Available parameters:\" ).append( \"\\n\" );" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " sb.append( \"\\n\" );" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
|
||||||
|
for ( Iterator it2 = descriptor.getParameters().iterator(); it2.hasNext(); )
|
||||||
|
{
|
||||||
|
Parameter parameter = (Parameter) it2.next();
|
||||||
|
|
||||||
|
if ( parameter.isEditable() )
|
||||||
|
{
|
||||||
|
String expression = parameter.getExpression();
|
||||||
|
|
||||||
|
if ( expression == null || !expression.startsWith( "${component." ) )
|
||||||
|
{
|
||||||
|
String parameterName = parameter.getName();
|
||||||
|
String parameterDescription = StringUtils.isNotEmpty( parameter.getDescription() )
|
||||||
|
? toText( parameter
|
||||||
|
.getDescription() )
|
||||||
|
: "No description available.";
|
||||||
|
String parameterDefaultValue = parameterName
|
||||||
|
+ ( StringUtils.isNotEmpty( parameter.getDefaultValue() ) ? " (Default: '"
|
||||||
|
+ parameter.getDefaultValue() + "')" : "" );
|
||||||
|
|
||||||
|
writer.write( " for ( Iterator it = toLines( \"" + parameterDefaultValue
|
||||||
|
+ "\", repeat( \" \", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " sb.append( it.next().toString() ).append( \"\\n\" );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
|
||||||
|
writer.write( " for ( Iterator it = toLines( \"" + parameterDescription
|
||||||
|
+ "\", repeat( \" \", 8 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " sb.append( it.next().toString() ).append( \"\\n\" );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " sb.append( \"\\n\" );" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO Should be discovered
|
||||||
|
writer.write( " sb.append( \"" + getFullHelpGoalName( pluginDescriptor ) + "\" ).append( \"\\n\" );"
|
||||||
|
+ LS );
|
||||||
|
writer.write( " for ( Iterator it = toLines( \"" + getHelpDescription( pluginDescriptor )
|
||||||
|
+ "\" ).iterator(); it.hasNext(); )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " sb.append( it.next().toString() ).append( \"\\n\" );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
|
||||||
|
writer.write( LS );
|
||||||
|
|
||||||
|
writer.write( " if ( getLog().isInfoEnabled() )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " getLog().info( sb.toString() );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeUtilities( Writer writer )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
writer.write( " /**" + LS );
|
||||||
|
writer.write( " * <p>Repeat a String <code>n</code> times to form a new string.</p>" + LS );
|
||||||
|
writer.write( " *" + LS );
|
||||||
|
writer.write( " * @param str String to repeat" + LS );
|
||||||
|
writer.write( " * @param repeat number of times to repeat str" + LS );
|
||||||
|
writer.write( " * @return String with repeated String" + LS );
|
||||||
|
writer.write( " * @throws NegativeArraySizeException if <code>repeat < 0</code>" + LS );
|
||||||
|
writer.write( " * @throws NullPointerException if str is <code>null</code>" + LS );
|
||||||
|
writer.write( " */" + LS );
|
||||||
|
writer.write( " private static String repeat( String str, int repeat )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " StringBuffer buffer = new StringBuffer( repeat * str.length() );" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " for ( int i = 0; i < repeat; i++ )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " buffer.append( str );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " return buffer.toString();" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " /**" + LS );
|
||||||
|
writer.write( " * <p>Give a list of lines for the <code>str</code>. " + "Each line is indented by 4 spaces"
|
||||||
|
+ LS );
|
||||||
|
writer.write( " * and has a maximum of <code>80</code> characters.</p>" + LS );
|
||||||
|
writer.write( " *" + LS );
|
||||||
|
writer.write( " * @param str String to split in lines" + LS );
|
||||||
|
writer.write( " * @return List of lines" + LS );
|
||||||
|
writer.write( " * @throws NullPointerException if str is <code>null</code>" + LS );
|
||||||
|
writer.write( " */" + LS );
|
||||||
|
writer.write( " private static List toLines( String str )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " return toLines( str, DEFAULT_INDENT, DEFAULT_WIDTH );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " /**" + LS );
|
||||||
|
writer
|
||||||
|
.write( " * <p>Give a list of lines for the <code>str</code>. Each line is indented by <code>indent</code>"
|
||||||
|
+ LS );
|
||||||
|
writer.write( " * and has a maximum of <code>size</code> characters.</p>" + LS );
|
||||||
|
writer.write( " *" + LS );
|
||||||
|
writer.write( " * @param str String to split in lines" + LS );
|
||||||
|
writer.write( " * @param indent the string to precede each line" + LS );
|
||||||
|
writer.write( " * @param size the size of the character display buffer" + LS );
|
||||||
|
writer.write( " * @return List of lines" + LS );
|
||||||
|
writer.write( " * @throws IllegalArgumentException if <code>size < 0</code>" + LS );
|
||||||
|
writer.write( " * @throws NullPointerException if str is <code>null</code>" + LS );
|
||||||
|
writer.write( " */" + LS );
|
||||||
|
writer.write( " private static List toLines( String str, String indent, int size )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " List sentences = new ArrayList();" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " if ( indent == null )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " indent = \"\";" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " if ( size < 0 )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " throw new IllegalArgumentException( \"size should be positive\" );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " StringBuffer tmp = new StringBuffer( indent );" + LS );
|
||||||
|
writer.write( " StringTokenizer tokenizer = new StringTokenizer( str, \" \" );" + LS );
|
||||||
|
writer.write( " while ( tokenizer.hasMoreTokens() )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " String word = tokenizer.nextToken();" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " if ( tmp.length() + word.length() + 1 < size )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " tmp.append( word ).append( \" \" );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( " else" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " sentences.add( tmp.toString() );" + LS );
|
||||||
|
writer.write( " tmp = new StringBuffer( indent );" + LS );
|
||||||
|
writer.write( " tmp.append( word ).append( \" \" );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " if ( tmp.toString().length() > 0 )" + LS );
|
||||||
|
writer.write( " {" + LS );
|
||||||
|
writer.write( " sentences.add( tmp.toString() );" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
writer.write( LS );
|
||||||
|
writer.write( " return sentences;" + LS );
|
||||||
|
writer.write( " }" + LS );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove HTML tags from a string
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @return a String with HTML tags into pure text
|
||||||
|
* @throws IOException if any
|
||||||
|
*/
|
||||||
|
private static String toText( String str )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
if ( StringUtils.isEmpty( str ) )
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
final StringBuffer sb = new StringBuffer();
|
||||||
|
|
||||||
|
HTMLEditorKit.Parser parser = new ParserDelegator();
|
||||||
|
HTMLEditorKit.ParserCallback htmlCallback = new HTMLEditorKit.ParserCallback()
|
||||||
|
{
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public void handleText( char[] data, int pos )
|
||||||
|
{
|
||||||
|
// the parser parses things like <br /> as "\n>"
|
||||||
|
if ( data[0] == '>' )
|
||||||
|
{
|
||||||
|
for ( int i = 1; i < data.length; i++ )
|
||||||
|
{
|
||||||
|
if ( data[i] == '\n' )
|
||||||
|
{
|
||||||
|
sb.append( ' ' );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.append( data[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < data.length; i++ )
|
||||||
|
{
|
||||||
|
if ( data[i] == '\n' )
|
||||||
|
{
|
||||||
|
sb.append( ' ' );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.append( data[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
parser.parse( new StringReader( str ), htmlCallback, true );
|
||||||
|
|
||||||
|
return StringUtils.replace( sb.toString(), "\"", "'" ); // for CDATA
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -568,6 +568,13 @@ public class JavaMojoDescriptorExtractor
|
||||||
builder.addSourceTree( new File( (String) i.next() ) );
|
builder.addSourceTree( new File( (String) i.next() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO be more dynamic
|
||||||
|
if ( !project.getCompileSourceRoots()
|
||||||
|
.contains( new File( project.getBasedir(), "target/generated-sources/plugin" ).getAbsolutePath() ) )
|
||||||
|
{
|
||||||
|
builder.addSourceTree( new File( project.getBasedir(), "target/generated-sources/plugin" ) );
|
||||||
|
}
|
||||||
|
|
||||||
return builder.getClasses();
|
return builder.getClasses();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue