You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ca...@apache.org on 2006/08/14 22:13:46 UTC
svn commit: r431427 - in
/maven/plugins/trunk/maven-project-info-reports-plugin: pom.xml
src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java
src/main/resources/project-info-report.properties
Author: carlos
Date: Mon Aug 14 13:13:45 2006
New Revision: 431427
URL: http://svn.apache.org/viewvc?rev=431427&view=rev
Log:
[MPIR-55] Detailed Artifact Information & Repository Location for each Dependency.
Submitted by: Joakim Erdfelt
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/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml?rev=431427&r1=431426&r2=431427&view=diff
==============================================================================
--- maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml Mon Aug 14 13:13:45 2006
@@ -108,6 +108,31 @@
<version>2.0.4</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-shared-jar</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>1.0-beta-2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>1.0-beta-2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>1.0-beta-2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>1.0-beta-2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-clearcase</artifactId>
<version>1.0-beta-3</version>
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java?rev=431427&r1=431426&r2=431427&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 Mon Aug 14 13:13:45 2006
@@ -16,9 +16,23 @@
* limitations under the License.
*/
+import java.io.File;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.artifact.resolver.ArtifactCollector;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
@@ -29,16 +43,29 @@
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.report.projectinfo.ReportResolutionListener.Node;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.shared.jar.Jar;
+import org.apache.maven.shared.jar.JarException;
+import org.apache.maven.shared.jar.classes.JarClasses;
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.UnsupportedProtocolException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.observers.Debug;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
/**
* Generates the Project Dependencies report.
@@ -51,6 +78,7 @@
*/
public class DependenciesReport
extends AbstractProjectInfoReport
+ implements Contextualizable
{
/**
* Maven Project Builder.
@@ -68,6 +96,32 @@
* @component
*/
private ArtifactCollector collector;
+
+ /**
+ * @component
+ */
+ private WagonManager wagonManager;
+
+ /**
+ * The current user system settings for use in Maven.
+ *
+ * @parameter expression="${settings}"
+ * @required
+ * @readonly
+ */
+ private Settings settings;
+
+ /**
+ * @parameter expression="${dependency.details.enabled}" default-value="true"
+ */
+ private boolean dependencyDetailsEnabled;
+
+ /**
+ * @parameter expression="${dependency.locations.enabled}" default-value="false"
+ */
+ private boolean dependencyLocationsEnabled;
+
+ private PlexusContainer container;
/**
* @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
@@ -166,6 +220,107 @@
return "dependencies";
}
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+ }
+
+ private class Dependencies
+ {
+ private List projectDependencies;
+
+ private ReportResolutionListener resolvedDependencies;
+
+ public Dependencies( MavenProject project, ReportResolutionListener listener )
+ {
+ /* Workaround to ensure proper File objects in the
+ * Artifacts from the ReportResolutionListener
+ */
+ Map projectMap = new HashMap();
+ Iterator it = project.getArtifacts().iterator();
+ while(it.hasNext())
+ {
+ Artifact artifact = (Artifact) it.next();
+ projectMap.put( ArtifactUtils.versionlessKey( artifact ), artifact );
+ }
+
+ mapArtifactFiles(listener.getRootNode(), projectMap);
+
+ this.projectDependencies = listener.getRootNode().getChildren();
+ this.resolvedDependencies = listener;
+ }
+
+ private void mapArtifactFiles( Node node, Map projectMap )
+ {
+ List childs = node.getChildren();
+ if( (childs == null) || childs.isEmpty() ) {
+ return;
+ }
+
+ Iterator it = childs.iterator();
+ while(it.hasNext())
+ {
+ Node anode = (ReportResolutionListener.Node) it.next();
+ String key = ArtifactUtils.versionlessKey( anode.getArtifact() );
+ Artifact projartifact = (Artifact) projectMap.get( key );
+ if( projartifact != null ) {
+ anode.getArtifact().setFile( projartifact.getFile() );
+ }
+
+ mapArtifactFiles(anode, projectMap);
+ }
+ }
+
+ public boolean hasDependencies()
+ {
+ return ( projectDependencies != null ) && ( !this.projectDependencies.isEmpty() );
+ }
+
+ public List getProjectDependencies()
+ {
+ return new ArrayList( projectDependencies );
+ }
+
+ public List getTransitiveDependencies()
+ {
+ List deps = new ArrayList( resolvedDependencies.getArtifacts() );
+ deps.removeAll( projectDependencies );
+ return deps;
+ }
+
+ public List getAllDependencies()
+ {
+ List deps = new ArrayList();
+
+ for ( Iterator it = resolvedDependencies.getArtifacts().iterator(); it.hasNext(); )
+ {
+ ReportResolutionListener.Node node = (ReportResolutionListener.Node) it.next();
+ Artifact artifact = node.getArtifact();
+ deps.add( artifact );
+ }
+ return deps;
+ }
+
+ public Map getDependenciesByScope()
+ {
+ Map dependenciesByScope = new HashMap();
+ for ( Iterator i = getAllDependencies().iterator(); i.hasNext(); )
+ {
+ Artifact artifact = (Artifact) i.next();
+
+ List multiValue = (List) dependenciesByScope.get( artifact.getScope() );
+ if ( multiValue == null )
+ {
+ multiValue = new ArrayList();
+ }
+ multiValue.add( artifact );
+ dependenciesByScope.put( artifact.getScope(), multiValue );
+ }
+ return dependenciesByScope;
+ }
+ }
+
private class DependenciesRenderer
extends AbstractMavenReportRenderer
{
@@ -190,9 +345,9 @@
public void renderBody()
{
// Dependencies report
- List dependencies = listener.getRootNode().getChildren();
+ Dependencies deps = new Dependencies( project, listener );
- if ( dependencies.isEmpty() )
+ if ( !deps.hasDependencies() )
{
startSection( getTitle() );
@@ -204,35 +359,71 @@
return;
}
- startSection( getTitle() );
+ // === Section: Project Dependencies.
+ renderSectionProjectDependencies( deps );
+
+ // === Section: Project Transitive Dependencies.
+ renderSectionProjectTransitiveDependencies( deps );
+ // === Section: Project Dependency Graph.
+ renderSectionProjectDependencyGraph();
+
+ if ( dependencyDetailsEnabled )
+ {
+ // === Section: Dependency File Details.
+ renderSectionDependencyFileDetails( deps );
+ }
+
+ if ( !settings.isOffline() && dependencyLocationsEnabled )
+ {
+ // === Section: Dependency Repository Locations.
+ renderSectionDependencyRepositoryLocations( deps );
+ }
+ }
+
+ private String[] getDependencyTableHeader()
+ {
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};
+ String[] tableHeader = new String[] { groupId, artifactId, version, classifier, type, optional };
+ return tableHeader;
+ }
+
+ private void renderSectionProjectDependencies( Dependencies dependencies )
+ {
+ String[] tableHeader = getDependencyTableHeader();
+
+ startSection( getTitle() );
// collect dependencies by scope
- Map dependenciesByScope = getDependenciesByScope( dependencies );
+ Map dependenciesByScope = dependencies.getDependenciesByScope();
+
+ renderDependenciesForAllScopes( tableHeader, dependenciesByScope );
+ endSection();
+ }
+
+ private void renderDependenciesForAllScopes( String[] tableHeader, Map dependenciesByScope )
+ {
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,
+ 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();
+ renderDependenciesForScope( Artifact.SCOPE_SYSTEM,
+ (List) dependenciesByScope.get( Artifact.SCOPE_SYSTEM ), tableHeader );
+ }
- // Transitive dependencies
- List artifacts = new ArrayList( listener.getArtifacts() );
- artifacts.removeAll( dependencies );
+ private void renderSectionProjectTransitiveDependencies( Dependencies dependencies )
+ {
+ List artifacts = dependencies.getTransitiveDependencies();
startSection( getReportString( "report.transitivedependencies.title" ) );
@@ -242,27 +433,32 @@
}
else
{
- paragraph( getReportString( "report.transitivedependencies.intro" ) );
+ String[] tableHeader = getDependencyTableHeader();
+ Map dependenciesByScope = dependencies.getDependenciesByScope();
- dependenciesByScope = getDependenciesByScope( artifacts );
+ paragraph( getReportString( "report.transitivedependencies.intro" ) );
- 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 );
+ renderDependenciesForAllScopes( tableHeader, dependenciesByScope );
}
endSection();
+ }
- //for Dependencies Graph
+ private void renderSectionProjectDependencyGraph()
+ {
startSection( getReportString( "report.dependencies.graph.title" ) );
+ // === Section: Dependency Tree
+ renderSectionDependencyTree();
+
+ // === Section: Dependency Listings
+ renderSectionDependencyListing();
+
+ endSection();
+ }
+
+ private void renderSectionDependencyTree()
+ {
//for Dependencies Graph Tree
startSection( getReportString( "report.dependencies.graph.tree.title" ) );
sink.paragraph();
@@ -271,32 +467,406 @@
sink.list_();
sink.paragraph_();
endSection();
+ }
- //for Artifact Descriptions / URLs
- startSection( getReportString( "report.dependencies.graph.tables.title" ) );
- printDescriptionsAndURLs( listener.getRootNode() );
- endSection();
+ private void renderSectionDependencyFileDetails( Dependencies dependencies )
+ {
+ startSection( getReportString( "report.dependencies.file.details.title" ) );
+
+ List alldeps = dependencies.getAllDependencies();
+ Collections.sort( alldeps, getArtifactComparator() );
+
+ startTable();
+ String filename = getReportString( "report.dependencies.file.details.column.file" );
+ String size = getReportString( "report.dependencies.file.details.column.size" );
+ String entries = getReportString( "report.dependencies.file.details.column.entries" );
+ String classes = getReportString( "report.dependencies.file.details.column.classes" );
+ String packages = getReportString( "report.dependencies.file.details.column.packages" );
+ String jdkrev = getReportString( "report.dependencies.file.details.column.jdkrev" );
+ String debug = getReportString( "report.dependencies.file.details.column.debug" );
+ String sealed = getReportString( "report.dependencies.file.details.column.sealed" );
+
+ String[] tableHeader = new String[] { filename, size, entries, classes, packages, jdkrev, debug, sealed };
+ tableHeader( tableHeader );
+
+ int totaldeps = 0;
+ long totaldepsize = 0;
+ int totalentries = 0;
+ int totalclasses = 0;
+ int totalpackages = 0;
+ double highestjdk = 0.0;
+ int totaldebug = 0;
+ int totalsealed = 0;
+
+ DecimalFormat decFormat = new DecimalFormat("#,##0");
+
+ for ( Iterator it = alldeps.iterator(); it.hasNext(); )
+ {
+ Artifact artifact = (Artifact) it.next();
+
+ if ( !Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+ {
+ if ( artifact.getFile() == null )
+ {
+ getLog().error( "Artifact: " + artifact.getId() + " has no file." );
+ continue;
+ }
+
+ File artifactFile = artifact.getFile();
+
+ totaldeps++;
+ totaldepsize += artifactFile.length();
+
+ if ( "jar".equalsIgnoreCase( artifact.getType() ) || "war".equalsIgnoreCase( artifact.getType() )
+ || "ear".equalsIgnoreCase( artifact.getType() ) || "sar".equalsIgnoreCase( artifact.getType() )
+ || "rar".equalsIgnoreCase( artifact.getType() ) || "par".equalsIgnoreCase( artifact.getType() )
+ || "ejb".equalsIgnoreCase( artifact.getType() ) )
+ {
+ try
+ {
+ Jar jar = (Jar) container.lookup( Jar.ROLE );
+ jar.setFile( artifactFile );
+ JarClasses jclasses = jar.getClasses();
+
+ String debugstr = "release";
+ if ( jclasses.isDebugPresent() )
+ {
+ debugstr = "debug";
+ totaldebug++;
+ }
+
+ String sealedstr = "";
+ if ( jar.isSealed() )
+ {
+ sealedstr = "sealed";
+ totalsealed++;
+ }
+
+ totalentries += jar.getEntries().size();
+ totalclasses += jclasses.getClassNames().size();
+ totalpackages += jclasses.getPackages().size();
+
+ try
+ {
+ highestjdk = Math.max( highestjdk, Double.parseDouble( jclasses.getJdkRevision() ) );
+ }
+ catch ( NumberFormatException e )
+ {
+ // ignore
+ }
+
+ tableRow( new String[] {
+ artifactFile.getName(),
+ decFormat.format( artifactFile.length() ),
+ decFormat.format( jar.getEntries().size() ),
+ decFormat.format( jclasses.getClassNames().size() ),
+ decFormat.format( jclasses.getPackages().size() ),
+ jclasses.getJdkRevision(),
+ debugstr,
+ sealedstr } );
+ }
+ catch ( JarException e )
+ {
+ tableRow( new String[] {
+ artifact.getId(),
+ artifactFile.getAbsolutePath(),
+ e.getMessage(),
+ "",
+ "",
+ "",
+ "",
+ "" } );
+ }
+ catch ( ComponentLookupException e )
+ {
+ tableRow( new String[] {
+ artifact.getId(),
+ artifactFile.getAbsolutePath(),
+ e.getMessage(),
+ "",
+ "",
+ "",
+ "",
+ "" } );
+ }
+ }
+ else
+ {
+ tableRow( new String[] {
+ artifactFile.getName(),
+ decFormat.format( artifactFile.length() ),
+ "",
+ "",
+ "",
+ "",
+ "",
+ "" } );
+ }
+ }
+ }
+
+ tableRow( new String[] {
+ "" + totaldeps + " total dependencies",
+ decFormat.format( totaldepsize ),
+ decFormat.format( totalentries ),
+ decFormat.format( totalclasses ),
+ decFormat.format( totalpackages ),
+ String.valueOf( highestjdk ),
+ decFormat.format( totaldebug ),
+ decFormat.format( totalsealed ) } );
+ endTable();
endSection();
}
+
+ private void populateRepositoryMap( Map repos, List rawRepos )
+ {
+ Iterator it = rawRepos.iterator();
+ while(it.hasNext())
+ {
+ ArtifactRepository repo = (ArtifactRepository) it.next();
+ repos.put( repo.getId(), repo );
+ }
+ }
+
+ private void renderSectionDependencyRepositoryLocations( Dependencies dependencies )
+ {
+ startSection( getReportString( "report.dependencies.repo.locations.title" ) );
+
+ // Collect Alphabetical Dependencies
+ List alldeps = dependencies.getAllDependencies();
+ Collections.sort( alldeps, getArtifactComparator() );
+
+ // Collect Repositories
+ Map repoMap = new HashMap();
+
+ populateRepositoryMap( repoMap, project.getRemoteArtifactRepositories() );
+
+ for ( Iterator it = alldeps.iterator(); it.hasNext(); )
+ {
+ Artifact artifact = (Artifact) it.next();
+ try
+ {
+ MavenProject artifactProject = getMavenProjectFromRepository( artifact, localRepository );
+
+ populateRepositoryMap( repoMap, artifactProject.getRemoteArtifactRepositories() );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ getLog().warn( "Unable to create maven project from repository.", e );
+ }
+ }
+
+ // Render Repository List
+
+ startTable();
+ String repoid = getReportString( "report.dependencies.repo.locations.column.repoid" );
+ String url = getReportString( "report.dependencies.repo.locations.column.url" );
+ String release = getReportString( "report.dependencies.repo.locations.column.release" );
+ String snapshot = getReportString( "report.dependencies.repo.locations.column.snapshot" );
+
+ String[] tableHeader = new String[] { repoid, url, release, snapshot };
+ tableHeader( tableHeader );
+
+ String releaseEnabled = getReportString( "report.dependencies.repo.locations.cell.release.enabled" );
+ String releaseDisabled = getReportString( "report.dependencies.repo.locations.cell.release.disabled" );
+
+ String snapshotEnabled = getReportString( "report.dependencies.repo.locations.cell.snapshot.enabled" );
+ String snapshotDisabled = getReportString( "report.dependencies.repo.locations.cell.snapshot.disabled" );
+
+ for ( Iterator it = repoMap.keySet().iterator(); it.hasNext(); )
+ {
+ String key = (String) it.next();
+ ArtifactRepository repo = (ArtifactRepository) repoMap.get( key );
+
+ sink.tableRow();
+ tableCell( repo.getId() );
- private Map getDependenciesByScope( List dependencies )
+ sink.tableCell();
+ sink.link( repo.getUrl() );
+ sink.text( repo.getUrl() );
+ sink.link_();
+ sink.tableCell_();
+
+ ArtifactRepositoryPolicy releasePolicy = repo.getReleases();
+ tableCell( releasePolicy.isEnabled() ? releaseEnabled : releaseDisabled );
+
+ ArtifactRepositoryPolicy snapshotPolicy = repo.getSnapshots();
+ tableCell( snapshotPolicy.isEnabled() ? snapshotEnabled : snapshotDisabled );
+ sink.tableRow_();
+ }
+
+ endTable();
+
+ // Render Aritfact Breakdown.
+
+ sink.paragraph();
+ sink.text( getReportString( "report.dependencies.repo.locations.artifact.breakdown" ) );
+ sink.paragraph_();
+
+ List repoIdList = new ArrayList( repoMap.keySet() );
+
+ startTable();
+ String artifact = getReportString( "report.dependencies.repo.locations.column.artifact" );
+ tableHeader = new String[repoIdList.size() + 1];
+ tableHeader[0] = artifact;
+ int idnum = 1;
+
+ for (Iterator it = repoIdList.iterator(); it.hasNext();)
+ {
+ String id = (String) it.next();
+ tableHeader[idnum++] = id;
+ }
+
+ tableHeader( tableHeader );
+
+ for ( Iterator it = alldeps.iterator(); it.hasNext(); )
+ {
+ Artifact dependency = (Artifact) it.next();
+
+ if ( !Artifact.SCOPE_SYSTEM.equals( dependency.getScope() ) )
+ {
+ sink.tableRow();
+
+ tableCell( dependency.getId() );
+
+ for(Iterator itrepo = repoIdList.iterator(); itrepo.hasNext();)
+ {
+ String repokey = (String) itrepo.next();
+ ArtifactRepository repo = (ArtifactRepository) repoMap.get( repokey );
+
+ String depUrl = repo.getUrl() + "/" + repo.pathOf( dependency );
+
+ if(dependencyExistsInRepo(repo, dependency))
+ {
+ sink.tableCell();
+ sink.link( depUrl );
+
+ sink.figure();
+ sink.figureCaption();
+ sink.text( "Found at " + repo.getUrl() );
+ sink.figureCaption_();
+ sink.figureGraphics( "images/icon_success_sml.gif" );
+ sink.figure_();
+
+ sink.link_();
+ sink.tableCell_();
+ } else {
+ sink.tableCell();
+ sink.text("-");
+ sink.tableCell_();
+ }
+ }
+
+ sink.tableRow_();
+ }
+ }
+
+ endTable();
+
+ endSection();
+ }
+
+ private boolean dependencyExistsInRepo( ArtifactRepository repo, Artifact artifact )
{
- Map dependenciesByScope = new HashMap();
- for ( Iterator i = dependencies.iterator(); i.hasNext(); )
+ Wagon wagon;
+
+ try
{
- ReportResolutionListener.Node node = (ReportResolutionListener.Node) i.next();
- Artifact artifact = node.getArtifact();
+ wagon = wagonManager.getWagon(repo.getProtocol());
+ }
+ catch ( UnsupportedProtocolException e )
+ {
+ getLog().error( "Unsupported protocol: '" + repo.getProtocol() + "'", e );
+ return false;
+ }
+
+ try
+ {
+ Debug debug = new Debug();
- List multiValue = (List) dependenciesByScope.get( artifact.getScope() );
- if ( multiValue == null )
+ wagon.addSessionListener( debug );
+ wagon.addTransferListener( debug );
+
+ String id = repo.getId();
+ Repository repository = new Repository( id, repo.getUrl() );
+ AuthenticationInfo auth = wagonManager.getAuthenticationInfo( repo.getId() );
+
+ ProxyInfo proxyInfo = getProxyInfo( settings );
+ if ( proxyInfo != null )
{
- multiValue = new ArrayList();
+ wagon.connect( repository, auth, proxyInfo );
+ }
+ else
+ {
+ wagon.connect( repository, auth );
+ }
+
+ return ( wagon.resourceExists( repo.pathOf( artifact ) ) );
+ }
+ catch ( ConnectionException e )
+ {
+ getLog().error( "Unable to connect to: " + repo.getUrl(), e );
+ return false;
+ }
+ catch ( AuthenticationException e )
+ {
+ getLog().error( "Unable to connect to: " + repo.getUrl(), e );
+ return false;
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Unable to determine if resource " + artifact + " exists in " + repo.getUrl(), e );
+ return false;
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Unable to connect to: " + repo.getUrl(), e );
+ return false;
+ }
+ finally
+ {
+ try
+ {
+ wagon.disconnect();
+ }
+ catch ( ConnectionException e )
+ {
+ getLog().error( "Error disconnecting wagon - ignored", e );
}
- multiValue.add( artifact );
- dependenciesByScope.put( artifact.getScope(), multiValue );
}
- return dependenciesByScope;
+ }
+
+ /**
+ * Convenience method to map a <code>Proxy</code> object from the user system settings to a
+ * <code>ProxyInfo</code> object.
+ *
+ * @return a proxyInfo object instancied or null if no active proxy is define in the settings.xml
+ */
+ public ProxyInfo getProxyInfo( Settings settings )
+ {
+ ProxyInfo proxyInfo = null;
+ if ( settings != null && settings.getActiveProxy() != null )
+ {
+ Proxy settingsProxy = settings.getActiveProxy();
+
+ proxyInfo = new ProxyInfo();
+ proxyInfo.setHost( settingsProxy.getHost() );
+ proxyInfo.setType( settingsProxy.getProtocol() );
+ proxyInfo.setPort( settingsProxy.getPort() );
+ proxyInfo.setNonProxyHosts( settingsProxy.getNonProxyHosts() );
+ proxyInfo.setUserName( settingsProxy.getUsername() );
+ proxyInfo.setPassword( settingsProxy.getPassword() );
+ }
+
+ return proxyInfo;
+ }
+
+ private void renderSectionDependencyListing()
+ {
+ startSection( getReportString( "report.dependencies.graph.tables.title" ) );
+ printDescriptionsAndURLs( listener.getRootNode() );
+ endSection();
}
private void renderDependenciesForScope( String scope, List artifacts, String[] tableHeader )
@@ -398,6 +968,7 @@
sink.paragraph();
sink.anchor( id );
+ // startSection( artifactName );
sink.bold();
sink.text( artifactName );
sink.bold_();
@@ -419,6 +990,9 @@
sink.link_();
sink.paragraph_();
}
+
+ // endSection();
+ sink.horizontalRule();
}
catch ( ProjectBuildingException e )
{
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/resources/project-info-report.properties?rev=431427&r1=431426&r2=431427&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 Mon Aug 14 13:13:45 2006
@@ -207,3 +207,25 @@
report.summary.organization.title=Project Organization
report.summary.organization.name=Name
report.summary.organization.url=URL
+
+report.dependencies.file.details.title=Dependency File Details
+report.dependencies.file.details.column.file=Filename
+report.dependencies.file.details.column.size=Size
+report.dependencies.file.details.column.entries=Entries
+report.dependencies.file.details.column.classes=Classes
+report.dependencies.file.details.column.packages=Packages
+report.dependencies.file.details.column.jdkrev=JDK Rev
+report.dependencies.file.details.column.debug=Debug
+report.dependencies.file.details.column.sealed=Sealed
+
+report.dependencies.repo.locations.title=Dependency Repository Locations
+report.dependencies.repo.locations.column.artifact=Artifact
+report.dependencies.repo.locations.column.repoid=Repo ID
+report.dependencies.repo.locations.column.url=URL
+report.dependencies.repo.locations.column.release=Release
+report.dependencies.repo.locations.column.snapshot=Snapshot
+report.dependencies.repo.locations.cell.release.enabled=Yes
+report.dependencies.repo.locations.cell.release.disabled=-
+report.dependencies.repo.locations.cell.snapshot.enabled=Yes
+report.dependencies.repo.locations.cell.snapshot.disabled=-
+report.dependencies.repo.locations.artifact.breakdown=Repository locations for each of the Dependencies.