Index: src/main/java/org/apache/maven/archiver/MavenArchiver.java =================================================================== --- src/main/java/org/apache/maven/archiver/MavenArchiver.java (revision 1232770) +++ src/main/java/org/apache/maven/archiver/MavenArchiver.java (working copy) @@ -21,6 +21,7 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.DependencyResolutionRequiredException; +import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.jar.JarArchiver; @@ -52,26 +53,26 @@ */ public class MavenArchiver { - + public static final String SIMPLE_LAYOUT = "${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}"; public static final String REPOSITORY_LAYOUT = "${artifact.groupIdPath}/${artifact.artifactId}/" + - "${artifact.baseVersion}/${artifact.artifactId}-" + - "${artifact.version}${dashClassifier?}.${artifact.extension}"; - + "${artifact.baseVersion}/${artifact.artifactId}-" + + "${artifact.version}${dashClassifier?}.${artifact.extension}"; + public static final String SIMPLE_LAYOUT_NONUNIQUE = "${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}"; public static final String REPOSITORY_LAYOUT_NONUNIQUE = "${artifact.groupIdPath}/${artifact.artifactId}/" + "${artifact.baseVersion}/${artifact.artifactId}-" + "${artifact.baseVersion}${dashClassifier?}.${artifact.extension}"; - + private static final List ARTIFACT_EXPRESSION_PREFIXES; - + static { List artifactExpressionPrefixes = new ArrayList(); artifactExpressionPrefixes.add( "artifact." ); - + ARTIFACT_EXPRESSION_PREFIXES = artifactExpressionPrefixes; } @@ -83,13 +84,25 @@ * Return a pre-configured manifest * * @todo Add user attributes list and user groups list + * @deprecated */ public Manifest getManifest( MavenProject project, MavenArchiveConfiguration config ) throws ManifestException, DependencyResolutionRequiredException { + return getManifest( null, project, config ); + } + + /** + * Return a pre-configured manifest + * + * @todo Add user attributes list and user groups list + */ + public Manifest getManifest( MavenSession session, MavenProject project, MavenArchiveConfiguration config ) + throws ManifestException, DependencyResolutionRequiredException + { boolean hasManifestEntries = !config.isManifestEntriesEmpty(); Map entries = hasManifestEntries ? config.getManifestEntries() : Collections.EMPTY_MAP; - Manifest manifest = getManifest( project, config.getManifest(), entries ); + Manifest manifest = getManifest( session, project, config.getManifest(), entries ); // any custom manifest entries in the archive configuration manifest? if ( hasManifestEntries ) @@ -148,11 +161,23 @@ * Return a pre-configured manifest * * @todo Add user attributes list and user groups list + * @deprecated */ public Manifest getManifest( MavenProject project, ManifestConfiguration config ) throws ManifestException, DependencyResolutionRequiredException { - return getManifest( project, config, Collections.EMPTY_MAP ); + return getManifest( null, project, config, Collections.EMPTY_MAP ); + } + + /** + * Return a pre-configured manifest + * + * @todo Add user attributes list and user groups list + */ + public Manifest getManifest( MavenSession session, MavenProject project, ManifestConfiguration config ) + throws ManifestException, DependencyResolutionRequiredException + { + return getManifest( session, project, config, Collections.EMPTY_MAP ); } private void addManifestAttribute( Manifest manifest, Map map, String key, String value ) @@ -182,26 +207,36 @@ } } + /** + * @deprecated + */ protected Manifest getManifest( MavenProject project, ManifestConfiguration config, Map entries ) throws ManifestException, DependencyResolutionRequiredException { + return getManifest( null, project, config, entries ); + } + + protected Manifest getManifest( MavenSession session, MavenProject project, ManifestConfiguration config, + Map entries ) + throws ManifestException, DependencyResolutionRequiredException + { // TODO: Should we replace "map" with a copy? Note, that we modify it! // Added basic entries Manifest m = new Manifest(); - addManifestAttribute( m, entries, "Created-By", "Apache Maven" ); + addCreatedByEntry( session, m, entries ); addCustomEntries( m, entries, config ); if ( config.isAddClasspath() ) { StringBuffer classpath = new StringBuffer(); - + List artifacts = project.getRuntimeClasspathElements(); String classpathPrefix = config.getClasspathPrefix(); String layoutType = config.getClasspathLayoutType(); String layout = config.getCustomClasspathLayout(); - + Interpolator interpolator = new StringSearchInterpolator(); for ( Iterator iter = artifacts.iterator(); iter.hasNext(); ) @@ -210,13 +245,13 @@ if ( f.getAbsoluteFile().isFile() ) { Artifact artifact = findArtifactWithFile( project.getArtifacts(), f ); - + if ( classpath.length() > 0 ) { classpath.append( " " ); } classpath.append( classpathPrefix ); - + // NOTE: If the artifact or layout type (from config) is null, give up and use the file name by itself. if ( artifact == null || layoutType == null ) { @@ -227,7 +262,7 @@ List valueSources = new ArrayList(); valueSources.add( new PrefixedObjectValueSource( ARTIFACT_EXPRESSION_PREFIXES, artifact, true ) ); valueSources.add( new PrefixedObjectValueSource( ARTIFACT_EXPRESSION_PREFIXES, artifact == null ? null : artifact.getArtifactHandler(), true ) ); - + Properties extraExpressions = new Properties(); if ( artifact != null ) { @@ -237,7 +272,7 @@ { extraExpressions.setProperty( "baseVersion", artifact.getVersion() ); } - + extraExpressions.setProperty( "groupIdPath", artifact.getGroupId().replace( '.', '/' ) ); if ( StringUtils.isNotEmpty( artifact.getClassifier() ) ) { @@ -251,15 +286,15 @@ } } valueSources.add( new PrefixedPropertiesValueSource( ARTIFACT_EXPRESSION_PREFIXES, extraExpressions, true ) ); - + for ( Iterator it = valueSources.iterator(); it.hasNext(); ) { ValueSource vs = (ValueSource) it.next(); interpolator.addValueSource( vs ); } - + RecursionInterceptor recursionInterceptor = new PrefixAwareRecursionInterceptor( ARTIFACT_EXPRESSION_PREFIXES ); - + try { if ( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_SIMPLE.equals( layoutType ) ) @@ -294,7 +329,7 @@ ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM + " layout type was declared, but custom layout expression was not specified. Check your element." ); } - + classpath.append( interpolator.interpolate( layout, recursionInterceptor ) ); } else @@ -308,7 +343,7 @@ ManifestException error = new ManifestException( "Error interpolating artifact path for classpath entry: " + e.getMessage() ); - + error.initCause( e ); throw error; } @@ -415,6 +450,21 @@ return m; } + private void addCreatedByEntry( MavenSession session, Manifest m, Map entries ) + throws ManifestException + { + String createdBy = "Apache Maven"; + if ( session != null ) // can be null due to API backwards compatibility + { + String mavenVersion = session.getExecutionProperties().getProperty( "maven.version" ); + if ( mavenVersion != null ) + { + createdBy += " " + mavenVersion; + } + } + addManifestAttribute( m, entries, "Created-By", createdBy ); + } + private void addCustomEntries( Manifest m, Map entries, ManifestConfiguration config ) throws ManifestException { @@ -453,9 +503,19 @@ archiveFile = outputFile; } + /** + * @deprecated + */ public void createArchive( MavenProject project, MavenArchiveConfiguration archiveConfiguration ) throws ArchiverException, ManifestException, IOException, DependencyResolutionRequiredException { + createArchive( null, project, archiveConfiguration ); + } + + public void createArchive( MavenSession session, MavenProject project, + MavenArchiveConfiguration archiveConfiguration ) + throws ArchiverException, ManifestException, IOException, DependencyResolutionRequiredException + { // we have to clone the project instance so we can write out the pom with the deployment version, // without impacting the main project instance... // TODO use clone() in Maven 2.0.9+ @@ -510,7 +570,7 @@ archiver.setManifest( manifestFile ); } - Manifest manifest = getManifest( workingProject, archiveConfiguration ); + Manifest manifest = getManifest( session, workingProject, archiveConfiguration ); // Configure the jar archiver.addConfiguredManifest( manifest ); @@ -533,7 +593,7 @@ } archiver.setForced( forced ); - if ( !archiveConfiguration.isForced() && archiver.isSupportingForced() ) + if ( !archiveConfiguration.isForced() && archiver.isSupportingForced() ) { // TODO Should issue a warning here, but how do we get a logger? // TODO getLog().warn( "Forced build is disabled, but disabling the forced mode isn't supported by the archiver." ); @@ -542,8 +602,7 @@ // create archive archiver.createArchive(); } - - + private Artifact findArtifactWithFile( Set artifacts, File file ) { for ( Iterator iterator = artifacts.iterator(); iterator.hasNext(); ) Index: src/test/java/org/apache/maven/archiver/MavenArchiverTest.java =================================================================== --- src/test/java/org/apache/maven/archiver/MavenArchiverTest.java (revision 1232770) +++ src/test/java/org/apache/maven/archiver/MavenArchiverTest.java (working copy) @@ -25,10 +25,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.TreeSet; import java.util.jar.Attributes; @@ -39,10 +41,16 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.handler.ArtifactHandler; import org.apache.maven.artifact.handler.DefaultArtifactHandler; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.execution.ReactorManager; import org.apache.maven.model.Build; import org.apache.maven.model.Model; import org.apache.maven.model.Organization; +import org.apache.maven.monitor.event.EventDispatcher; import org.apache.maven.project.MavenProject; +import org.apache.maven.settings.Settings; +import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.archiver.jar.JarArchiver; import org.codehaus.plexus.archiver.jar.Manifest; import org.codehaus.plexus.util.FileUtils; @@ -70,6 +78,8 @@ { MavenArchiver archiver = new MavenArchiver(); + MavenSession session = getDummySession(); + Model model = new Model(); model.setArtifactId( "dummy" ); @@ -89,7 +99,7 @@ Manifest manifest; - manifest = archiver.getManifest( project, config ); + manifest = archiver.getManifest( session, project, config ); assertNotNull( manifest.getMainSection() ); @@ -111,7 +121,7 @@ artifacts.add( artifact1 ); - manifest = archiver.getManifest( project, config ); + manifest = archiver.getManifest( session, project, config ); assertEquals( null, manifest.getMainSection().getAttributeValue( "Extension-List" ) ); @@ -124,7 +134,7 @@ artifacts.add( artifact2 ); - manifest = archiver.getManifest( project, config ); + manifest = archiver.getManifest( session, project, config ); assertEquals( "dummy2", manifest.getMainSection().getAttributeValue( "Extension-List" ) ); @@ -137,7 +147,7 @@ artifacts.add( artifact3 ); - manifest = archiver.getManifest( project, config ); + manifest = archiver.getManifest( session, project, config ); assertEquals( "dummy2", manifest.getMainSection().getAttributeValue( "Extension-List" ) ); @@ -150,7 +160,7 @@ artifacts.add( artifact4 ); - manifest = archiver.getManifest( project, config ); + manifest = archiver.getManifest( session, project, config ); assertEquals( "dummy2 dummy4", manifest.getMainSection().getAttributeValue( "Extension-List" ) ); } @@ -164,6 +174,8 @@ { MavenArchiver archiver = new MavenArchiver(); + MavenSession session = getDummySession(); + Model model = new Model(); model.setArtifactId( "dummy" ); @@ -188,7 +200,7 @@ archiveConfiguration.setManifest( manifestConfig ); archiveConfiguration.addManifestEntry( "Class-Path", "help/" ); - Manifest manifest = archiver.getManifest( project, archiveConfiguration ); + Manifest manifest = archiver.getManifest( session, project, archiveConfiguration ); String classPath = manifest.getMainSection().getAttribute( "Class-Path" ).getValue(); assertTrue( "User specified Class-Path entry was not added to manifest", classPath.indexOf( "help/" ) != -1 ); assertTrue( "Class-Path generated by addClasspath was not added to manifest", @@ -198,7 +210,6 @@ { tempFile.delete(); } - } public void testRecreation() @@ -214,13 +225,14 @@ archiver.setArchiver( jarArchiver ); archiver.setOutputFile( jarArchiver.getDestFile() ); + MavenSession session = getDummySession(); MavenProject project = getDummyProject(); MavenArchiveConfiguration config = new MavenArchiveConfiguration(); config.setForced( false ); FileUtils.deleteDirectory( "target/maven-archiver" ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jarFile.setLastModified( System.currentTimeMillis() - 60000L ); long time = jarFile.lastModified(); @@ -232,11 +244,11 @@ f.setLastModified( time ); } - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertEquals( jarFile.lastModified(), time ); config.setForced( true ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.lastModified() > time ); } @@ -256,12 +268,13 @@ archiver.setArchiver( jarArchiver ); archiver.setOutputFile( jarArchiver.getDestFile() ); + MavenSession session = getDummySession(); MavenProject project = getDummyProject(); MavenArchiveConfiguration config = new MavenArchiveConfiguration(); config.setForced( true ); config.getManifest().setAddDefaultImplementationEntries( false ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); @@ -294,14 +307,16 @@ archiver.setArchiver( jarArchiver ); archiver.setOutputFile( jarArchiver.getDestFile() ); + MavenSession session = getDummySession(); MavenProject project = getDummyProject(); + String ls = System.getProperty( "line.separator" ); project.setDescription( "foo " + ls + " bar " ); MavenArchiveConfiguration config = new MavenArchiveConfiguration(); config.setForced( true ); config.getManifest().setAddDefaultImplementationEntries( true ); config.addManifestEntry( "Description", project.getDescription() ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); @@ -337,7 +352,9 @@ archiver.setArchiver( jarArchiver ); archiver.setOutputFile( jarArchiver.getDestFile() ); + MavenSession session = getDummySession(); MavenProject project = getDummyProject(); + String ls = System.getProperty( "line.separator" ); project.setDescription( "foo " + ls + " bar " ); MavenArchiveConfiguration config = new MavenArchiveConfiguration(); @@ -346,7 +363,7 @@ config.addManifestEntry( "Description", project.getDescription() ); // config.addManifestEntry( "EntryWithTab", " foo tab " + ( '\u0009' ) + ( '\u0009' ) + " bar tab" + ( // '\u0009' ) ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); @@ -368,6 +385,58 @@ } } + public void testDeprecatedCreateArchiveAPI() + throws Exception + { + JarFile jar = null; + try + { + File jarFile = new File( "target/test/dummy.jar" ); + jarFile.delete(); + assertFalse( jarFile.exists() ); + JarArchiver jarArchiver = new JarArchiver(); + jarArchiver.setDestFile( jarFile ); + + MavenArchiver archiver = new MavenArchiver(); + archiver.setArchiver( jarArchiver ); + archiver.setOutputFile( jarArchiver.getDestFile() ); + + MavenProject project = getDummyProject(); + MavenArchiveConfiguration config = new MavenArchiveConfiguration(); + config.setForced( true ); + config.getManifest().setAddDefaultImplementationEntries( true ); + config.getManifest().setAddDefaultSpecificationEntries( true ); + + archiver.createArchive( project, config ); + assertTrue( jarFile.exists() ); + jar = new JarFile( jarFile ); + + Attributes manifest = jar.getManifest().getMainAttributes(); + + assertEquals( "Apache Maven", manifest.get( new Attributes.Name( "Created-By" ) ) ); // no version number + + assertEquals( "archiver test", manifest.get( Attributes.Name.SPECIFICATION_TITLE ) ); + assertEquals( "0.1", manifest.get( Attributes.Name.SPECIFICATION_VERSION ) ); + assertEquals( "Apache", manifest.get( Attributes.Name.SPECIFICATION_VENDOR ) ); + + assertEquals( "archiver test", manifest.get( Attributes.Name.IMPLEMENTATION_TITLE ) ); + assertEquals( "0.1", manifest.get( Attributes.Name.IMPLEMENTATION_VERSION ) ); + assertEquals( "org.apache.dummy", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR_ID ) ); + assertEquals( "Apache", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR ) ); + + assertEquals( System.getProperty( "java.version" ), manifest.get( new Attributes.Name( "Build-Jdk" ) ) ); + assertEquals( System.getProperty( "user.name" ), manifest.get( new Attributes.Name( "Built-By" ) ) ); + } + finally + { + // cleanup streams + if ( jar != null ) + { + jar.close(); + } + } + } + public void testManifestEntries() throws Exception { @@ -384,6 +453,7 @@ archiver.setArchiver( jarArchiver ); archiver.setOutputFile( jarArchiver.getDestFile() ); + MavenSession session = getDummySession(); MavenProject project = getDummyProject(); MavenArchiveConfiguration config = new MavenArchiveConfiguration(); config.setForced( true ); @@ -403,28 +473,24 @@ manifestSections.add( manifestSection ); config.setManifestSections( manifestSections ); config.getManifest().setMainClass( "org.apache.maven.Foo" ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); Attributes manifest = jar.getManifest().getMainAttributes(); - assertEquals( "Apache Maven", manifest.get( new Attributes.Name( "Created-By" ) ) ); - assertEquals( "archiver test", manifest.get( Attributes.Name.SPECIFICATION_TITLE ) );// "Specification-Title" - // ) ); - assertEquals( "0.1", manifest.get( Attributes.Name.SPECIFICATION_VERSION ) );// "Specification-Version" ) ); - assertEquals( "Apache", manifest.get( Attributes.Name.SPECIFICATION_VENDOR ) );// "Specification-Vendor" ) - // ); + assertEquals( "Apache Maven 3.0.4", manifest.get( new Attributes.Name( "Created-By" ) ) ); + + assertEquals( "archiver test", manifest.get( Attributes.Name.SPECIFICATION_TITLE ) ); + assertEquals( "0.1", manifest.get( Attributes.Name.SPECIFICATION_VERSION ) ); + assertEquals( "Apache", manifest.get( Attributes.Name.SPECIFICATION_VENDOR ) ); - assertEquals( "archiver test", manifest.get( Attributes.Name.IMPLEMENTATION_TITLE ) );// "Implementation-Title" - // ) ); - assertEquals( "0.1", manifest.get( Attributes.Name.IMPLEMENTATION_VERSION ) );// "Implementation-Version" ) - // ); - assertEquals( "org.apache.dummy", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR_ID ) );// "Implementation-Vendor-Id" - // ) ); - assertEquals( "Apache", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR ) );// "Implementation-Vendor" ) - // ); - assertEquals( "org.apache.maven.Foo", manifest.get( Attributes.Name.MAIN_CLASS ) );// "Main-Class" ) ); + assertEquals( "archiver test", manifest.get( Attributes.Name.IMPLEMENTATION_TITLE ) ); + assertEquals( "0.1", manifest.get( Attributes.Name.IMPLEMENTATION_VERSION ) ); + assertEquals( "org.apache.dummy", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR_ID ) ); + assertEquals( "Apache", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR ) ); + + assertEquals( "org.apache.maven.Foo", manifest.get( Attributes.Name.MAIN_CLASS ) ); assertEquals( "bar", manifest.get( new Attributes.Name( "foo" ) ) ); assertEquals( "olivier", manifest.get( new Attributes.Name( "first-name" ) ) ); @@ -438,7 +504,46 @@ manifest = jar.getManifest().getAttributes( "UserSection" ); assertEquals( "value", manifest.get( new Attributes.Name( "key" ) ) ); + } + finally + { + // cleanup streams + if ( jar != null ) + { + jar.close(); + } + } + } + + public void testCreatedByManifestEntryWithoutMavenVersion() + throws Exception + { + JarFile jar = null; + try + { + File jarFile = new File( "target/test/dummy.jar" ); + jarFile.delete(); + assertFalse( jarFile.exists() ); + JarArchiver jarArchiver = new JarArchiver(); + jarArchiver.setDestFile( jarFile ); + + MavenArchiver archiver = new MavenArchiver(); + archiver.setArchiver( jarArchiver ); + archiver.setOutputFile( jarArchiver.getDestFile() ); + + MavenSession session = getDummySessionWithoutMavenVersion(); + MavenProject project = getDummyProject(); + + MavenArchiveConfiguration config = new MavenArchiveConfiguration(); + config.setForced( true ); + + archiver.createArchive( session, project, config ); + assertTrue( jarFile.exists() ); + + jar = new JarFile( jarFile ); + Map entries = jar.getManifest().getMainAttributes(); + assertEquals( "Apache Maven", entries.get( new Attributes.Name( "Created-By" ) ) ); } finally { @@ -458,6 +563,8 @@ { MavenArchiver archiver = new MavenArchiver(); + MavenSession session = getDummySession(); + MavenProject project = getDummyProject(); MavenArchiveConfiguration config = new MavenArchiveConfiguration(); @@ -468,7 +575,7 @@ manifestSections.add( manifestSection ); config.setManifestSections( manifestSections ); - Manifest manifest = archiver.getManifest( project, config ); + Manifest manifest = archiver.getManifest( session, project, config ); Manifest.Section section = manifest.getSection( "SectionOne" ); assertNotNull( "The section is not present in the manifest as it should be.", section ); @@ -481,6 +588,7 @@ public void testDefaultClassPathValue() throws Exception { + MavenSession session = getDummySession(); MavenProject project = getDummyProject(); JarFile jar = null; try @@ -501,7 +609,7 @@ config.getManifest().setAddDefaultSpecificationEntries( true ); config.getManifest().setMainClass( "org.apache.maven.Foo" ); config.getManifest().setAddClasspath( true ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); @@ -525,6 +633,7 @@ public void testDefaultClassPathValue_WithSnapshot() throws Exception { + MavenSession session = getDummySession(); MavenProject project = getDummyProjectWithSnapshot(); JarFile jar = null; try @@ -545,7 +654,7 @@ config.getManifest().setAddDefaultSpecificationEntries( true ); config.getManifest().setMainClass( "org.apache.maven.Foo" ); config.getManifest().setAddClasspath( true ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); @@ -569,6 +678,7 @@ public void testMavenRepoClassPathValue() throws Exception { + MavenSession session = getDummySession(); MavenProject project = getDummyProject(); JarFile jar = null; try @@ -590,14 +700,13 @@ config.getManifest().setMainClass( "org.apache.maven.Foo" ); config.getManifest().setAddClasspath( true ); config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_REPOSITORY ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); - Manifest manifest = archiver.getManifest( project, config ); + Manifest manifest = archiver.getManifest( session, project, config ); String[] classPathEntries = - StringUtils.split( - new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), + StringUtils.split( new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), " " ); assertEquals( "org/apache/dummy/dummy1/1.0/dummy1-1.0.jar", classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/dummy2-1.5.jar", classPathEntries[1] ); @@ -609,7 +718,6 @@ assertEquals( "org/apache/dummy/dummy1/1.0/dummy1-1.0.jar", classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/dummy2-1.5.jar", classPathEntries[1] ); assertEquals( "org/apache/dummy/bar/dummy3/2.0/dummy3-2.0.jar", classPathEntries[2] ); - } finally { @@ -624,6 +732,7 @@ public void testMavenRepoClassPathValue_WithSnapshot() throws Exception { + MavenSession session = getDummySession(); MavenProject project = getDummyProjectWithSnapshot(); JarFile jar = null; try @@ -645,14 +754,13 @@ config.getManifest().setMainClass( "org.apache.maven.Foo" ); config.getManifest().setAddClasspath( true ); config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_REPOSITORY ); - archiver.createArchive( project, config ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); - Manifest manifest = archiver.getManifest( project, config ); + Manifest manifest = archiver.getManifest( session, project, config ); String[] classPathEntries = - StringUtils.split( - new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), + StringUtils.split( new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), " " ); assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/dummy2-1.5.jar", classPathEntries[1] ); @@ -664,7 +772,6 @@ assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/dummy2-1.5.jar", classPathEntries[1] ); assertEquals( "org/apache/dummy/bar/dummy3/2.0/dummy3-2.0.jar", classPathEntries[2] ); - } finally { @@ -679,6 +786,7 @@ public void testCustomClassPathValue() throws Exception { + MavenSession session = getDummySession(); MavenProject project = getDummyProject(); JarFile jar = null; try @@ -700,16 +808,14 @@ config.getManifest().setMainClass( "org.apache.maven.Foo" ); config.getManifest().setAddClasspath( true ); config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM ); - config.getManifest().setCustomClasspathLayout( - "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.version}/TEST-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}" ); - archiver.createArchive( project, config ); + config.getManifest().setCustomClasspathLayout( "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.version}/TEST-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}" ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); - Manifest manifest = archiver.getManifest( project, config ); + Manifest manifest = archiver.getManifest( session, project, config ); String[] classPathEntries = - StringUtils.split( - new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), + StringUtils.split( new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), " " ); assertEquals( "org/apache/dummy/dummy1/1.0/TEST-dummy1-1.0.jar", classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] ); @@ -721,7 +827,6 @@ assertEquals( "org/apache/dummy/dummy1/1.0/TEST-dummy1-1.0.jar", classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] ); assertEquals( "org/apache/dummy/bar/dummy3/2.0/TEST-dummy3-2.0.jar", classPathEntries[2] ); - } finally { @@ -736,6 +841,7 @@ public void testCustomClassPathValue_WithSnapshotResolvedVersion() throws Exception { + MavenSession session = getDummySession(); MavenProject project = getDummyProjectWithSnapshot(); JarFile jar = null; try @@ -757,28 +863,27 @@ config.getManifest().setMainClass( "org.apache.maven.Foo" ); config.getManifest().setAddClasspath( true ); config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM ); - config.getManifest().setCustomClasspathLayout( - "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.baseVersion}/TEST-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}" ); - archiver.createArchive( project, config ); + config.getManifest().setCustomClasspathLayout( "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.baseVersion}/TEST-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}" ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); - Manifest manifest = archiver.getManifest( project, config ); + Manifest manifest = archiver.getManifest( session, project, config ); String[] classPathEntries = - StringUtils.split( - new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), + StringUtils.split( new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), " " ); - assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] ); + assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-20081022.112233-1.jar", + classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] ); assertEquals( "org/apache/dummy/bar/dummy3/2.0/TEST-dummy3-2.0.jar", classPathEntries[2] ); String classPath = jar.getManifest().getMainAttributes().getValue( Attributes.Name.CLASS_PATH ); assertNotNull( classPath ); classPathEntries = StringUtils.split( classPath, " " ); - assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-20081022.112233-1.jar", classPathEntries[0] ); + assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-20081022.112233-1.jar", + classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] ); assertEquals( "org/apache/dummy/bar/dummy3/2.0/TEST-dummy3-2.0.jar", classPathEntries[2] ); - } finally { @@ -793,6 +898,7 @@ public void testCustomClassPathValue_WithSnapshotForcingBaseVersion() throws Exception { + MavenSession session = getDummySession(); MavenProject project = getDummyProjectWithSnapshot(); JarFile jar = null; try @@ -814,16 +920,14 @@ config.getManifest().setMainClass( "org.apache.maven.Foo" ); config.getManifest().setAddClasspath( true ); config.getManifest().setClasspathLayoutType( ManifestConfiguration.CLASSPATH_LAYOUT_TYPE_CUSTOM ); - config.getManifest().setCustomClasspathLayout( - "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.baseVersion}/TEST-${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}" ); - archiver.createArchive( project, config ); + config.getManifest().setCustomClasspathLayout( "${artifact.groupIdPath}/${artifact.artifactId}/${artifact.baseVersion}/TEST-${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}" ); + archiver.createArchive( session, project, config ); assertTrue( jarFile.exists() ); jar = new JarFile( jarFile ); - Manifest manifest = archiver.getManifest( project, config ); + Manifest manifest = archiver.getManifest( session, project, config ); String[] classPathEntries = - StringUtils.split( - new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), + StringUtils.split( new String( manifest.getMainSection().getAttributeValue( "Class-Path" ).getBytes() ), " " ); assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-SNAPSHOT.jar", classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] ); @@ -835,7 +939,6 @@ assertEquals( "org/apache/dummy/dummy1/1.1-SNAPSHOT/TEST-dummy1-1.1-SNAPSHOT.jar", classPathEntries[0] ); assertEquals( "org/apache/dummy/foo/dummy2/1.5/TEST-dummy2-1.5.jar", classPathEntries[1] ); assertEquals( "org/apache/dummy/bar/dummy3/2.0/TEST-dummy3-2.0.jar", classPathEntries[2] ); - } finally { @@ -1090,4 +1193,34 @@ return result; } + + private MavenSession getDummySession() + { + Properties executionProperties = new Properties(); + executionProperties.put( "maven.version", "3.0.4" ); + + return getDummySession( executionProperties ); + } + + private MavenSession getDummySessionWithoutMavenVersion() + { + return getDummySession( new Properties() ); + } + + private MavenSession getDummySession( Properties executionProperties ) + { + PlexusContainer container = null; + Settings settings = null; + ArtifactRepository localRepo = null; + EventDispatcher eventDispatcher = null; + ReactorManager reactorManager = null; + List goals = null; + String executionRootDir = null; + Date startTime = new Date(); + MavenSession session = + new MavenSession( container, settings, localRepo, eventDispatcher, reactorManager, goals, executionRootDir, + executionProperties, startTime ); + + return session; + } } Index: pom.xml =================================================================== --- pom.xml (revision 1232770) +++ pom.xml (working copy) @@ -75,6 +75,11 @@ + org.apache.maven + maven-core + ${mavenVersion} + + org.codehaus.plexus plexus-archiver 2.0.2