org.codehaus.mojo.rpm.HelpMojo Maven / Gradle / Ivy
package org.codehaus.mojo.rpm;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
/**
* Display help information on rpm-cbuild-maven-plugin. Call mvn rpm-cbuild:help -Ddetail=true -Dgoal=<goal-name>
to display parameter details.
*
* @version generated on Thu Nov 06 17:08:56 EST 2008
* @goal help
* @requiresProject false
*/
public class HelpMojo
extends AbstractMojo
{
/**
* If true
, display all settable properties for each goal.
*
* @parameter expression="${detail}" default-value="false"
*/
private boolean detail;
/**
* The name of the goal for which to show help. If unspecified, all goals will be displayed.
*
* @parameter expression="${goal}"
*/
private java.lang.String goal;
/**
* The maximum length of a display line.
*
* @parameter expression="${lineLength}" default-value="80"
*/
private int lineLength;
/**
* The number of spaces per indentation level.
*
* @parameter expression="${indentSize}" default-value="2"
*/
private int indentSize;
/** {@inheritDoc} */
public void execute()
throws MojoExecutionException
{
StringBuffer sb = new StringBuffer();
append( sb, "org.codehaus.mojo:rpm-cbuild-maven-plugin:1.0-alpha-5", 0 );
append( sb, "", 0 );
append( sb, "RPM Plugin 1.0-alpha-5", 0 );
append( sb, "These plugins are designed to convert tarballs of typical non-java open source project and with patch/autoconf/configure/make/install prepare a directory for packaging with RPM. Stuffing a java project into an RPM is also supported.", 1 );
append( sb, "", 0 );
if ( goal == null || goal.length() <= 0 )
{
append( sb, "This plugin has 8 goals:", 0 );
append( sb, "", 0 );
}
if ( goal == null || goal.length() <= 0 || "build".equals( goal ) )
{
append( sb, "rpm-cbuild:build", 0 );
append( sb, "Harvest a RPM from the project binaries and the generated spec file.", 1 );
append( sb, "", 0 );
if ( detail )
{
append( sb, "Available parameters:", 1 );
append( sb, "", 0 );
append( sb, "destDir (Default: ${project.build.directory}/rpm-basedir)", 2 );
append( sb, "The Make DESTDIR, to let the RPM harvester know where the staged installation directory is located for packaging", 3 );
append( sb, "", 0 );
append( sb, "platformPostfix", 2 );
append( sb, "Override for platform postfix on RPM release number", 3 );
append( sb, "", 0 );
append( sb, "prefix", 2 );
append( sb, "The configure prefix, to let the RPM harvester know how to build the dir structure.", 3 );
append( sb, "", 0 );
append( sb, "release (Default: 1)", 2 );
append( sb, "The RPM releaes level or build number", 3 );
append( sb, "", 0 );
append( sb, "rpmName", 2 );
append( sb, "Override parameter for the name of this RPM", 3 );
append( sb, "", 0 );
append( sb, "rpmrcIncludes", 2 );
append( sb, "This is a list of locations to include in the generated rpmrc file that contains the ref to the macro definitions that specify the topdir to be used here.", 3 );
append( sb, "", 0 );
append( sb, "skipBuild (Default: false)", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "skipPlatformPostfix (Default: false)", 2 );
append( sb, "Whether to skip postfix on RPM release number rhoover - we can\'t use null on platformPostfix as an indication to skip the postfix until this bug is fixed (http://jira.codehaus.org/browse/MNG-1959;jsessionid=a9HqXpP8ZvX7DDXqNR?page=all) because currently specifying an empty string for a parameter in the POM yields null instead of an empty string.", 3 );
append( sb, "", 0 );
append( sb, "topDir (Default: ${project.build.directory}/rpm-topdir)", 2 );
append( sb, "Top directory of the RPM filesystem structure.", 3 );
append( sb, "", 0 );
}
}
if ( goal == null || goal.length() <= 0 || "generate-spec".equals( goal ) )
{
append( sb, "rpm-cbuild:generate-spec", 0 );
append( sb, "Build a RPM spec file and save it to disk for subsequent harvesting.", 1 );
append( sb, "", 0 );
if ( detail )
{
append( sb, "Available parameters:", 1 );
append( sb, "", 0 );
append( sb, "dependsExclusions", 2 );
append( sb, "List of dependencies in the form \'groupId:artifactId\' which should be excluded from the list of dependency functionality.", 3 );
append( sb, "", 0 );
append( sb, "destDir (Default: ${project.build.directory}/rpm-basedir)", 2 );
append( sb, "The Make DESTDIR, to let the RPM harvester know where the software staged installation directory is located for packaging", 3 );
append( sb, "", 0 );
append( sb, "platformPostfix", 2 );
append( sb, "Override for platform postfix on RPM release number", 3 );
append( sb, "", 0 );
append( sb, "postInstallFile", 2 );
append( sb, "Create a simple RPM post install mechanism If defined, the RPM will insert the named file into the spec file that the pluggin is building (some claim this is weak, but make the script a .sh.in file and let autoconf do some expanding)", 3 );
append( sb, "", 0 );
append( sb, "postUninstallFile", 2 );
append( sb, "Create a simple RPM post un install mechanism If defined, the RPM will insert the named file into the spec file that the pluggin is building (this is weak in the sense that template expansion is not occuring)", 3 );
append( sb, "", 0 );
append( sb, "preInstallFile", 2 );
append( sb, "Create a simple RPM pre install mechanism If defined, the RPM will insert the named file into the spec file that the pluggin is building (this is weak in the sense that template expansion is not occuring)", 3 );
append( sb, "", 0 );
append( sb, "preUninstallFile", 2 );
append( sb, "Create a simple RPM pre un install mechanism If defined, the RPM will insert the named file into the spec file that the pluggin is building (this is weak in the sense that template expansion is not occuring)", 3 );
append( sb, "", 0 );
append( sb, "prefix", 2 );
append( sb, "The configure prefix, to let the RPM harvester know how to build the dir structure.", 3 );
append( sb, "", 0 );
append( sb, "providesExclusions", 2 );
append( sb, "List of dependencies in the form \'groupId:artifactId\' which should be excluded from the list of provided functionality.", 3 );
append( sb, "", 0 );
append( sb, "release (Default: 1)", 2 );
append( sb, "The build number of the RPM, so you get versions like 1.2-4 which would be the fourth build of the 1.2 tarball.", 3 );
append( sb, "", 0 );
append( sb, "rpmName", 2 );
append( sb, "Override parameter for the name of the RPM to be created.", 3 );
append( sb, "", 0 );
append( sb, "rpmNoStrip (Default: false)", 2 );
append( sb, "Turn off RPM compression and symbol stripping - this is very much manditory for binary sources like Sybase, Oracle, and the SunJDK.", 3 );
append( sb, "", 0 );
append( sb, "skip (Default: false)", 2 );
append( sb, "Whether to skip RPM spec file generation.", 3 );
append( sb, "", 0 );
append( sb, "skipPlatformPostfix (Default: false)", 2 );
append( sb, "Whether to skip postfix on RPM release number rhoover - we can\'t use null on platformPostfix as an indication to skip the postfix until this bug is fixed (http://jira.codehaus.org/browse/MNG-1959) because currently specifying an empty string for a parameter in the POM yields null instead of an empty string.", 3 );
append( sb, "", 0 );
append( sb, "topDir (Default: ${project.build.directory}/rpm-topdir)", 2 );
append( sb, "The top directory of the RPM harvesting structure.", 3 );
append( sb, "", 0 );
}
}
if ( goal == null || goal.length() <= 0 || "help".equals( goal ) )
{
append( sb, "rpm-cbuild:help", 0 );
append( sb, "Display help information on rpm-cbuild-maven-plugin. Call\n\u00a0\u00a0mvn\u00a0rpm-cbuild:help\u00a0-Ddetail=true\u00a0-Dgoal=\nto display parameter details.", 1 );
append( sb, "", 0 );
if ( detail )
{
append( sb, "Available parameters:", 1 );
append( sb, "", 0 );
append( sb, "detail (Default: false)", 2 );
append( sb, "If true, display all settable properties for each goal.", 3 );
append( sb, "", 0 );
append( sb, "goal", 2 );
append( sb, "The name of the goal for which to show help. If unspecified, all goals will be displayed.", 3 );
append( sb, "", 0 );
append( sb, "lineLength (Default: 80)", 2 );
append( sb, "The maximum length of a display line.", 3 );
append( sb, "", 0 );
append( sb, "indentSize (Default: 2)", 2 );
append( sb, "The number of spaces per indentation level.", 3 );
append( sb, "", 0 );
}
}
if ( goal == null || goal.length() <= 0 || "install".equals( goal ) )
{
append( sb, "rpm-cbuild:install", 0 );
append( sb, "Used to install the RPM onto the OS. This is critical for multimodule builds, since dependent compiles need RPMs installed.", 1 );
append( sb, "", 0 );
if ( detail )
{
append( sb, "Available parameters:", 1 );
append( sb, "", 0 );
append( sb, "forceAllInstalls (Default: false)", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "forceInstall (Default: false)", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "release (Default: 1)", 2 );
append( sb, "The build number of the RPM, so you get versions like 1.2-4 which would be the fourth build of the 1.2 tarball.", 3 );
append( sb, "", 0 );
append( sb, "rpmDbPath", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "skipInstall (Default: false)", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "useSudo (Default: true)", 2 );
append( sb, "Flag to determine when to use sudo to execute the rpm command.", 3 );
append( sb, "", 0 );
}
}
if ( goal == null || goal.length() <= 0 || "install-dependencies".equals( goal ) )
{
append( sb, "rpm-cbuild:install-dependencies", 0 );
append( sb, "Used to install the RPM onto the OS. This is critical for multimodule builds, since dependent compiles need RPMs installed.", 1 );
append( sb, "", 0 );
if ( detail )
{
append( sb, "Available parameters:", 1 );
append( sb, "", 0 );
append( sb, "forceAllInstalls (Default: false)", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "forceDependencyInstalls (Default: false)", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "release (Default: 1)", 2 );
append( sb, "The build number of the RPM, so you get versions like 1.2-4 which would be the fourth build of the 1.2 tarball.", 3 );
append( sb, "", 0 );
append( sb, "rpmDbPath", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "skipDependencies (Default: false)", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "useSudo (Default: true)", 2 );
append( sb, "Flag to determine when to use sudo to execute the rpm command.", 3 );
append( sb, "", 0 );
}
}
if ( goal == null || goal.length() <= 0 || "remove".equals( goal ) )
{
append( sb, "rpm-cbuild:remove", 0 );
append( sb, "Used to install the RPM onto the OS. This is critical for multimodule builds, since dependent compiles need RPMs installed.", 1 );
append( sb, "", 0 );
if ( detail )
{
append( sb, "Available parameters:", 1 );
append( sb, "", 0 );
append( sb, "rpmDbPath", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "skipRemove (Default: false)", 2 );
append( sb, "(no description available)", 3 );
append( sb, "", 0 );
append( sb, "useSudo (Default: true)", 2 );
append( sb, "Flag to determine when to use sudo to execute the rpm command.", 3 );
append( sb, "", 0 );
}
}
if ( goal == null || goal.length() <= 0 || "remove-project-references".equals( goal ) )
{
append( sb, "rpm-cbuild:remove-project-references", 0 );
append( sb, "(no description available)", 1 );
append( sb, "", 0 );
if ( detail )
{
append( sb, "Available parameters:", 1 );
append( sb, "", 0 );
}
}
if ( goal == null || goal.length() <= 0 || "set-project-file".equals( goal ) )
{
append( sb, "rpm-cbuild:set-project-file", 0 );
append( sb, "Setup the RPM file reference for MavenProject.getArtifact().getFile(), so we can use this as a basis for determining whether to run a build or not (based on the lastMod of this file vs. the latest lastMod of the source files...this is handled in another plugin.)", 1 );
append( sb, "", 0 );
if ( detail )
{
append( sb, "Available parameters:", 1 );
append( sb, "", 0 );
append( sb, "platformPostfix", 2 );
append( sb, "Override for platform postfix on RPM release number", 3 );
append( sb, "", 0 );
append( sb, "release (Default: 1)", 2 );
append( sb, "The RPM releaes level or build number", 3 );
append( sb, "", 0 );
append( sb, "rpmFile", 2 );
append( sb, "Override the entire rpm file, not just the basename (which doesn\'t include architecture and .rpm extension).", 3 );
append( sb, "", 0 );
append( sb, "rpmName", 2 );
append( sb, "Override parameter for the name of this RPM", 3 );
append( sb, "", 0 );
append( sb, "skipPlatformPostfix (Default: false)", 2 );
append( sb, "Whether to skip postfix on RPM release number rhoover - we can\'t use null on platformPostfix as an indication to skip the postfix until this bug is fixed (http://jira.codehaus.org/browse/MNG-1959;jsessionid=a9HqXpP8ZvX7DDXqNR?page=all) because currently specifying an empty string for a parameter in the POM yields null instead of an empty string.", 3 );
append( sb, "", 0 );
append( sb, "topDir (Default: ${project.build.directory}/rpm-topdir)", 2 );
append( sb, "Top directory of the RPM filesystem structure.", 3 );
append( sb, "", 0 );
}
}
if ( getLog().isInfoEnabled() )
{
getLog().info( sb.toString() );
}
}
/**
* Repeat a String n
times to form a new string.
*
* @param str String to repeat
* @param repeat number of times to repeat str
* @return String with repeated String
* @throws NegativeArraySizeException if repeat < 0
* @throws NullPointerException if str is null
*/
private static String repeat( String str, int repeat )
{
StringBuffer buffer = new StringBuffer( repeat * str.length() );
for ( int i = 0; i < repeat; i++ )
{
buffer.append( str );
}
return buffer.toString();
}
private void append( StringBuffer sb, String description, int indent )
{
for ( Iterator it = toLines( description, indent ).iterator(); it.hasNext(); )
{
sb.append( it.next().toString() ).append( '\n' );
}
}
/**
* Splits the specified text into lines of convenient display length.
*
* @param text The text to split into lines, must not be null
.
* @param indent The base indentation level of each line, must not be negative.
* @return The sequence of display lines, never null
.
*/
private List toLines( String text, int indent )
{
List lines = new ArrayList();
String ind = repeat( "\t", indent );
String[] plainLines = text.split( "(\r\n)|(\r)|(\n)" );
for ( int i = 0; i < plainLines.length; i++ )
{
toLines( lines, ind + plainLines[i] );
}
return lines;
}
/**
* Adds the specified line to the output sequence, performing line wrapping if necessary.
*
* @param lines The sequence of display lines, must not be null
.
* @param line The line to add, must not be null
.
*/
private void toLines( List lines, String line )
{
int lineIndent = getIndentLevel( line );
StringBuffer buf = new StringBuffer( 256 );
String[] tokens = line.split( " +" );
for ( int i = 0; i < tokens.length; i++ )
{
String token = tokens[i];
if ( i > 0 )
{
if ( buf.length() + token.length() >= lineLength )
{
lines.add( buf.toString() );
buf.setLength( 0 );
buf.append( repeat( " ", lineIndent * indentSize ) );
}
else
{
buf.append( ' ' );
}
}
for ( int j = 0; j < token.length(); j++ )
{
char c = token.charAt( j );
if ( c == '\t' )
{
buf.append( repeat( " ", indentSize - buf.length() % indentSize ) );
}
else if ( c == '\u00A0' )
{
buf.append( ' ' );
}
else
{
buf.append( c );
}
}
}
lines.add( buf.toString() );
}
/**
* Gets the indentation level of the specified line.
*
* @param line The line whose indentation level should be retrieved, must not be null
.
* @return The indentation level of the line.
*/
private static int getIndentLevel( String line )
{
int level = 0;
for ( int i = 0; i < line.length() && line.charAt( i ) == '\t'; i++ )
{
level++;
}
for ( int i = level + 1; i <= level + 4 && i < line.length(); i++ )
{
if ( line.charAt( i ) == '\t' )
{
level++;
break;
}
}
return level;
}
}