You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2007/07/02 06:51:00 UTC
svn commit: r552400 [1/2] - in /maven:
plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/
plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/
pl...
Author: brett
Date: Sun Jul 1 21:50:57 2007
New Revision: 552400
URL: http://svn.apache.org/viewvc?view=rev&rev=552400
Log:
an update to the shared JAR component to prepare it for release and simplify/document its design
Added:
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarData.java (with props)
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/hash/
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/hash/JarBytecodeHashAnalyzer.java (with props)
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/hash/JarFileHashAnalyzer.java (with props)
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/hash/JarHashAnalyzer.java (with props)
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/repository/
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/repository/EmptyRepositoryHashSearch.java (contents, props changed)
- copied, changed from r551486, maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/EmptyRepositoryHashSearch.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/repository/RepositoryHashSearch.java (contents, props changed)
- copied, changed from r551486, maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/RepositoryHashSearch.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/javadoc/
maven/sandbox/trunk/shared/maven-shared-jar/src/main/javadoc/overview.html (with props)
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/AbstractJarAnalyzerTestCase.java (contents, props changed)
- copied, changed from r551486, maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/AbstractJarTestCase.java
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/identification/
- copied from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/taxon/
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/identification/JarIdentificationAnalyzerTest.java
- copied, changed from r552399, maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/taxon/JarIdentificationAnalyzerTest.java
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/identification/exposers/
- copied from r552399, maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/taxon/exposers/
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/ant.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/ant.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/codec.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/codec.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/evil-sealed-regex-1.0.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/evil-sealed-regex-1.0.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.1-debug.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.1-debug.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.1.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.1.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.2-debug.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.2-debug.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.2.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.2.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.3-debug.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.3-debug.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.3.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.3.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.4-debug.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.4-debug.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.4.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.4.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.5-debug.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.5-debug.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.5.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/helloworld-1.5.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/helloworld-1.6.jar (with props)
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/invalid-class-file.jar (with props)
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/invalid.jar
maven/sandbox/trunk/shared/maven-shared-jar/src/test/resources/jars/jxr.jar (contents, props changed)
- copied, changed from r551474, maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/jxr.jar
Removed:
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/JarDependencyDetails.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/DefaultJarAnalyzerFactory.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzerException.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzerFactory.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/AbstractJarIdentificationExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/EmptyRepositoryHashSearch.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/RepositoryHashSearch.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/util/
maven/sandbox/trunk/shared/maven-shared-jar/src/test/jars/
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/AbstractJarTestCase.java
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/taxon/
Modified:
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/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java
maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.java
maven/sandbox/trunk/shared/maven-shared-jar/pom.xml
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentification.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationAnalysis.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/EmbeddedMavenModelExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/FilenameExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/JarClassesExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/ManifestExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/RepositorySearchExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/StaticMainOutputExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/TextFileExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/TimestampExposer.java
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/JarAnalyzerTest.java
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/classes/ImportVisitorTest.java
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java
maven/sandbox/trunk/shared/maven-shared-jar/src/test/java/org/apache/maven/shared/jar/identification/exposers/EmbeddedMavenModelExposerTest.java
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?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- 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 Sun Jul 1 21:50:57 2007
@@ -31,7 +31,7 @@
import org.apache.maven.shared.dependency.tree.DependencyTree;
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
-import org.apache.maven.shared.jar.JarAnalyzerFactory;
+import org.apache.maven.shared.jar.classes.JarClassesAnalysis;
import java.util.Locale;
@@ -68,7 +68,7 @@
* @component
*/
private WagonManager wagonManager;
-
+
/**
* @component
*/
@@ -77,8 +77,8 @@
/**
* @component
*/
- private JarAnalyzerFactory jarAnalyzerFactory;
-
+ private JarClassesAnalysis classesAnalyzer;
+
/**
* The current user system settings for use in Maven.
*
@@ -95,6 +95,7 @@
/**
* Display the repository locations of the dependencies. Requires Maven 2.0.5+.
+ *
* @parameter expression="${dependency.locations.enabled}" default-value="false"
*/
private boolean dependencyLocationsEnabled;
@@ -126,7 +127,7 @@
DependencyTree dependencyTree = resolveProject();
- Dependencies dependencies = new Dependencies( project, dependencyTree, jarAnalyzerFactory );
+ Dependencies dependencies = new Dependencies( project, dependencyTree, classesAnalyzer );
DependenciesReportConfiguration config =
new DependenciesReportConfiguration( dependencyDetailsEnabled, dependencyLocationsEnabled );
@@ -143,14 +144,14 @@
{
try
{
- return dependencyTreeBuilder.buildDependencyTree( project, localRepository, factory,
- artifactMetadataSource, collector );
+ return dependencyTreeBuilder.buildDependencyTree( project, localRepository, factory, artifactMetadataSource,
+ collector );
}
catch ( DependencyTreeBuilderException e )
{
getLog().error( "Unable to build dependency tree.", e );
return null;
- }
+ }
}
/**
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java (original)
+++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/Dependencies.java Sun Jul 1 21:50:57 2007
@@ -25,11 +25,10 @@
import org.apache.maven.shared.dependency.tree.DependencyNode;
import org.apache.maven.shared.dependency.tree.DependencyTree;
import org.apache.maven.shared.jar.JarAnalyzer;
-import org.apache.maven.shared.jar.JarAnalyzerException;
-import org.apache.maven.shared.jar.JarAnalyzerFactory;
-import org.apache.maven.shared.jar.classes.JarClasses;
+import org.apache.maven.shared.jar.JarData;
+import org.apache.maven.shared.jar.classes.JarClassesAnalysis;
-import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -38,15 +37,17 @@
public class Dependencies
{
- private List projectDependencies;
- private DependencyTree dependencyTree;
- private JarAnalyzerFactory jarAnalyzerFactory;
+ private final List projectDependencies;
- public Dependencies( MavenProject project, DependencyTree dependencyTree, JarAnalyzerFactory jarAnalyzerFactory )
+ private final DependencyTree dependencyTree;
+
+ private final JarClassesAnalysis classesAnalyzer;
+
+ public Dependencies( MavenProject project, DependencyTree dependencyTree, JarClassesAnalysis classesAnalyzer )
{
this.dependencyTree = dependencyTree;
this.projectDependencies = dependencyTree.getRootNode().getChildren();
- this.jarAnalyzerFactory = jarAnalyzerFactory;
+ this.classesAnalyzer = classesAnalyzer;
/*
* Workaround to ensure proper File objects in the Artifacts from the ReportResolutionListener
@@ -60,8 +61,8 @@
}
mapArtifactFiles( dependencyTree.getRootNode(), projectMap );
- }
-
+ }
+
private void mapArtifactFiles( DependencyNode node, Map projectMap )
{
List childs = node.getChildren();
@@ -125,15 +126,20 @@
return dependenciesByScope;
}
- public JarDependencyDetails getJarDependencyDetails( Artifact artifact )
- throws JarAnalyzerException
+ public JarData getJarDependencyDetails( Artifact artifact )
+ throws IOException
{
- File artifactFile = artifact.getFile();
-
- JarAnalyzer jar = jarAnalyzerFactory.getJarAnalyzer( artifactFile );
-
- JarClasses jarClasses = jar.getClasses();
+ JarAnalyzer jarAnalyzer = new JarAnalyzer( artifact.getFile() );
+
+ try
+ {
+ classesAnalyzer.analyze( jarAnalyzer );
+ }
+ finally
+ {
+ jarAnalyzer.closeQuietly();
+ }
- return new JarDependencyDetails( jarClasses, jar.isSealed(), jar.getEntries() );
+ return jarAnalyzer.getJarData();
}
}
Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.java (original)
+++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/dependencies/renderer/DependenciesRenderer.java Sun Jul 1 21:50:57 2007
@@ -32,17 +32,17 @@
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.report.projectinfo.dependencies.Dependencies;
import org.apache.maven.report.projectinfo.dependencies.DependenciesReportConfiguration;
-import org.apache.maven.report.projectinfo.dependencies.JarDependencyDetails;
import org.apache.maven.report.projectinfo.dependencies.RepositoryUtils;
import org.apache.maven.reporting.AbstractMavenReportRenderer;
import org.apache.maven.shared.dependency.tree.DependencyNode;
import org.apache.maven.shared.dependency.tree.DependencyTree;
-import org.apache.maven.shared.jar.JarAnalyzerException;
+import org.apache.maven.shared.jar.JarData;
import org.apache.maven.wagon.Wagon;
import org.codehaus.plexus.i18n.I18N;
import org.codehaus.plexus.util.StringUtils;
import java.io.File;
+import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
@@ -174,7 +174,7 @@
// org.apache.maven.wagon.Wagon.resourceExists(Ljava/lang/String;)Z
try
{
- Wagon.class.getDeclaredMethod( "resourceExists", new Class[] { String.class } );
+ Wagon.class.getDeclaredMethod( "resourceExists", new Class[]{String.class} );
}
catch ( NoSuchMethodException e )
{
@@ -195,7 +195,7 @@
String classifier = getReportString( "report.dependencies.column.classifier" );
String type = getReportString( "report.dependencies.column.type" );
String optional = getReportString( "report.dependencies.column.optional" );
- return new String[] { groupId, artifactId, version, classifier, type, optional };
+ return new String[]{groupId, artifactId, version, classifier, type, optional};
}
private void renderSectionProjectDependencies()
@@ -291,18 +291,12 @@
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 };
+ String[] tableHeader = new String[]{filename, size, entries, classes, packages, jdkrev, debug, sealed};
tableHeader( tableHeader );
- int[] justification = new int[] {
- Parser.JUSTIFY_LEFT,
- Parser.JUSTIFY_RIGHT,
- Parser.JUSTIFY_RIGHT,
- Parser.JUSTIFY_RIGHT,
- Parser.JUSTIFY_RIGHT,
- Parser.JUSTIFY_CENTER,
- Parser.JUSTIFY_CENTER,
- Parser.JUSTIFY_CENTER };
+ int[] justification = new int[]{Parser.JUSTIFY_LEFT, Parser.JUSTIFY_RIGHT, Parser.JUSTIFY_RIGHT,
+ Parser.JUSTIFY_RIGHT, Parser.JUSTIFY_RIGHT, Parser.JUSTIFY_CENTER, Parser.JUSTIFY_CENTER,
+ Parser.JUSTIFY_CENTER};
sink.tableRows( justification, true );
int totaldeps = 0;
@@ -356,7 +350,7 @@
{
try
{
- JarDependencyDetails jarDetails = dependencies.getJarDependencyDetails( artifact );
+ JarData jarDetails = dependencies.getJarDependencyDetails( artifact );
String debugstr = "release";
if ( jarDetails.isDebugPresent() )
@@ -372,9 +366,9 @@
totalsealed++;
}
- totalentries += jarDetails.getEntries();
- totalclasses += jarDetails.getClassSize();
- totalpackages += jarDetails.getPackageSize();
+ totalentries += jarDetails.getNumEntries();
+ totalclasses += jarDetails.getNumClasses();
+ totalpackages += jarDetails.getNumPackages();
try
{
@@ -385,47 +379,30 @@
// ignore
}
- tableRow( new String[] {
- artifactFile.getName(),
- decFormat.format( artifactFile.length() ),
- decFormat.format( jarDetails.getEntries() ),
- decFormat.format( jarDetails.getClassSize() ),
- decFormat.format( jarDetails.getPackageSize() ),
- jarDetails.getJdkRevision(),
- debugstr,
- sealedstr } );
+ tableRow( new String[]{artifactFile.getName(), decFormat.format( artifactFile.length() ),
+ decFormat.format( jarDetails.getNumEntries() ),
+ decFormat.format( jarDetails.getNumClasses() ),
+ decFormat.format( jarDetails.getNumPackages() ), jarDetails.getJdkRevision(), debugstr,
+ sealedstr} );
}
- catch ( JarAnalyzerException e )
+ catch ( IOException e )
{
createExceptionInfoTableRow( artifact, artifactFile, e );
}
}
else
{
- tableRow( new String[] {
- artifactFile.getName(),
- decFormat.format( artifactFile.length() ),
- "",
- "",
- "",
- "",
- "",
- "" } );
+ tableRow( new String[]{artifactFile.getName(), decFormat.format( artifactFile.length() ), "", "",
+ "", "", "", ""} );
}
}
}
tableHeader[0] = "Total";
tableHeader( tableHeader );
- 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 ) } );
+ 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 )} );
sink.tableRows_();
@@ -435,7 +412,7 @@
private void createExceptionInfoTableRow( Artifact artifact, File artifactFile, Exception e )
{
- tableRow( new String[] { artifact.getId(), artifactFile.getAbsolutePath(), e.getMessage(), "", "", "", "", "" } );
+ tableRow( new String[]{artifact.getId(), artifactFile.getAbsolutePath(), e.getMessage(), "", "", "", "", ""} );
}
private void populateRepositoryMap( Map repos, List rawRepos )
@@ -485,7 +462,7 @@
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 };
+ String[] tableHeader = new String[]{repoid, url, release, snapshot};
tableHeader( tableHeader );
String releaseEnabled = getReportString( "report.dependencies.repo.locations.cell.release.enabled" );
@@ -560,8 +537,8 @@
boolean dependencyExists = false;
// check snapshots in snapshots repository only and releases in release repositories...
- if ( ( dependency.isSnapshot() && repo.getSnapshots().isEnabled() )
- || ( !dependency.isSnapshot() && repo.getReleases().isEnabled() ) )
+ if ( ( dependency.isSnapshot() && repo.getSnapshots().isEnabled() ) ||
+ ( !dependency.isSnapshot() && repo.getReleases().isEnabled() ) )
{
dependencyExists = repoUtils.dependencyExistsInRepo( repo, dependency );
}
@@ -664,13 +641,8 @@
private String[] getArtifactRow( Artifact artifact )
{
- return new String[] {
- artifact.getGroupId(),
- artifact.getArtifactId(),
- artifact.getVersion(),
- artifact.getClassifier(),
- artifact.getType(),
- artifact.isOptional() ? "(optional)" : " " };
+ return new String[]{artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
+ artifact.getClassifier(), artifact.getType(), artifact.isOptional() ? "(optional)" : " "};
}
private void printDependencyListing( DependencyNode node )
Modified: maven/sandbox/trunk/shared/maven-shared-jar/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/pom.xml?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/pom.xml (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/pom.xml Sun Jul 1 21:50:57 2007
@@ -48,6 +48,7 @@
<plugin>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3.3</version>
<executions>
<execution>
<goals>
@@ -77,6 +78,29 @@
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.2</version>
+ <!-- TODO: move configuration to parent POM -->
+ <configuration>
+ <!-- TODO: not needed under javadoc plugin 2.3, once released -->
+ <overview>${basedir}/src/main/javadoc/overview.html</overview>
+ <tags>
+ <tag>
+ <name>todo</name>
+ <placement>a</placement>
+ <head>TODO:</head>
+ </tag>
+ <tag>
+ <name>plexus.requirement</name>
+ <placement>f</placement>
+ <head>Plexus Requirement:</head>
+ </tag>
+ <tag>
+ <name>plexus.component</name>
+ <placement>t</placement>
+ <head>Plexus Component:</head>
+ </tag>
+ </tags>
+ </configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-report-plugin</artifactId>
Added: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java?view=auto&rev=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java (added)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarAnalyzer.java Sun Jul 1 21:50:57 2007
@@ -0,0 +1,239 @@
+package org.apache.maven.shared.jar;
+
+/*
+ * 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.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Open a JAR file to be analyzed. Note that once created, the {@link #closeQuietly()} method should be called to
+ * release the associated file handle.
+ * <p/>
+ * Typical usage:
+ * <pre>
+ * JarAnalyzer jar = new JarAnalyzer( jarFile );
+ * <p/>
+ * try
+ * {
+ * // do some analysis, such as:
+ * jarClasses = jarClassAnalyzer.analyze( jar );
+ * }
+ * finally
+ * {
+ * jar.closeQuietly();
+ * }
+ * <p/>
+ * // use jar.getJarData() in some way, or the data returned by the JAR analyzer. jar itself can no longer be used.
+ * </pre>
+ * <p/>
+ * Note: that the actual data is separated from this class by design to minimise the chance of forgetting to close the
+ * JAR file. The {@link org.apache.maven.shared.jar.JarData} class exposed, as well as any data returned by actual
+ * analyzers that use this class, can be used safely once this class is out of scope.
+ *
+ * @see org.apache.maven.shared.jar.identification.JarIdentificationAnalysis#analyze(JarAnalyzer)
+ * @see org.apache.maven.shared.jar.classes.JarClassesAnalysis#analyze(JarAnalyzer)
+ */
+public class JarAnalyzer
+{
+ /**
+ * Pattern to filter JAR entries for class files.
+ *
+ * @todo why are inner classes and other potentially valid classes omitted? (It flukes it by finding everything after $)
+ */
+ private static final Pattern CLASS_FILTER = Pattern.compile( "[A-Za-z0-9]*\\.class$" );
+
+ /**
+ * Pattern to filter JAR entries for Maven POM files.
+ */
+ private static final Pattern MAVEN_POM_FILTER = Pattern.compile( "META-INF/maven/.*/pom\\.xml$" );
+
+ /**
+ * Pattern to filter JAR entries for text files that may contain a version.
+ */
+ private static final Pattern VERSION_FILTER = Pattern.compile( "[Vv][Ee][Rr][Ss][Ii][Oo][Nn]" );
+
+ /**
+ * The associated JAR file.
+ */
+ private final JarFile jarFile;
+
+ /**
+ * Contains information about the data collected so far.
+ */
+ private final JarData jarData;
+
+ /**
+ * Constructor. Opens the JAR file, so should be matched by a call to {@link #closeQuietly()}.
+ *
+ * @param file the JAR file to open
+ * @throws java.io.IOException if there is a problem opening the JAR file, or reading the manifest. The JAR file will be closed if this occurs.
+ */
+ public JarAnalyzer( File file )
+ throws IOException
+ {
+ this.jarFile = new JarFile( file );
+
+ // Obtain entries list.
+ List entries = Collections.list( jarFile.entries() );
+
+ // Sorting of list is done by name to ensure a bytecode hash is always consistent.
+ Collections.sort( entries, new Comparator()
+ {
+ public int compare( Object o1, Object o2 )
+ {
+ JarEntry entry1 = (JarEntry) o1;
+ JarEntry entry2 = (JarEntry) o2;
+
+ return entry1.getName().compareTo( entry2.getName() );
+ }
+ } );
+
+ Manifest manifest;
+ try
+ {
+ manifest = jarFile.getManifest();
+ }
+ catch ( IOException e )
+ {
+ closeQuietly();
+ throw e;
+ }
+ this.jarData = new JarData( file, manifest, entries );
+ }
+
+ /**
+ * Get the data for an individual entry in the JAR. The caller should closeQuietly the input stream, and should not retain
+ * the stream as the JAR file may be closed elsewhere.
+ *
+ * @param entry the JAR entry to read from
+ * @return the input stream of the individual JAR entry.
+ * @throws java.io.IOException if there is a problem opening the individual entry
+ */
+ public InputStream getEntryInputStream( JarEntry entry )
+ throws IOException
+ {
+ return jarFile.getInputStream( entry );
+ }
+
+ /**
+ * Close the associated JAR file, ignoring any errors that may occur.
+ */
+ public void closeQuietly()
+ {
+ try
+ {
+ jarFile.close();
+ }
+ catch ( IOException e )
+ {
+ // not much we can do about it but ignore it
+ }
+ }
+
+ /**
+ * Filter a list of JAR entries against the pattern.
+ *
+ * @param pattern the pattern to filter against
+ * @return the list of files found, in {@link java.util.jar.JarEntry} elements
+ */
+ public List filterEntries( Pattern pattern )
+ {
+ List ret = new ArrayList();
+
+ Iterator it = getEntries().iterator();
+ while ( it.hasNext() )
+ {
+ JarEntry entry = (JarEntry) it.next();
+
+ Matcher mat = pattern.matcher( entry.getName() );
+ if ( mat.find() )
+ {
+ ret.add( entry );
+ }
+ }
+ return ret;
+ }
+
+ /**
+ * Get all the classes in the JAR.
+ *
+ * @return the list of files found, in {@link java.util.jar.JarEntry} elements
+ */
+ public List getClassEntries()
+ {
+ return filterEntries( CLASS_FILTER );
+ }
+
+ /**
+ * Get all the Maven POM entries in the JAR.
+ *
+ * @return the list of files found, in {@link java.util.jar.JarEntry} elements
+ */
+ public List getMavenPomEntries()
+ {
+ return filterEntries( MAVEN_POM_FILTER );
+ }
+
+ /**
+ * Get all the version text files in the JAR.
+ *
+ * @return the list of files found, in {@link java.util.jar.JarEntry} elements
+ */
+ public List getVersionEntries()
+ {
+ return filterEntries( VERSION_FILTER );
+ }
+
+ /**
+ * Get all the contained files in the JAR.
+ *
+ * @return the list of files found, in {@link java.util.jar.JarEntry} elements
+ */
+ public List getEntries()
+ {
+ return jarData.getEntries();
+ }
+
+ /**
+ * Get the file that was opened by this analyzer.
+ *
+ * @return the JAR file reference
+ */
+ public File getFile()
+ {
+ return jarData.getFile();
+ }
+
+ public JarData getJarData()
+ {
+ return jarData;
+ }
+}
Added: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarData.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarData.java?view=auto&rev=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarData.java (added)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarData.java Sun Jul 1 21:50:57 2007
@@ -0,0 +1,188 @@
+package org.apache.maven.shared.jar;
+
+/*
+ * 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 org.apache.maven.shared.jar.classes.JarClasses;
+import org.apache.maven.shared.jar.identification.JarIdentification;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+/**
+ * Class that contains details of a single JAR file and it's entries.
+ */
+public final class JarData
+{
+ /**
+ * The JAR file.
+ */
+ private final File file;
+
+ /**
+ * Whether the JAR file is sealed.
+ */
+ private final boolean sealed;
+
+ /**
+ * The hashcode for the entire file's contents.
+ */
+ private String fileHash;
+
+ /**
+ * The hashcode for the file's class data contents.
+ */
+ private String bytecodeHash;
+
+ /**
+ * The JAR's manifest.
+ */
+ private final Manifest manifest;
+
+ /**
+ * Information about the JAR's classes.
+ */
+ private JarClasses jarClasses;
+
+ /**
+ * The JAR entries.
+ */
+ private final List entries;
+
+ /**
+ * Information about the JAR's identifying features.
+ */
+ private JarIdentification jarIdentification;
+
+ /**
+ * Constructor.
+ *
+ * @param file the JAR file
+ * @param manifest the JAR manifest
+ * @param entries the JAR entries
+ */
+ public JarData( File file, Manifest manifest, List entries )
+ {
+ this.file = file;
+
+ this.manifest = manifest;
+
+ this.entries = Collections.unmodifiableList( entries );
+
+ boolean sealed = false;
+ if ( this.manifest != null )
+ {
+ String sval = this.manifest.getMainAttributes().getValue( Attributes.Name.SEALED );
+ if ( StringUtils.isNotEmpty( sval ) )
+ {
+ sealed = "true".equalsIgnoreCase( sval.trim() );
+ }
+ }
+ this.sealed = sealed;
+ }
+
+ public List getEntries()
+ {
+ return entries;
+ }
+
+ public Manifest getManifest()
+ {
+ return manifest;
+ }
+
+ public File getFile()
+ {
+ return file;
+ }
+
+ public boolean isSealed()
+ {
+ return sealed;
+ }
+
+ public void setFileHash( String fileHash )
+ {
+ this.fileHash = fileHash;
+ }
+
+ public String getFileHash()
+ {
+ return fileHash;
+ }
+
+ public void setBytecodeHash( String bytecodeHash )
+ {
+ this.bytecodeHash = bytecodeHash;
+ }
+
+ public String getBytecodeHash()
+ {
+ return bytecodeHash;
+ }
+
+ public boolean isDebugPresent()
+ {
+ return jarClasses.isDebugPresent();
+ }
+
+ public void setJarClasses( JarClasses jarClasses )
+ {
+ this.jarClasses = jarClasses;
+ }
+
+ public int getNumEntries()
+ {
+ return entries.size();
+ }
+
+ public int getNumClasses()
+ {
+ return jarClasses.getClassNames().size();
+ }
+
+ public int getNumPackages()
+ {
+ return jarClasses.getPackages().size();
+ }
+
+ public String getJdkRevision()
+ {
+ return jarClasses.getJdkRevision();
+ }
+
+ public void setJarIdentification( JarIdentification jarIdentification )
+ {
+ this.jarIdentification = jarIdentification;
+ }
+
+ public JarIdentification getJarIdentification()
+ {
+ return jarIdentification;
+ }
+
+ public JarClasses getJarClasses()
+ {
+ return jarClasses;
+ }
+}
Propchange: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/JarData.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/ImportVisitor.java Sun Jul 1 21:50:57 2007
@@ -31,30 +31,43 @@
import java.util.regex.Pattern;
/**
- * ImportVisitor
+ * Implementation of a BCEL class visitor that analyzes a class and collects imports.
*/
public class ImportVisitor
extends EmptyVisitor
{
+ /**
+ * The list of imports discovered.
+ */
private List imports;
+ /**
+ * The Java class that is being analyzed.
+ */
private JavaClass javaClass;
- private Pattern qualifiedPat;
+ /**
+ * Pattern to detect if the import is qualified and allows retrieval of the actual import name from the string via the group 1.
+ */
+ private static final Pattern QUALIFIED_IMPORT_PATTERN = Pattern.compile( "L([a-zA-Z][a-zA-Z0-9\\.]+);" );
- private Pattern validUtfPat;
+ /**
+ * Pattern that checks whether a string is valid UTF-8. Imports that are not are ignored.
+ */
+ private static final Pattern VALID_UTF8_PATTERN = Pattern.compile( "^[\\(\\)\\[A-Za-z0-9;/]+$" );
/**
* Create an Import visitor.
*
- * @param javaClass the javaclass to work off of.
+ * @param javaClass the javaclass to work from
*/
public ImportVisitor( JavaClass javaClass )
{
this.javaClass = javaClass;
+
+ // Create a list that is guaranteed to be unique while retaining it's list qualities (LinkedHashSet does not
+ // expose the list interface even if natural ordering is retained)
this.imports = SetUniqueList.decorate( new ArrayList() );
- this.qualifiedPat = Pattern.compile( "L([a-zA-Z][a-zA-Z0-9\\.]+);" );
- this.validUtfPat = Pattern.compile( "^[\\(\\)\\[A-Za-z0-9;/]+$" );
}
/**
@@ -89,7 +102,7 @@
name = name.substring( 0, name.length() - 6 );
}
- Matcher mat = qualifiedPat.matcher( name );
+ Matcher mat = QUALIFIED_IMPORT_PATTERN.matcher( name );
if ( mat.find() )
{
this.imports.add( mat.group( 1 ) );
@@ -116,7 +129,7 @@
}
// Only valid characters please.
- if ( !validUtfPat.matcher( ret ).matches() )
+ if ( !VALID_UTF8_PATTERN.matcher( ret ).matches() )
{
return;
}
@@ -144,7 +157,7 @@
return;
}
- Matcher mat = qualifiedPat.matcher( ret );
+ Matcher mat = QUALIFIED_IMPORT_PATTERN.matcher( ret );
char prefix = ret.charAt( 0 );
if ( prefix == '(' )
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClasses.java Sun Jul 1 21:50:57 2007
@@ -22,80 +22,114 @@
import org.apache.commons.collections.list.SetUniqueList;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/**
- * Facts about the classes within a JarAnalyzer File.
+ * Gathered facts about the classes within a JAR file.
+ *
+ * @see org.apache.maven.shared.jar.classes.JarClassesAnalysis#analyze(org.apache.maven.shared.jar.JarAnalyzer)
*/
public class JarClasses
{
+ /**
+ * The list of imports in the classes in the JAR.
+ */
private List imports;
+ /**
+ * A list of packages represented by classes in the JAR.
+ */
private List packages;
+ /**
+ * A list of the classes that in the JAR.
+ */
private List classNames;
+ /**
+ * A list of methods within the classes in the JAR.
+ */
private List methods;
+ /**
+ * Whether the JAR contains any code with debug information. If there is a mix of debug and release code, this will
+ * still be true.
+ */
private boolean isDebugPresent;
+ /**
+ * The highest JVM revision available in any class files. While the JAR may work on earlier JVMs if particular
+ * classes are not used, this is the minimum JVM that guarantees compatibility.
+ */
private String jdkRevision;
/**
- * Create Empty JarFacts.
+ * Constructor to create an empty instance.
*/
public JarClasses()
{
+ // Unique list decorators are used to ensure natural ordering is retained, the list interface is availble, and
+ // that duplicates are not entered.
imports = SetUniqueList.decorate( new ArrayList() );
packages = SetUniqueList.decorate( new ArrayList() );
classNames = SetUniqueList.decorate( new ArrayList() );
methods = SetUniqueList.decorate( new ArrayList() );
}
+ /**
+ * Add a discovered class to the record.
+ *
+ * @param name the name of the class
+ */
public void addClassName( String name )
{
this.classNames.add( name );
}
/**
- * Add an Import.
+ * Add a discovered package to the record.
*
- * @param iname the import name
+ * @param name the name of the package
*/
- public void addImport( String iname )
+ public void addPackage( String name )
{
- this.imports.add( iname );
+ this.packages.add( name );
}
/**
- * Add a Package name.
+ * Add a discovered method to the record.
*
- * @param pname the package name
+ * @param name the name of the method
*/
- public void addPackage( String pname )
+ public void addMethod( String name )
{
- this.packages.add( pname );
+ this.methods.add( name );
}
- public List getClassNames()
+ /**
+ * Add a list of discovered imports to the record.
+ *
+ * @param imports the imports to add. Each item should be a String to avoid down the line ClassCastExceptions.
+ */
+ public void addImports( List imports )
{
- return classNames;
+ this.imports.addAll( imports );
}
- /**
- * @return Returns the imports.
- */
public List getImports()
{
- return imports;
+ return Collections.unmodifiableList( imports );
+ }
+
+ public List getClassNames()
+ {
+ return Collections.unmodifiableList( classNames );
}
- /**
- * @return Returns the packages.
- */
public List getPackages()
{
- return packages;
+ return Collections.unmodifiableList( packages );
}
public boolean isDebugPresent()
@@ -118,13 +152,8 @@
this.jdkRevision = jdkRevision;
}
- public void addMethod( String method )
- {
- this.methods.add( method );
- }
-
public List getMethods()
{
- return methods;
+ return Collections.unmodifiableList( methods );
}
}
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java Sun Jul 1 21:50:57 2007
@@ -34,9 +34,13 @@
import java.util.jar.JarEntry;
/**
- * JarAnalyzer Classes Analyzer
+ * Analyze the classes in a JAR file. This class is thread safe and immutable as it retains no state.
+ * <p/>
+ * Note that you must first create an instance of {@link org.apache.maven.shared.jar.JarAnalyzer} - see its Javadoc for
+ * a typical use.
*
- * @plexus.component role="org.apache.maven.shared.jar.classes.JarClassesAnalysis"
+ * @plexus.component role="org.apache.maven.shared.jar.classes.JarClassesAnalysis" role-hint="default"
+ * @see #analyze(org.apache.maven.shared.jar.JarAnalyzer)
*/
public class JarClassesAnalysis
extends AbstractLogEnabled
@@ -54,112 +58,121 @@
private static final double JAVA_1_1_CLASS_VERSION = 45.3;
/**
- * Analyze and populate the <code>jar.information.classes</code> object.
+ * Analyze a JAR and find any classes and their details. Note that if the provided JAR analyzer has previously
+ * analyzed the JAR, the cached results will be returned. You must obtain a new JAR analyzer to the re-read the
+ * contents of the file.
*
- * @param jar the jar analyzer to use
+ * @param jarAnalyzer the JAR to analyze. This must not yet have been closed.
+ * @return the details of the classes found
*/
- public void analyze( JarAnalyzer jar )
+ public JarClasses analyze( JarAnalyzer jarAnalyzer )
{
- String jarfilename = jar.getFile().getAbsolutePath();
- JarClasses classes = new JarClasses();
-
- List classList = jar.getNameRegexEntryList( "[A-Za-z0-9]*\\.class$" );
+ JarClasses classes = jarAnalyzer.getJarData().getJarClasses();
+ if ( classes == null )
+ {
+ String jarfilename = jarAnalyzer.getFile().getAbsolutePath();
+ classes = new JarClasses();
- classes.setDebugPresent( false );
+ List classList = jarAnalyzer.getClassEntries();
- double maxVersion = 0.0;
+ classes.setDebugPresent( false );
- Iterator it = classList.iterator();
- while ( it.hasNext() )
- {
- JarEntry entry = (JarEntry) it.next();
- String classname = entry.getName();
+ double maxVersion = 0.0;
- try
+ Iterator it = classList.iterator();
+ while ( it.hasNext() )
{
- ClassParser classParser = new ClassParser( jarfilename, classname );
+ JarEntry entry = (JarEntry) it.next();
+ String classname = entry.getName();
- JavaClass javaClass = classParser.parse();
+ try
+ {
+ ClassParser classParser = new ClassParser( jarfilename, classname );
- String classSignature = javaClass.getClassName();
+ JavaClass javaClass = classParser.parse();
- if ( !classes.isDebugPresent() )
- {
- if ( hasDebugSymbols( javaClass ) )
+ String classSignature = javaClass.getClassName();
+
+ if ( !classes.isDebugPresent() )
{
- classes.setDebugPresent( true );
+ if ( hasDebugSymbols( javaClass ) )
+ {
+ classes.setDebugPresent( true );
+ }
}
- }
- double classVersion = javaClass.getMajor();
- if ( javaClass.getMinor() > 0 )
- {
- classVersion = classVersion + 1 / (double) javaClass.getMinor();
- }
+ double classVersion = javaClass.getMajor();
+ if ( javaClass.getMinor() > 0 )
+ {
+ classVersion = classVersion + 1 / (double) javaClass.getMinor();
+ }
- if ( classVersion > maxVersion )
- {
- maxVersion = classVersion;
- }
+ if ( classVersion > maxVersion )
+ {
+ maxVersion = classVersion;
+ }
- Method[] methods = javaClass.getMethods();
- for ( int i = 0; i < methods.length; i++ )
- {
- classes.addMethod( classSignature + "." + methods[i].getName() + methods[i].getSignature() );
- }
+ Method[] methods = javaClass.getMethods();
+ for ( int i = 0; i < methods.length; i++ )
+ {
+ classes.addMethod( classSignature + "." + methods[i].getName() + methods[i].getSignature() );
+ }
+
+ String classPackageName = javaClass.getPackageName();
- String classPackageName = javaClass.getPackageName();
+ classes.addClassName( classSignature );
+ classes.addPackage( classPackageName );
- classes.addClassName( classSignature );
- classes.addPackage( classPackageName );
+ ImportVisitor importVisitor = new ImportVisitor( javaClass );
+ DescendingVisitor descVisitor = new DescendingVisitor( javaClass, importVisitor );
+ javaClass.accept( descVisitor );
- ImportVisitor importVisitor = new ImportVisitor( javaClass );
- DescendingVisitor descVisitor = new DescendingVisitor( javaClass, importVisitor );
- javaClass.accept( descVisitor );
+ classes.addImports( importVisitor.getImports() );
+ }
+ catch ( ClassFormatException e )
+ {
+ getLogger().warn( "Unable to process class " + classname + " in JarAnalyzer File " + jarfilename,
+ e );
+ }
+ catch ( IOException e )
+ {
+ getLogger().warn( "Unable to process JarAnalyzer File " + jarfilename, e );
+ }
+ }
- addImports( classes, importVisitor.getImports() );
+ // TODO: check these since they are > instead of >=
+ if ( maxVersion >= JAVA_1_6_CLASS_VERSION )
+ {
+ classes.setJdkRevision( "1.6" );
}
- catch ( ClassFormatException e )
+ else if ( maxVersion >= JAVA_1_5_CLASS_VERSION )
{
- getLogger().warn( "Unable to process class " + classname + " in JarAnalyzer File " + jar.getFile(), e );
+ classes.setJdkRevision( "1.5" );
}
- catch ( IOException e )
+ else if ( maxVersion > JAVA_1_4_CLASS_VERSION )
{
- getLogger().warn( "Unable to process JarAnalyzer File " + jar.getFile(), e );
+ classes.setJdkRevision( "1.4" );
+ }
+ else if ( maxVersion > JAVA_1_3_CLASS_VERSION )
+ {
+ classes.setJdkRevision( "1.3" );
+ }
+ else if ( maxVersion > JAVA_1_2_CLASS_VERSION )
+ {
+ classes.setJdkRevision( "1.2" );
+ }
+ else if ( maxVersion > JAVA_1_1_CLASS_VERSION )
+ {
+ classes.setJdkRevision( "1.1" );
+ }
+ else if ( maxVersion > 0 )
+ {
+ classes.setJdkRevision( "1.0" );
}
- }
- // TODO: check these since they are > instead of >=
- if ( maxVersion >= JAVA_1_6_CLASS_VERSION )
- {
- classes.setJdkRevision( "1.6" );
- }
- else if ( maxVersion >= JAVA_1_5_CLASS_VERSION )
- {
- classes.setJdkRevision( "1.5" );
- }
- else if ( maxVersion > JAVA_1_4_CLASS_VERSION )
- {
- classes.setJdkRevision( "1.4" );
- }
- else if ( maxVersion > JAVA_1_3_CLASS_VERSION )
- {
- classes.setJdkRevision( "1.3" );
- }
- else if ( maxVersion > JAVA_1_2_CLASS_VERSION )
- {
- classes.setJdkRevision( "1.2" );
- }
- else if ( maxVersion > JAVA_1_1_CLASS_VERSION )
- {
- classes.setJdkRevision( "1.1" );
- }
- else
- {
- classes.setJdkRevision( "1.0" );
+ jarAnalyzer.getJarData().setJarClasses( classes );
}
-
- jar.setClasses( classes );
+ return classes;
}
private boolean hasDebugSymbols( JavaClass javaClass )
@@ -175,16 +188,6 @@
break;
}
}
-
return ret;
- }
-
- private void addImports( JarClasses facts, List imports )
- {
- Iterator it = imports.iterator();
- while ( it.hasNext() )
- {
- facts.addImport( (String) it.next() );
- }
}
}
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentification.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentification.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentification.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentification.java Sun Jul 1 21:50:57 2007
@@ -20,31 +20,199 @@
*/
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
/**
- * JarAnalyzer Taxon, the set of Maven dependency information both found and potential.
+ * Gathered Maven information about the JAR file. Stores both assumed/validated values and potential values.
+ *
+ * @see org.apache.maven.shared.jar.identification.JarIdentificationAnalysis#analyze(org.apache.maven.shared.jar.JarAnalyzer)
*/
public class JarIdentification
{
- private boolean wellKnown;
-
+ /**
+ * The group ID derived or guessed from the list of potentials of the JAR.
+ */
private String groupId;
+ /**
+ * The artifact ID derived or guessed from the list of potentials of the JAR.
+ */
private String artifactId;
+ /**
+ * The version derived or guessed from the list of potentials of the JAR.
+ */
private String version;
+ /**
+ * The project name derived or guessed from the list of potentials of the JAR.
+ */
private String name;
+ /**
+ * The vendor (organization name) derived or guessed from the list of potentials of the JAR.
+ */
private String vendor;
- private List potentials;
+ /**
+ * The list of possible group IDs discovered.
+ */
+ private List potentialGroupIds = new ArrayList();
+
+ /**
+ * The list of possible artifact IDs discovered.
+ */
+ private List potentialArtifactIds = new ArrayList();
+
+ /**
+ * The list of possible versions discovered.
+ */
+ private List potentialVersions = new ArrayList();
+
+ /**
+ * The list of possible artifact names discovered.
+ */
+ private List potentialNames = new ArrayList();
+
+ /**
+ * The list of possible vendors discovered.
+ */
+ private List potentialVendors = new ArrayList();
+
+ /**
+ * Add a validated group ID.
+ *
+ * @param groupId the group ID discovered
+ */
+ public void addAndSetGroupId( String groupId )
+ {
+ if ( groupId != null )
+ {
+ this.groupId = groupId;
+ }
+
+ addGroupId( groupId );
+ }
+
+ /**
+ * Add a potential group ID.
+ *
+ * @param groupId the group ID discovered
+ */
+ public void addGroupId( String groupId )
+ {
+ addUnique( potentialGroupIds, groupId );
+ }
+
+ /**
+ * Add a validated artifact ID.
+ *
+ * @param artifactId the artifact ID discovered
+ */
+ public void addAndSetArtifactId( String artifactId )
+ {
+ if ( artifactId != null )
+ {
+ this.artifactId = artifactId;
+ }
+
+ addArtifactId( artifactId );
+ }
+
+ /**
+ * Add a potential artifact ID.
+ *
+ * @param artifactId the artifact ID discovered
+ */
+ public void addArtifactId( String artifactId )
+ {
+ addUnique( potentialArtifactIds, artifactId );
+ }
+
+ /**
+ * Add a validated version.
+ *
+ * @param version the version discovered
+ */
+ public void addAndSetVersion( String version )
+ {
+ if ( version != null )
+ {
+ this.version = version;
+ }
+
+ addVersion( version );
+ }
+
+ /**
+ * Add a potential version.
+ *
+ * @param version the version discovered
+ */
+ public void addVersion( String version )
+ {
+ addUnique( potentialVersions, version );
+ }
+
+ /**
+ * Add a validated vendor name.
+ *
+ * @param name the vendor name discovered
+ */
+ public void addAndSetVendor( String name )
+ {
+ if ( name != null )
+ {
+ vendor = name;
+ }
+
+ addVendor( name );
+ }
+
+ /**
+ * Add a potential vendor name.
+ *
+ * @param name the vendor name discovered
+ */
+ public void addVendor( String name )
+ {
+ addUnique( potentialVendors, name );
+ }
+
+ /**
+ * Add a validated artifact name.
+ *
+ * @param name the artifact name discovered
+ */
+ public void addAndSetName( String name )
+ {
+ if ( name != null )
+ {
+ this.name = name;
+ }
+
+ addName( name );
+ }
+
+ /**
+ * Add a potential artifact name.
+ *
+ * @param name the artifact name discovered
+ */
+ public void addName( String name )
+ {
+ addUnique( potentialNames, name );
+ }
- public JarIdentification()
+ private static void addUnique( List list, String value )
{
- potentials = new ArrayList();
+ if ( value != null )
+ {
+ if ( !list.contains( value ) )
+ {
+ list.add( value );
+ }
+ }
}
public String getArtifactId()
@@ -77,11 +245,6 @@
this.name = name;
}
- public List getPotentials()
- {
- return potentials;
- }
-
public String getVendor()
{
return vendor;
@@ -102,88 +265,28 @@
this.version = version;
}
- public boolean isWellKnown()
+ public List getPotentialVersions()
{
- return wellKnown;
+ return potentialVersions;
}
- public void setWellKnown( boolean wellKnown )
+ public List getPotentialNames()
{
- this.wellKnown = wellKnown;
+ return potentialNames;
}
- public List getGroupIds()
+ public List getPotentialGroupIds()
{
- List ret = new ArrayList();
- Iterator it = potentials.iterator();
- while ( it.hasNext() )
- {
- AbstractJarIdentificationExposer exposer = (AbstractJarIdentificationExposer) it.next();
- if ( exposer.getGroupIds() != null )
- {
- ret.addAll( exposer.getGroupIds() );
- }
- }
- return ret;
+ return potentialGroupIds;
}
- public List getArtifactIds()
+ public List getPotentialArtifactIds()
{
- List ret = new ArrayList();
- Iterator it = potentials.iterator();
- while ( it.hasNext() )
- {
- AbstractJarIdentificationExposer exposer = (AbstractJarIdentificationExposer) it.next();
- if ( exposer.getArtifactIds() != null )
- {
- ret.addAll( exposer.getArtifactIds() );
- }
- }
- return ret;
- }
-
- public List getVersions()
- {
- List ret = new ArrayList();
- Iterator it = potentials.iterator();
- while ( it.hasNext() )
- {
- AbstractJarIdentificationExposer exposer = (AbstractJarIdentificationExposer) it.next();
- if ( exposer.getVersions() != null )
- {
- ret.addAll( exposer.getVersions() );
- }
- }
- return ret;
+ return potentialArtifactIds;
}
- public List getNames()
+ public List getPotentialVendors()
{
- List ret = new ArrayList();
- Iterator it = potentials.iterator();
- while ( it.hasNext() )
- {
- AbstractJarIdentificationExposer exposer = (AbstractJarIdentificationExposer) it.next();
- if ( exposer.getNames() != null )
- {
- ret.addAll( exposer.getNames() );
- }
- }
- return ret;
- }
-
- public List getVendors()
- {
- List ret = new ArrayList();
- Iterator it = potentials.iterator();
- while ( it.hasNext() )
- {
- AbstractJarIdentificationExposer exposer = (AbstractJarIdentificationExposer) it.next();
- if ( exposer.getVendors() != null )
- {
- ret.addAll( exposer.getVendors() );
- }
- }
- return ret;
+ return potentialVendors;
}
}
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationAnalysis.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationAnalysis.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationAnalysis.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationAnalysis.java Sun Jul 1 21:50:57 2007
@@ -22,122 +22,111 @@
import org.apache.maven.shared.jar.JarAnalyzer;
import org.codehaus.plexus.util.StringUtils;
-import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
- * JarAnalyzer Taxon Analyzer
+ * Analyze the JAR file to identify Maven artifact metadata. This class is thread safe and immutable as long as all
+ * provided exposers are, as it retains no state.
+ * <p/>
+ * If using Plexus, the class will use all available exposers in the container.
+ * <p/>
+ * If not using Plexus, the exposers must be set using {@link #setExposers(java.util.List)} before calling
+ * {@link #analyze(org.apache.maven.shared.jar.JarAnalyzer)}
+ * <p/>
+ * Note that you must first create an instance of {@link org.apache.maven.shared.jar.JarAnalyzer} - see its Javadoc for
+ * a typical use.
*
- * @plexus.component role="org.apache.maven.shared.jar.identification.JarIdentificationAnalysis"
+ * @plexus.component role="org.apache.maven.shared.jar.identification.JarIdentificationAnalysis" role-hint="default"
*/
public class JarIdentificationAnalysis
{
/**
+ * The Maven information exposers to use during identification.
+ *
* @plexus.requirement role="org.apache.maven.shared.jar.identification.JarIdentificationExposer"
- * @noinspection UnusedDeclaration,MismatchedQueryAndUpdateOfCollection
*/
private List exposers;
- public void analyze( JarAnalyzer jar )
+ /**
+ * Analyze a JAR and find any associated Maven metadata. Note that if the provided JAR analyzer has previously
+ * analyzed the JAR, the cached results will be returned. You must obtain a new JAR analyzer to the re-read the
+ * contents of the file.
+ *
+ * @param jarAnalyzer the JAR to analyze. This must not yet have been closed.
+ * @return the Maven metadata discovered
+ */
+ public JarIdentification analyze( JarAnalyzer jarAnalyzer )
{
- JarIdentification taxon = new JarIdentification();
+ JarIdentification taxon = jarAnalyzer.getJarData().getJarIdentification();
+ if ( taxon != null )
+ {
+ return taxon;
+ }
+
+ taxon = new JarIdentification();
for ( Iterator i = exposers.iterator(); i.hasNext(); )
{
JarIdentificationExposer exposer = (JarIdentificationExposer) i.next();
- exposer.initialize();
- exposer.setJar( jar );
- addExposer( taxon, exposer );
+ exposer.expose( taxon, jarAnalyzer );
}
normalize( taxon );
- jar.setIdentification( taxon );
- }
-
- private void addExposer( JarIdentification taxon, JarIdentificationExposer exposer )
- {
- taxon.getPotentials().add( exposer );
- exposer.expose();
+ jarAnalyzer.getJarData().setJarIdentification( taxon );
- if ( exposer.isAuthoritative() )
- {
- if ( StringUtils.isEmpty( taxon.getGroupId() ) && isNotEmpty( exposer.getGroupIds() ) )
- {
- taxon.setGroupId( (String) exposer.getGroupIds().get( 0 ) );
- }
-
- if ( StringUtils.isEmpty( taxon.getArtifactId() ) && isNotEmpty( exposer.getArtifactIds() ) )
- {
- taxon.setArtifactId( (String) exposer.getArtifactIds().get( 0 ) );
- }
-
- if ( StringUtils.isEmpty( taxon.getVersion() ) && isNotEmpty( exposer.getVersions() ) )
- {
- taxon.setVersion( (String) exposer.getVersions().get( 0 ) );
- }
-
- if ( StringUtils.isEmpty( taxon.getName() ) && isNotEmpty( exposer.getNames() ) )
- {
- taxon.setName( (String) exposer.getNames().get( 0 ) );
- }
-
- if ( StringUtils.isEmpty( taxon.getVendor() ) && isNotEmpty( exposer.getVendors() ) )
- {
- taxon.setVendor( (String) exposer.getVendors().get( 0 ) );
- }
- }
+ return taxon;
}
private void normalize( JarIdentification taxon )
{
if ( StringUtils.isEmpty( taxon.getGroupId() ) )
{
- taxon.setGroupId( pickSmallest( taxon.getGroupIds() ) );
+ taxon.setGroupId( pickSmallest( taxon.getPotentialGroupIds() ) );
}
if ( StringUtils.isEmpty( taxon.getArtifactId() ) )
{
- taxon.setArtifactId( pickLargest( taxon.getArtifactIds() ) );
+ taxon.setArtifactId( pickLargest( taxon.getPotentialArtifactIds() ) );
}
if ( StringUtils.isEmpty( taxon.getVersion() ) )
{
- taxon.setVersion( pickSmallest( taxon.getVersions() ) );
+ taxon.setVersion( pickSmallest( taxon.getPotentialVersions() ) );
}
if ( StringUtils.isEmpty( taxon.getName() ) )
{
- taxon.setName( pickLargest( taxon.getNames() ) );
+ taxon.setName( pickLargest( taxon.getPotentialNames() ) );
}
if ( StringUtils.isEmpty( taxon.getVendor() ) )
{
- taxon.setVendor( pickLargest( taxon.getVendors() ) );
+ taxon.setVendor( pickLargest( taxon.getPotentialVendors() ) );
}
}
private String pickSmallest( List list )
{
- if ( isEmpty( list ) )
- {
- return null;
- }
-
- int size = Integer.MAX_VALUE;
String smallest = null;
- Iterator it = list.iterator();
- while ( it.hasNext() )
- {
- String val = (String) it.next();
- if ( StringUtils.isNotEmpty( val ) )
+ if ( !list.isEmpty() )
+ {
+ int size = Integer.MAX_VALUE;
+ Iterator it = list.iterator();
+ while ( it.hasNext() )
{
- if ( val.length() < size )
+ String val = (String) it.next();
+
+ if ( StringUtils.isNotEmpty( val ) )
{
- smallest = val;
- size = val.length();
+ if ( val.length() < size )
+ {
+ smallest = val;
+ size = val.length();
+ }
}
}
}
@@ -147,37 +136,29 @@
private String pickLargest( List list )
{
- if ( isEmpty( list ) )
- {
- return null;
- }
-
- int size = Integer.MIN_VALUE;
String largest = null;
- Iterator it = list.iterator();
- while ( it.hasNext() )
+ if ( !list.isEmpty() )
{
- String val = (String) it.next();
- if ( StringUtils.isNotEmpty( val ) )
+ int size = Integer.MIN_VALUE;
+ Iterator it = list.iterator();
+ while ( it.hasNext() )
{
- if ( val.length() > size )
+ String val = (String) it.next();
+ if ( StringUtils.isNotEmpty( val ) )
{
- largest = val;
- size = val.length();
+ if ( val.length() > size )
+ {
+ largest = val;
+ size = val.length();
+ }
}
}
}
-
return largest;
}
- private boolean isEmpty( Collection coll )
- {
- return coll == null || coll.isEmpty();
- }
-
- private boolean isNotEmpty( Collection coll )
+ public void setExposers( List exposers )
{
- return coll != null && !coll.isEmpty();
+ this.exposers = Collections.unmodifiableList( exposers );
}
}
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationExposer.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationExposer.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/JarIdentificationExposer.java Sun Jul 1 21:50:57 2007
@@ -21,33 +21,19 @@
import org.apache.maven.shared.jar.JarAnalyzer;
-import java.util.List;
-
/**
- * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- * @version $Id$
+ * Expose information from a JAR during the identification process. Implementations should be made to be thread safe.
+ *
+ * @see org.apache.maven.shared.jar.identification.JarIdentificationAnalysis
*/
public interface JarIdentificationExposer
{
- String ROLE = JarIdentificationExposer.class.getName();
-
- void setJar( JarAnalyzer jar );
-
- void initialize();
-
- void expose();
-
- boolean isAuthoritative();
-
- String getExposerName();
-
- List getGroupIds();
-
- List getArtifactIds();
-
- List getVersions();
-
- List getNames();
-
- List getVendors();
+ /**
+ * Expose metadata during the identification process.
+ *
+ * @param identification the identification record to populate with the exposed metadata
+ * @param jarAnalyzer the JAR to obtain the information from. Should be treated as read only, with the exception
+ * of caching the metadata if it would be identical when run over the same file again.
+ */
+ void expose( JarIdentification identification, JarAnalyzer jarAnalyzer );
}
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/EmbeddedMavenModelExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/EmbeddedMavenModelExposer.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/EmbeddedMavenModelExposer.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/EmbeddedMavenModelExposer.java Sun Jul 1 21:50:57 2007
@@ -22,7 +22,11 @@
import org.apache.maven.model.Model;
import org.apache.maven.model.Organization;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.shared.jar.identification.AbstractJarIdentificationExposer;
+import org.apache.maven.shared.jar.JarAnalyzer;
+import org.apache.maven.shared.jar.identification.JarIdentification;
+import org.apache.maven.shared.jar.identification.JarIdentificationExposer;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.IOException;
@@ -33,57 +37,65 @@
/**
- * JarAnalyzer Taxon Exposer for the Embedded Maven Model.
+ * Exposer that examines a JAR file for any embedded Maven metadata for identification.
*
* @plexus.component role="org.apache.maven.shared.jar.identification.JarIdentificationExposer" role-hint="embeddedMavenModel"
*/
public class EmbeddedMavenModelExposer
- extends AbstractJarIdentificationExposer
+ extends AbstractLogEnabled
+ implements JarIdentificationExposer
{
- public void expose()
+ public void expose( JarIdentification identification, JarAnalyzer jarAnalyzer )
{
- List entries = getJar().getNameRegexEntryList( "META-INF/maven/.*/pom\\.xml$" ); //$NON-NLS-1$
+ List entries = jarAnalyzer.getMavenPomEntries();
if ( entries.isEmpty() )
{
return;
}
+ if ( entries.size() > 1 )
+ {
+ getLogger().warn(
+ "More than one Maven model entry was found in the JAR, using only the first of: " + entries );
+ }
+
JarEntry pom = (JarEntry) entries.get( 0 );
MavenXpp3Reader pomreader = new MavenXpp3Reader();
+ InputStream is = null;
try
{
- InputStream istream = getJar().getEntryInputStream( pom );
- InputStreamReader isreader = new InputStreamReader( istream );
+ is = jarAnalyzer.getEntryInputStream( pom );
+ InputStreamReader isreader = new InputStreamReader( is );
Model model = pomreader.read( isreader );
- addGroupId( model.getGroupId() );
- addArtifactId( model.getArtifactId() );
- addVersion( model.getVersion() );
- addName( model.getName() );
+ identification.addAndSetGroupId( model.getGroupId() );
+ identification.addAndSetArtifactId( model.getArtifactId() );
+ identification.addAndSetVersion( model.getVersion() );
+ identification.addAndSetName( model.getName() );
+
+ // TODO: suboptimal - we are reproducing Maven's built in default
+ if ( model.getName() == null )
+ {
+ identification.addAndSetName( model.getArtifactId() );
+ }
Organization org = model.getOrganization();
if ( org != null )
{
- addVendor( org.getName() );
+ identification.addAndSetVendor( org.getName() );
}
}
catch ( IOException e )
{
- getLogger().error( "Unable to read model " + pom.getName() + " in " + getJar().getFilename() + ".", e );
+ getLogger().error( "Unable to read model " + pom.getName() + " in " + jarAnalyzer.getFile() + ".", e );
}
catch ( XmlPullParserException e )
{
- getLogger().error( "Unable to parse model " + pom.getName() + " in " + getJar().getFilename() + ".", e );
+ getLogger().error( "Unable to parse model " + pom.getName() + " in " + jarAnalyzer.getFile() + ".", e );
+ }
+ finally
+ {
+ IOUtil.close( is );
}
- }
-
- public String getExposerName()
- {
- return "Embedded Model";
- }
-
- public boolean isAuthoritative()
- {
- return true;
}
}
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/FilenameExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/FilenameExposer.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/FilenameExposer.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/FilenameExposer.java Sun Jul 1 21:50:57 2007
@@ -19,7 +19,9 @@
* under the License.
*/
-import org.apache.maven.shared.jar.identification.AbstractJarIdentificationExposer;
+import org.apache.maven.shared.jar.JarAnalyzer;
+import org.apache.maven.shared.jar.identification.JarIdentification;
+import org.apache.maven.shared.jar.identification.JarIdentificationExposer;
import org.codehaus.plexus.util.FileUtils;
import java.util.regex.Matcher;
@@ -27,39 +29,31 @@
/**
- * JarAnalyzer Taxon Exposer based on Filename patterns.
+ * Exposer that examines a JAR file to derive Maven metadata from the pattern of the JAR's filename.
+ * Will match the format <i>artifactId</i>-<i>version</i>.jar.
*
* @plexus.component role="org.apache.maven.shared.jar.identification.JarIdentificationExposer" role-hint="filename"
*/
public class FilenameExposer
- extends AbstractJarIdentificationExposer
+ implements JarIdentificationExposer
{
- public String getExposerName()
- {
- return "Filename";
- }
-
- public boolean isAuthoritative()
- {
- return false;
- }
+ private static final Pattern VERSION_PATTERN = Pattern.compile( "-[0-9]" );
- public void expose()
+ public void expose( JarIdentification identification, JarAnalyzer jarAnalyzer )
{
- String fname = FileUtils.removeExtension( getJar().getFile().getName() );
- Pattern verSplit = Pattern.compile( "-[0-9]" ); //$NON-NLS-1$
- Matcher mat = verSplit.matcher( fname );
+ String filename = FileUtils.removeExtension( jarAnalyzer.getFile().getName() );
+ Matcher mat = VERSION_PATTERN.matcher( filename );
if ( mat.find() )
{
- String prefix = fname.substring( 0, mat.start() );
- addArtifactId( prefix );
- addName( prefix );
- addVersion( fname.substring( mat.end() - 1 ) );
+ String prefix = filename.substring( 0, mat.start() );
+ identification.addArtifactId( prefix );
+ identification.addName( prefix );
+ identification.addVersion( filename.substring( mat.end() - 1 ) );
}
else
{
- addArtifactId( fname );
- addName( fname );
+ identification.addArtifactId( filename );
+ identification.addName( filename );
}
}
}
Modified: maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/JarClassesExposer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/JarClassesExposer.java?view=diff&rev=552400&r1=552399&r2=552400
==============================================================================
--- maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/JarClassesExposer.java (original)
+++ maven/sandbox/trunk/shared/maven-shared-jar/src/main/java/org/apache/maven/shared/jar/identification/exposers/JarClassesExposer.java Sun Jul 1 21:50:57 2007
@@ -19,58 +19,46 @@
* under the License.
*/
+import org.apache.maven.shared.jar.JarAnalyzer;
import org.apache.maven.shared.jar.classes.JarClasses;
import org.apache.maven.shared.jar.classes.JarClassesAnalysis;
-import org.apache.maven.shared.jar.identification.AbstractJarIdentificationExposer;
+import org.apache.maven.shared.jar.identification.JarIdentification;
+import org.apache.maven.shared.jar.identification.JarIdentificationExposer;
import java.util.Iterator;
/**
- * JarAnalyzer Taxon Exposer for the information from JarClasses.
+ * Exposer that examines a JAR file to derive Maven metadata from the classes in a JAR. It will currently identify
+ * potential group IDs from the class packages.
+ * <p/>
+ * Note: if not being used from Plexus, the {@link #setAnalyzer(org.apache.maven.shared.jar.classes.JarClassesAnalysis)}
+ * method must be called to avoid a NullPointerException during the expose method.
*
* @plexus.component role="org.apache.maven.shared.jar.identification.JarIdentificationExposer" role-hint="jarClasses"
*/
public class JarClassesExposer
- extends AbstractJarIdentificationExposer
+ implements JarIdentificationExposer
{
/**
* @plexus.requirement
- * @noinspection UnusedDeclaration
*/
private JarClassesAnalysis analyzer;
- public String getExposerName()
+ public void expose( JarIdentification identification, JarAnalyzer jarAnalyzer )
{
- return "JarAnalyzer Classes";
- }
-
- public boolean isAuthoritative()
- {
- return false;
- }
-
- public void expose()
- {
- JarClasses jarclasses = getJar().getClasses();
-
- if ( jarclasses == null )
- {
- analyzer.analyze( getJar() );
- jarclasses = getJar().getClasses();
- }
-
- if ( jarclasses == null )
- {
- getLogger().error( "Unable to process null JarClasses on " + getJar().getFilename() );
- return;
- }
+ JarClasses jarclasses = analyzer.analyze( jarAnalyzer );
Iterator it = jarclasses.getPackages().iterator();
while ( it.hasNext() )
{
String packagename = (String) it.next();
- addGroupId( packagename );
+ identification.addGroupId( packagename );
}
+ }
+
+ public void setAnalyzer( JarClassesAnalysis analyzer )
+ {
+ this.analyzer = analyzer;
}
}