Author: brett Date: Tue May 9 23:16:43 2006 New Revision: 405649 URL: http://svn.apache.org/viewcvs?rev=405649&view=rev Log: improvements to dependency report for sorting and showing classifier, make it render standalone
Added: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java (with props) Modified: maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties Modified: maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml?rev=405649&r1=405648&r2=405649&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml Tue May 9 23:16:43 2006 @@ -33,7 +33,7 @@ </contributor> </contributors> <prerequisites> - <maven>2.0.2</maven> + <maven>2.0.4</maven> </prerequisites> <build> <plugins> @@ -57,12 +57,12 @@ <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> - <version>2.0.2</version> + <version>2.0.4</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-api</artifactId> - <version>1.0-beta-2</version> + <version>1.0-beta-3</version> </dependency> <dependency> <groupId>commons-validator</groupId> @@ -72,23 +72,17 @@ <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-provider-perforce</artifactId> - <version>1.0-beta-2</version> + <version>1.0-beta-3</version> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> - <version>2.0.2</version> + <version>2.0.4</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-manager-plexus</artifactId> - <version>1.0-beta-2</version> - <exclusions> - <exclusion> - <groupId>plexus</groupId> - <artifactId>plexus-container-default</artifactId> - </exclusion> - </exclusions> + <version>1.0-beta-3</version> </dependency> <dependency> <groupId>plexus</groupId> @@ -98,32 +92,37 @@ <dependency> <groupId>org.apache.maven.reporting</groupId> <artifactId>maven-reporting-impl</artifactId> - <version>2.0.2</version> + <version>2.0.4</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-provider-clearcase</artifactId> - <version>1.0-beta-2</version> + <version>1.0-beta-3</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> <artifactId>maven-scm-provider-starteam</artifactId> - <version>1.0-beta-2</version> + <version>1.0-beta-3</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> - <artifactId>maven-scm-provider-svn</artifactId> - <version>1.0-beta-2</version> + <artifactId>maven-scm-provider-svnexe</artifactId> + <version>1.0-beta-3</version> </dependency> <dependency> <groupId>org.apache.maven.scm</groupId> - <artifactId>maven-scm-provider-cvs</artifactId> - <version>1.0-beta-2</version> + <artifactId>maven-scm-provider-cvsexe</artifactId> + <version>1.0-beta-3</version> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-settings</artifactId> - <version>2.0.2</version> + <version>2.0.4</version> + </dependency> + <dependency> + <groupId>org.apache.maven.doxia</groupId> + <artifactId>doxia-site-renderer</artifactId> + <version>1.0-alpha-8-SNAPSHOT</version> </dependency> <dependency> <groupId>httpunit</groupId> @@ -132,9 +131,9 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.maven</groupId> + <groupId>org.apache.maven.shared</groupId> <artifactId>maven-plugin-testing-harness</artifactId> - <version>1.0-SNAPSHOT</version> + <version>1.0-beta-1</version> <scope>test</scope> </dependency> </dependencies> Added: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java?rev=405649&view=auto ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java (added) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java Tue May 9 23:16:43 2006 @@ -0,0 +1,223 @@ +/* + * Copyright 2004-2005 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.report.projectinfo; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactNotFoundException; +import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.artifact.resolver.ArtifactResolver; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext; +import org.apache.maven.doxia.site.decoration.Body; +import org.apache.maven.doxia.site.decoration.DecorationModel; +import org.apache.maven.doxia.site.decoration.Skin; +import org.apache.maven.doxia.siterenderer.Renderer; +import org.apache.maven.doxia.siterenderer.RendererException; +import org.apache.maven.doxia.siterenderer.SiteRenderingContext; +import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.reporting.AbstractMavenReport; +import org.apache.maven.reporting.MavenReportException; +import org.codehaus.plexus.i18n.I18N; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * Base class with the things that should be in AbstractMavenReport anyway. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a> + */ +public abstract class AbstractProjectInfoReport + extends AbstractMavenReport +{ + /** + * Report output directory. + * + * @parameter expression="${project.reporting.outputDirectory}" + * @required + */ + protected File outputDirectory; + + /** + * Doxia Site Renderer. + * + * @component + */ + protected Renderer siteRenderer; + + /** + * The Maven Project. + * + * @parameter expression="${project}" + * @required + * @readonly + */ + protected MavenProject project; + + /** + * Local Repository. + * + * @parameter expression="${localRepository}" + * @required + * @readonly + */ + protected ArtifactRepository localRepository; + + /** + * @component + */ + protected ArtifactResolver resolver; + + /** + * @component + */ + protected ArtifactFactory factory; + + /** + * Internationalization. + * + * @component + */ + protected I18N i18n; + + private File getSkinArtifactFile() + throws MojoExecutionException + { + Skin skin = Skin.getDefaultSkin(); + + String version = skin.getVersion(); + Artifact artifact; + try + { + if ( version == null ) + { + version = Artifact.RELEASE_VERSION; + } + VersionRange versionSpec = VersionRange.createFromVersionSpec( version ); + artifact = factory.createDependencyArtifact( skin.getGroupId(), skin.getArtifactId(), versionSpec, "jar", + null, null ); + + resolver.resolve( artifact, project.getRemoteArtifactRepositories(), localRepository ); + } + catch ( InvalidVersionSpecificationException e ) + { + throw new MojoExecutionException( "The skin version '" + version + "' is not valid: " + e.getMessage() ); + } + catch ( ArtifactResolutionException e ) + { + throw new MojoExecutionException( "Unable to find skin", e ); + } + catch ( ArtifactNotFoundException e ) + { + throw new MojoExecutionException( "The skin does not exist: " + e.getMessage() ); + } + + return artifact.getFile(); + } + + public void execute() + throws MojoExecutionException + { + if ( !canGenerateReport() ) + { + return; + } + + // TODO: push to a helper? Could still be improved by taking more of the site information from the site plugin + try + { + DecorationModel model = new DecorationModel(); + model.setBody( new Body() ); + Map attributes = new HashMap(); + attributes.put( "outputEncoding", "UTF-8" ); + Locale locale = Locale.getDefault(); + SiteRenderingContext siteContext = siteRenderer.createContextForSkin( getSkinArtifactFile(), attributes, + model, getName( locale ), locale ); + + RenderingContext context = new RenderingContext( outputDirectory, getOutputName() + ".html" ); + + SiteRendererSink sink = new SiteRendererSink( context ); + generate( sink, locale ); + + outputDirectory.mkdirs(); + + Writer writer = new FileWriter( new File( outputDirectory, getOutputName() + ".html" ) ); + + siteRenderer.generateDocument( writer, sink, siteContext ); + + siteRenderer.copyResources( siteContext, new File( project.getBasedir(), "src/site/resources" ), + outputDirectory ); + } + catch ( RendererException e ) + { + throw new MojoExecutionException( + "An error has occurred in " + getName( Locale.ENGLISH ) + " report generation.", e ); + } + catch ( IOException e ) + { + throw new MojoExecutionException( + "An error has occurred in " + getName( Locale.ENGLISH ) + " report generation.", e ); + } + catch ( MavenReportException e ) + { + throw new MojoExecutionException( + "An error has occurred in " + getName( Locale.ENGLISH ) + " report generation.", e ); + } + } + + /** + * @see org.apache.maven.reporting.MavenReport#getCategoryName() + */ + public String getCategoryName() + { + return CATEGORY_PROJECT_INFORMATION; + } + + /** + * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory() + */ + protected String getOutputDirectory() + { + return outputDirectory.getAbsolutePath(); + } + + /** + * @see org.apache.maven.reporting.AbstractMavenReport#getProject() + */ + protected MavenProject getProject() + { + return project; + } + + /** + * @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer() + */ + protected Renderer getSiteRenderer() + { + return siteRenderer; + } +} Propchange: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/AbstractProjectInfoReport.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java?rev=405649&r1=405648&r2=405649&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java Tue May 9 23:16:43 2006 @@ -17,24 +17,19 @@ */ import org.apache.maven.artifact.Artifact; -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.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.doxia.sink.Sink; -import org.apache.maven.doxia.siterenderer.Renderer; import org.apache.maven.model.Dependency; import org.apache.maven.model.DependencyManagement; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; -import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.AbstractMavenReportRenderer; -import org.codehaus.plexus.i18n.I18N; import java.util.ArrayList; import java.util.Collections; @@ -55,82 +50,21 @@ * @version $Id$ * @goal dependencies * @requiresDependencyResolution test - * @plexus.component */ public class DependenciesReport - extends AbstractMavenReport + extends AbstractProjectInfoReport { /** - * Report output directory. - * - * @parameter expression="${project.reporting.outputDirectory}" - * @required - */ - private String outputDirectory; - - /** - * Doxia Site Renderer. - * - * @component - */ - private Renderer siteRenderer; - - /** - * The Maven Project. - * - * @parameter expression="${project}" - * @required - * @readonly - */ - private MavenProject project; - - /** - * Maven ArtifactFactory. - * - * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}" - * @required - * @readonly - */ - private ArtifactFactory artifactFactory; - - /** * Maven Project Builder. * - * @parameter expression="${component.org.apache.maven.project.MavenProjectBuilder}" - * @required - * @readonly + * @component */ private MavenProjectBuilder mavenProjectBuilder; /** - * Maven Artifact Resolver - * - * @parameter expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}" - * @required - * @readonly - */ - private ArtifactResolver artifactResolver; - - /** - * @parameter expression="${component.org.apache.maven.artifact.metadata.ArtifactMetadataSource}" - */ - protected ArtifactMetadataSource artifactMetadataSource; - - /** - * Local Repository. - * - * @parameter expression="${localRepository}" - * @required - * @readonly - */ - private ArtifactRepository localRepository; - - /** - * Internationalization. - * * @component */ - private I18N i18n; + protected ArtifactMetadataSource artifactMetadataSource; /** * @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale) @@ -141,14 +75,6 @@ } /** - * @see org.apache.maven.reporting.MavenReport#getCategoryName() - */ - public String getCategoryName() - { - return CATEGORY_PROJECT_INFORMATION; - } - - /** * @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale) */ public String getDescription( Locale locale ) @@ -157,60 +83,47 @@ } /** - * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory() + * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale) */ - protected String getOutputDirectory() + public void executeReport( Locale locale ) { - return outputDirectory; - } + ReportResolutionListener listener = resolveProject(); - /** - * @see org.apache.maven.reporting.AbstractMavenReport#getProject() - */ - protected MavenProject getProject() - { - return project; - } + DependenciesRenderer r = new DependenciesRenderer( getSink(), locale, listener.getDirectDependencies(), + listener.getTransitiveDependencies(), + listener.getOmittedArtifacts(), listener.getDepTree() ); - /** - * @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer() - */ - protected Renderer getSiteRenderer() - { - return siteRenderer; + r.render(); } - /** - * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale) - */ - public void executeReport( Locale locale ) + private ReportResolutionListener resolveProject() { + Map managedVersions = null; try { - ReportResolutionListener listener = resolveProject(); - - DependenciesRenderer r = new DependenciesRenderer( getSink(), locale, listener.getDirectDependencies(), - listener.getTransitiveDependencies(), - listener.getOmittedArtifacts(), listener.getDepTree() ); - - r.render(); + managedVersions = createManagedVersionMap( project.getId(), project.getDependencyManagement() ); } - catch ( Exception e ) + catch ( ProjectBuildingException e ) { getLog().error( "An error occurred while resolving project dependencies.", e ); } - } - - private ReportResolutionListener resolveProject() - throws ArtifactNotFoundException, ArtifactResolutionException, ProjectBuildingException - { - Map managedVersions = createManagedVersionMap( project.getId(), project.getDependencyManagement() ); ReportResolutionListener listener = new ReportResolutionListener(); - artifactResolver.resolveTransitively( project.getDependencyArtifacts(), project.getArtifact(), managedVersions, - localRepository, project.getRemoteArtifactRepositories(), - artifactMetadataSource, null, Collections.singletonList( listener ) ); + try + { + resolver.resolveTransitively( project.getDependencyArtifacts(), project.getArtifact(), managedVersions, + localRepository, project.getRemoteArtifactRepositories(), + artifactMetadataSource, null, Collections.singletonList( listener ) ); + } + catch ( ArtifactResolutionException e ) + { + getLog().error( "An error occurred while resolving project dependencies.", e ); + } + catch ( ArtifactNotFoundException e ) + { + getLog().error( "An error occurred while resolving project dependencies.", e ); + } return listener; } @@ -229,9 +142,9 @@ try { VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() ); - Artifact artifact = artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(), - versionRange, d.getType(), - d.getClassifier(), d.getScope() ); + Artifact artifact = factory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(), + versionRange, d.getType(), d.getClassifier(), + d.getScope() ); map.put( d.getManagementKey(), artifact ); } catch ( InvalidVersionSpecificationException e ) @@ -259,30 +172,30 @@ private class DependenciesRenderer extends AbstractMavenReportRenderer { - private Locale locale; + private final Locale locale; - private Map directDep; + private final Map directDep; - private Map transitiveDep; + private final Map transitiveDep; - private Map omittedDeps; + private final Map omittedDeps; - private Map depTree; + private final Map depTree; - public DependenciesRenderer( Sink sink, Locale locale, Map directDependencies, Map transitiveDependencies, - Map omittedDependencies, Map dependencyTree ) + DependenciesRenderer( Sink sink, Locale locale, Map directDependencies, Map transitiveDependencies, + Map omittedDependencies, Map dependencyTree ) { super( sink ); this.locale = locale; - this.directDep = directDependencies; + this.directDep = Collections.unmodifiableMap( directDependencies ); - this.transitiveDep = transitiveDependencies; + this.transitiveDep = Collections.unmodifiableMap( transitiveDependencies ); - this.omittedDeps = omittedDependencies; + this.omittedDeps = Collections.unmodifiableMap( omittedDependencies ); - this.depTree = dependencyTree; + this.depTree = Collections.unmodifiableMap( dependencyTree ); } public String getTitle() @@ -312,69 +225,42 @@ String groupId = getReportString( "report.dependencies.column.groupId" ); String artifactId = getReportString( "report.dependencies.column.artifactId" ); String version = getReportString( "report.dependencies.column.version" ); + String classifier = getReportString( "report.dependencies.column.classifier" ); String type = getReportString( "report.dependencies.column.type" ); String optional = getReportString( "report.dependencies.column.optional" ); + String[] tableHeader = new String[]{groupId, artifactId, version, classifier, type, optional}; // collect dependencies by scope - Map dependenciesByScope = new HashMap() - { - public Object put( Object key, Object value ) - { - List multiValue = (List) get( key ); - if ( multiValue == null ) - { - multiValue = new ArrayList(); - } - multiValue.add( value ); - return super.put( key, multiValue ); - } - }; - + Map dependenciesByScope = new HashMap(); for ( Iterator i = dependencies.iterator(); i.hasNext(); ) { Artifact artifact = (Artifact) i.next(); - dependenciesByScope.put( artifact.getScope(), getArtifactRow( artifact ) ); - } - - for ( Iterator iter = dependenciesByScope.keySet().iterator(); iter.hasNext(); ) - { - String scope = (String) iter.next(); - List artifactsRows = (List) dependenciesByScope.get( scope ); - - startSection( scope ); - - paragraph( getReportString( "report.dependencies.intro." + scope ) ); - startTable(); - tableHeader( new String[]{groupId, artifactId, version, type, optional} ); - - // optional at the end + sort group id - Collections.sort( artifactsRows, new Comparator() + List multiValue = (List) dependenciesByScope.get( artifact.getScope() ); + if ( multiValue == null ) { - - public int compare( Object row1, Object row2 ) - { - String[] s1 = (String[]) row1; - String[] s2 = (String[]) row2; - return s1[0].compareTo( s2[0] ) + ( s1[4] != null ? 1000000 : 0 ) - - ( s2[4] != null ? 1000000 : 0 ); - } - } ); - - for ( Iterator iterator = artifactsRows.iterator(); iterator.hasNext(); ) - { - String[] row = (String[]) iterator.next(); - tableRow( row ); + multiValue = new ArrayList(); } - endTable(); - - endSection(); + multiValue.add( artifact ); + dependenciesByScope.put( artifact.getScope(), multiValue ); } + renderDependenciesForScope( Artifact.SCOPE_COMPILE, + (List) dependenciesByScope.get( Artifact.SCOPE_COMPILE ), tableHeader ); + renderDependenciesForScope( Artifact.SCOPE_RUNTIME, + (List) dependenciesByScope.get( Artifact.SCOPE_RUNTIME ), tableHeader ); + renderDependenciesForScope( Artifact.SCOPE_TEST, (List) dependenciesByScope.get( Artifact.SCOPE_TEST ), + tableHeader ); + renderDependenciesForScope( Artifact.SCOPE_PROVIDED, + (List) dependenciesByScope.get( Artifact.SCOPE_PROVIDED ), tableHeader ); + renderDependenciesForScope( Artifact.SCOPE_SYSTEM, (List) dependenciesByScope.get( Artifact.SCOPE_SYSTEM ), + tableHeader ); + endSection(); // Transitive dependencies - Set artifacts = new HashSet( transitiveDep.values() ); + List artifacts = new ArrayList( transitiveDep.values() ); + Collections.sort( artifacts, getArtifactComparator() ); startSection( getReportString( "report.transitivedependencies.title" ) ); @@ -388,7 +274,7 @@ startTable(); - tableHeader( new String[]{groupId, artifactId, version, type, optional} ); + tableHeader( tableHeader ); for ( Iterator i = artifacts.iterator(); i.hasNext(); ) { @@ -418,20 +304,60 @@ endSection(); } - private String[] getArtifactRow( Artifact artifact ) + private void renderDependenciesForScope( String scope, List artifacts, String[] tableHeader ) { - String[] row; - if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) ) + if ( artifacts != null ) { - row = new String[]{artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), - artifact.getType(), artifact.isOptional() ? "X" : null}; + // can't use straight artifact comparison because we want optional last + Collections.sort( artifacts, getArtifactComparator() ); + + startSection( scope ); + + paragraph( getReportString( "report.dependencies.intro." + scope ) ); + startTable(); + tableHeader( tableHeader ); + + for ( Iterator iterator = artifacts.iterator(); iterator.hasNext(); ) + { + Artifact artifact = (Artifact) iterator.next(); + tableRow( getArtifactRow( artifact ) ); + } + endTable(); + + endSection(); } - else + } + + private Comparator getArtifactComparator() + { + return new Comparator() { - row = new String[]{artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), - artifact.getType(), artifact.isOptional() ? "X" : null}; - } - return row; + public int compare( Object o1, Object o2 ) + { + Artifact a1 = (Artifact) o1; + Artifact a2 = (Artifact) o2; + + // put optional last + if ( a1.isOptional() && !a2.isOptional() ) + { + return +1; + } + else if ( !a1.isOptional() && a2.isOptional() ) + { + return -1; + } + else + { + return a1.compareTo( a2 ); + } + } + }; + } + + private String[] getArtifactRow( Artifact artifact ) + { + return new String[]{artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), + artifact.getClassifier(), artifact.getType(), artifact.isOptional() ? "(optional)" : " "}; } private void printDependencyListing( Artifact artifact ) @@ -554,8 +480,8 @@ boolean allowStubModel = false; if ( !"pom".equals( artifact.getType() ) ) { - projectArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact - .getArtifactId(), artifact.getVersion(), artifact.getScope() ); + projectArtifact = factory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(), + artifact.getVersion(), artifact.getScope() ); allowStubModel = true; } Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties?rev=405649&r1=405648&r2=405649&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties Tue May 9 23:16:43 2006 @@ -26,6 +26,7 @@ report.dependencies.column.url=URL report.dependencies.column.optional=Optional report.dependencies.column.type=Type +report.dependencies.column.classifier=Classifier report.dependencies.intro.runtime=The following is a list of runtime dependencies for this project. These dependencies are required to run the application: report.dependencies.intro.compile=The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application: