This is an automated email from the ASF dual-hosted git repository. hboutemy pushed a commit to annotated tag maven-help-plugin-2.0.2 in repository https://gitbox.apache.org/repos/asf/maven-help-plugin.git
commit 9ad83325fdef1871368a655c2db5d13479a687bd Author: Fabrizio Giustina <fgi...@apache.org> AuthorDate: Fri Dec 8 11:24:08 2006 +0000 MPH-14 Add a mojo to print the dependency tree Submitted by Mark Hobson git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-help-plugin@483937 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 5 + .../maven/plugins/help/DependenciesMojo.java | 258 +++++++++++++++++++++ src/site/apt/index.apt | 86 +++---- src/site/apt/usage.apt | 169 +++++++------- 4 files changed, 398 insertions(+), 120 deletions(-) diff --git a/pom.xml b/pom.xml index 2b0a232..7fdf5ae 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,11 @@ <artifactId>maven-plugin-descriptor</artifactId> <version>2.0</version> </dependency> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-dependency-tree</artifactId> + <version>1.0-SNAPSHOT</version> + </dependency> </dependencies> <reporting> <plugins> diff --git a/src/main/java/org/apache/maven/plugins/help/DependenciesMojo.java b/src/main/java/org/apache/maven/plugins/help/DependenciesMojo.java new file mode 100644 index 0000000..cffb119 --- /dev/null +++ b/src/main/java/org/apache/maven/plugins/help/DependenciesMojo.java @@ -0,0 +1,258 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed 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. + */ +package org.apache.maven.plugins.help; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.StringReader; +import java.util.Iterator; + +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.metadata.ArtifactMetadataSource; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactCollector; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.dependency.tree.DependencyNode; +import org.apache.maven.shared.dependency.tree.DependencyTree; +import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; +import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; + +/** + * Displays the dependency tree for this project. + * + * @author <a href="mailto:markhob...@gmail.com">Mark Hobson</a> + * @version $Id$ + * @goal dependencies + * @requiresDependencyResolution test + */ +public class DependenciesMojo extends AbstractMojo +{ + // constants -------------------------------------------------------------- + + /** + * The indentation string to use when serialising the dependency tree. + */ + private static final String INDENT = " "; + + /** + * The newline string to use when serialising the dependency tree. + */ + private static final String NEWLINE = System.getProperty( "line.separator" ); + + // fields ----------------------------------------------------------------- + + /** + * The Maven project. + * + * @parameter expression="${project}" + * @required + * @readonly + */ + private MavenProject project; + + /** + * The artifact respository to use. + * + * @parameter expression="${localRepository}" + * @required + * @readonly + */ + private ArtifactRepository localRepository; + + /** + * The artifact factory to use. + * + * @component + */ + private ArtifactFactory artifactFactory; + + /** + * The artifact metadata source to use. + * + * @component + */ + private ArtifactMetadataSource artifactMetadataSource; + + /** + * The artifact collector to use. + * + * @component + */ + private ArtifactCollector artifactCollector; + + /** + * The dependency tree builder to use. + * + * @component + */ + private DependencyTreeBuilder dependencyTreeBuilder; + + /** + * If specified, this parameter will cause the dependency tree to be written to the path specified, instead of + * writing to the console. + * + * @parameter expression="${output}" + */ + private File output; + + // Mojo methods ----------------------------------------------------------- + + /* + * @see org.apache.maven.plugin.Mojo#execute() + */ + public void execute() throws MojoExecutionException, MojoFailureException + { + try + { + DependencyTree dependencyTree = + dependencyTreeBuilder.buildDependencyTree( project, localRepository, artifactFactory, + artifactMetadataSource, artifactCollector ); + + String dependencyTreeString = serialiseDependencyTree( dependencyTree ); + + if ( output != null ) + { + write( dependencyTreeString, output ); + + getLog().info( "Wrote dependency tree to: " + output ); + } + else + { + log( dependencyTreeString ); + } + } + catch ( DependencyTreeBuilderException exception ) + { + throw new MojoExecutionException( "Cannot build project dependency tree", exception ); + } + catch ( IOException exception ) + { + throw new MojoExecutionException( "Cannot serialise project dependency tree", exception ); + } + } + + // private methods -------------------------------------------------------- + + /** + * Serialises the specified dependency tree to a string. + * + * @param tree + * the dependency tree to serialise + * @return the serialised dependency tree + */ + private String serialiseDependencyTree( DependencyTree tree ) + { + StringBuffer buffer = new StringBuffer(); + + serialiseDependencyNode( tree.getRootNode(), buffer ); + + return buffer.toString(); + } + + /** + * Serialises the specified dependency node and it's children to the specified string buffer. + * + * @param node + * the dependency node to log + * @param buffer + * the string buffer to serialise to + */ + private void serialiseDependencyNode( DependencyNode node, StringBuffer buffer ) + { + // serialise node + + for ( int i = 0; i < node.getDepth(); i++ ) + { + buffer.append( INDENT ); + } + + buffer.append( node.getArtifact() ).append( NEWLINE ); + + // serialise children + + for ( Iterator iterator = node.getChildren().iterator(); iterator.hasNext(); ) + { + DependencyNode child = (DependencyNode) iterator.next(); + + serialiseDependencyNode( child, buffer ); + } + } + + /** + * Writes the specified string to the specified file. + * + * @param string + * the string to write + * @param file + * the file to write to + * @throws IOException + * if an I/O error occurs + */ + private void write( String string, File file ) throws IOException + { + output.getParentFile().mkdirs(); + + FileWriter writer = null; + + try + { + writer = new FileWriter( output ); + + writer.write( string ); + } + finally + { + if ( writer != null ) + { + try + { + writer.close(); + } + catch ( IOException exception ) + { + getLog().error( "Cannot close file", exception ); + } + } + } + } + + /** + * Writes the specified string to the log at info level. + * + * @param string + * the string to write + * @throws IOException + * if an I/O error occurs + */ + private void log( String string ) throws IOException + { + BufferedReader reader = new BufferedReader( new StringReader( string ) ); + + String line; + + while ( ( line = reader.readLine() ) != null ) + { + getLog().info( line ); + } + + reader.close(); + } +} diff --git a/src/site/apt/index.apt b/src/site/apt/index.apt index e2307c8..b0be4ce 100644 --- a/src/site/apt/index.apt +++ b/src/site/apt/index.apt @@ -1,42 +1,44 @@ - ------ - Introduction - ------ - Maria Odea Ching - ------ - 7 July 2006 - ------ - - -Maven 2 Help Plugin - - The Maven 2 Help Plugin is used to get relative information about a project. It can be used to get a description - of a particular plugin, including the plugin's mojos with their parameters and component requirements, the effective pom - and effective settings of the current build, and the profiles applied to the current project being built. - -* Goals Overview - - The Help plugin has 4 goals: - - * {{{active-profiles-mojo.html}help:active-profiles}} lists the profiles which are currently active for the build. - - * {{{describe-mojo.html}help:describe}} describes the attirbutes of a plugin and/or plugin mojo. For its execution, it requires - the groupId and artifactId or the plugin prefix of the plugin to be specified. - - * {{{effective-pom-mojo.html}help:effective-pom}} displays the effective POM for the current build, with the active - profiles factored in. - - * {{{effective-settings-mojo.html}help:effective-settings}} prints out the calculated settings for the project, given any - profile enhancement and the inheritance of the global settings into the user-level settings. - -* Usage - - Instructions on how to use the Help Plugin can be found {{{usage.html}here}}. - -* Examples - - To provide you with better understanding on some usages of the Help plugin, you can take a look into the - following example(s): - - * {{{examples/describe-configuration.html}Configuring Describe Mojo}} - - + ------ + Introduction + ------ + Maria Odea Ching + ------ + 7 July 2006 + ------ + + +Maven 2 Help Plugin + + The Maven 2 Help Plugin is used to get relative information about a project. It can be used to get a description + of a particular plugin, including the plugin's mojos with their parameters and component requirements, the effective pom + and effective settings of the current build, and the profiles applied to the current project being built. + +* Goals Overview + + The Help plugin has the following goals: + + * {{{active-profiles-mojo.html}help:active-profiles}} lists the profiles which are currently active for the build. + + * {{{dependencies-mojo.html}help:dependencies}} prints out the dependency tree for the project. + + * {{{describe-mojo.html}help:describe}} describes the attirbutes of a plugin and/or plugin mojo. For its execution, it requires + the groupId and artifactId or the plugin prefix of the plugin to be specified. + + * {{{effective-pom-mojo.html}help:effective-pom}} displays the effective POM for the current build, with the active + profiles factored in. + + * {{{effective-settings-mojo.html}help:effective-settings}} prints out the calculated settings for the project, given any + profile enhancement and the inheritance of the global settings into the user-level settings. + +* Usage + + Instructions on how to use the Help Plugin can be found {{{usage.html}here}}. + +* Examples + + To provide you with better understanding on some usages of the Help plugin, you can take a look into the + following example(s): + + * {{{examples/describe-configuration.html}Configuring Describe Mojo}} + + diff --git a/src/site/apt/usage.apt b/src/site/apt/usage.apt index 8af5102..abb4e11 100644 --- a/src/site/apt/usage.apt +++ b/src/site/apt/usage.apt @@ -1,78 +1,91 @@ - ------ - Usage - ------ - John Casey - Maria Odea Ching - ------ - 10 July 2006 - ------ - -Usage - - Below are the different goals and configuration of the Help plugin. - -* The <<<help:active-profiles>>> Mojo - - The <<<active-profiles>>> mojo is used to discover which profiles have been applied to the projects currently being built. - For each project in the build session, it will output a list of profiles which have been applied to that project, along - with the source of the profile (POM, settings.xml, or profiles.xml). - - Optionally, the output parameter can be specified to divert this output to a file. - - You can execute this mojo using the following command: - -+-----+ -mvn help:active-profiles -Doutput=/path/to/file -+-----+ - -* The <<<help:describe>>> Mojo - - The <<<describe>>> mojo is used to discover information about Maven plugins. Given a plugin prefix or groupId, artifactId, - and optionally version, the mojo will lookup that plugin and output details about it. If the user also specifies - which mojo to describe, the <<describe>> mojo will limit output to the details of that mojo, including parameters. - - Optionally, the output parameter can be specified to divert this output to a file. - - This mojo requires either the groupId and artifactId parameters or the plugin parameter to be specified: - -+-----+ -mvn help:describe -DgroupId=org.somewhere - -DartifactId=some-plugin -Dversion=0.0.0 -+-----+ - - or - -+-----+ -mvn help:active-profiles -Dplugin=org.somewhere:some-plugin:0.0.0 -+-----+ - - (NOTE: version is always optional here.) - -* The <<<help:effective-pom>>> Mojo - - The <<<effective-pom>>> mojo is used to make visible the POM that results from the application of interpolation, inheritance, - and active profiles. It provides a useful way of removing the guesswork about just what ends up in the POM that Maven uses - to build your project. It will iterate over all projects in the current build session, printing the effective POM for each. - - Optionally, the output parameter can be specified to divert this output to a file. - - The mojo can be executedd using the following command: - -+-----+ -mvn help:effective-profiles -Doutput=/path/to/file -+-----+ - -* The <<<help:effective-settings>>> Mojo - - The <<<effective-settings>>> mojo is used to view the Settings that Maven actually uses to run the build. This Settings - instance is a result of merging the global file with the user's file, with the user's file taking precedence. - - Optionally, the output parameter can be specified to divert this output to a file. - - The mojo can be executedd using the following command: - -+-----+ -mvn help:effective-settings -Doutput=/path/to/file -+-----+ - - + ------ + Usage + ------ + John Casey + Maria Odea Ching + ------ + 10 July 2006 + ------ + +Usage + + Below are the different goals and configuration of the Help plugin. + +* The <<<help:active-profiles>>> Mojo + + The <<<active-profiles>>> mojo is used to discover which profiles have been applied to the projects currently being built. + For each project in the build session, it will output a list of profiles which have been applied to that project, along + with the source of the profile (POM, settings.xml, or profiles.xml). + + Optionally, the output parameter can be specified to divert this output to a file. + + You can execute this mojo using the following command: + ++-----+ +mvn help:active-profiles -Doutput=/path/to/file ++-----+ + +* The <<<help:dependencies>>> Mojo + + The <<<dependencies>>> mojo is used to view the dependency hierarchy of the project currently being built. + It will output the resolved tree of dependencies that the Maven build process actually uses. + + Optionally, the output parameter can be specified to divert this output to a file. + + You can execute this mojo using the following command: + ++-----+ +mvn help:dependencies -Doutput=/path/to/file ++-----+ + +* The <<<help:describe>>> Mojo + + The <<<describe>>> mojo is used to discover information about Maven plugins. Given a plugin prefix or groupId, artifactId, + and optionally version, the mojo will lookup that plugin and output details about it. If the user also specifies + which mojo to describe, the <<describe>> mojo will limit output to the details of that mojo, including parameters. + + Optionally, the output parameter can be specified to divert this output to a file. + + This mojo requires either the groupId and artifactId parameters or the plugin parameter to be specified: + ++-----+ +mvn help:describe -DgroupId=org.somewhere + -DartifactId=some-plugin -Dversion=0.0.0 ++-----+ + + or + ++-----+ +mvn help:active-profiles -Dplugin=org.somewhere:some-plugin:0.0.0 ++-----+ + + (NOTE: version is always optional here.) + +* The <<<help:effective-pom>>> Mojo + + The <<<effective-pom>>> mojo is used to make visible the POM that results from the application of interpolation, inheritance, + and active profiles. It provides a useful way of removing the guesswork about just what ends up in the POM that Maven uses + to build your project. It will iterate over all projects in the current build session, printing the effective POM for each. + + Optionally, the output parameter can be specified to divert this output to a file. + + The mojo can be executedd using the following command: + ++-----+ +mvn help:effective-profiles -Doutput=/path/to/file ++-----+ + +* The <<<help:effective-settings>>> Mojo + + The <<<effective-settings>>> mojo is used to view the Settings that Maven actually uses to run the build. This Settings + instance is a result of merging the global file with the user's file, with the user's file taking precedence. + + Optionally, the output parameter can be specified to divert this output to a file. + + The mojo can be executedd using the following command: + ++-----+ +mvn help:effective-settings -Doutput=/path/to/file ++-----+ + + -- To stop receiving notification emails like this one, please contact "commits@maven.apache.org" <commits@maven.apache.org>.