Author: jdcasey Date: Thu May 4 15:23:13 2006 New Revision: 399870 URL: http://svn.apache.org/viewcvs?rev=399870&view=rev Log: Fixing tests, and adding code for module source inclusion back to the plugin, in a different way...will add tests next.
Removed: maven/plugins/trunk/maven-assembly-plugin/src/test/plugin-configs/basicAbstractAssemblyMojoFeaturesTest/outputFileNameMappingWithTwoDependencySets-pluginConfig.xml maven/plugins/trunk/maven-assembly-plugin/src/test/resources/basicAbstractAssemblyMojoFeaturesTest/outputFileNameMappingWithTwoDependencySets-assemblyDescriptor.xml Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/BasicAbstractAssemblyMojoFeaturesTest.java maven/plugins/trunk/maven-assembly-plugin/src/test/plugin-configs/basicAbstractAssemblyMojoFeaturesTest/outputFileNameMapping-pluginConfig.xml Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/pom.xml?rev=399870&r1=399869&r2=399870&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-assembly-plugin/pom.xml Thu May 4 15:23:13 2006 @@ -10,11 +10,6 @@ <name>Maven Assembly Plugin</name> <version>2.1-SNAPSHOT</version> <build> - <!--testResources> - <testResource> - <directory>src/test/plugin-configs</directory> - </testResource> - </testResources--> <plugins> <plugin> <groupId>org.codehaus.modello</groupId> Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java?rev=399870&r1=399869&r2=399870&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java Thu May 4 15:23:13 2006 @@ -46,6 +46,7 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.apache.maven.shared.model.fileset.util.FileSetManager; +import org.apache.maven.wagon.PathUtils; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.jar.JarArchiver; @@ -485,6 +486,9 @@ ModuleSet moduleSet = (ModuleSet) i.next(); String output = moduleSet.getOutputDirectory(); output = getOutputDirectory( output, includeBaseDirectory ); + + String sourceOutput = moduleSet.getSourceOutputDirectory(); + sourceOutput = getOutputDirectory( sourceOutput, includeBaseDirectory ); archiver.setDefaultDirectoryMode( Integer.parseInt( moduleSet.getDirectoryMode(), 8 ) ); @@ -507,7 +511,8 @@ Set set = getModulesFromReactor( getExecutedProject() ); - // TODO: includes and excludes + List moduleFileSets = new ArrayList(); + for ( Iterator j = set.iterator(); j.hasNext(); ) { MavenProject reactorProject = (MavenProject) j.next(); @@ -517,118 +522,144 @@ if ( filter.include( artifact ) && artifact.getFile() != null ) { String name = artifact.getFile().getName(); - - if ( moduleSet.isUnpack() ) + + if ( moduleSet.isIncludeSources() ) { - // TODO: something like zipfileset in plexus-archiver - // archiver.addJar( ) + FileSet moduleFileSet = new FileSet(); - // TODO refactor into the AbstractUnpackMojo - File tempLocation = new File( workDirectory, name.substring( 0, name.lastIndexOf( '.' ) ) ); - boolean process = false; - if ( !tempLocation.exists() ) - { - tempLocation.mkdirs(); - process = true; - } - else if ( artifact.getFile().lastModified() > tempLocation.lastModified() ) - { - process = true; - } + moduleFileSet.setDirectory( reactorProject.getBasedir().getAbsolutePath() ); + moduleFileSet.setOutputDirectory( sourceOutput ); - if ( process ) + List excludesList = new ArrayList(); + excludesList.add( PathUtils.toRelative( reactorProject.getBasedir(), reactorProject.getBuild().getDirectory() ) + "/**" ); + excludesList.add( PathUtils.toRelative( reactorProject.getBasedir(), reactorProject.getBuild().getOutputDirectory() ) + "/**" ); + excludesList.add( PathUtils.toRelative( reactorProject.getBasedir(), reactorProject.getBuild().getTestOutputDirectory() ) + "/**" ); + excludesList.add( PathUtils.toRelative( reactorProject.getBasedir(), reactorProject.getReporting().getOutputDirectory() ) + "/**" ); + moduleFileSet.setExcludes( excludesList ); + + moduleFileSets.add( moduleFileSet ); + } + + if ( moduleSet.isIncludeBinaries() ) + { + if ( moduleSet.isUnpack() ) { - try + // TODO: something like zipfileset in plexus-archiver + // archiver.addJar( ) + + // TODO refactor into the AbstractUnpackMojo + File tempLocation = new File( workDirectory, name.substring( 0, name.lastIndexOf( '.' ) ) ); + boolean process = false; + if ( !tempLocation.exists() ) { - unpack( artifact.getFile(), tempLocation ); + tempLocation.mkdirs(); + process = true; + } + else if ( artifact.getFile().lastModified() > tempLocation.lastModified() ) + { + process = true; + } - if ( moduleSet.isIncludeDependencies() ) + if ( process ) + { + try { - Set artifactSet = reactorProject.getArtifacts(); + unpack( artifact.getFile(), tempLocation ); - for ( Iterator artifacts = artifactSet.iterator(); artifacts.hasNext(); ) + if ( moduleSet.isIncludeDependencies() ) { - Artifact dependencyArtifact = (Artifact) artifacts.next(); - - unpack( dependencyArtifact.getFile(), tempLocation ); - } - } + Set artifactSet = reactorProject.getArtifacts(); - /* - * If the assembly is 'jar-with-dependencies', remove the security files in all dependencies - * that will prevent the uberjar to execute. Please see MASSEMBLY-64 for details. - */ - if ( archiver instanceof JarArchiver ) - { - String[] securityFiles = { "*.RSA", "*.DSA", "*.SF", "*.rsa", "*.dsa", "*.sf" }; - org.apache.maven.shared.model.fileset.FileSet securityFileSet = new org.apache.maven.shared.model.fileset.FileSet(); - securityFileSet.setDirectory(tempLocation.getAbsolutePath() + "/META-INF/" ); + for ( Iterator artifacts = artifactSet.iterator(); artifacts.hasNext(); ) + { + Artifact dependencyArtifact = (Artifact) artifacts.next(); - for ( int sfsi = 0; sfsi < securityFiles.length; sfsi++ ) - { - securityFileSet.addInclude( securityFiles[sfsi] ); + unpack( dependencyArtifact.getFile(), tempLocation ); + } } - FileSetManager fsm = new FileSetManager( getLog() ); - try - { - fsm.delete( securityFileSet ); - } - catch ( IOException e ) + /* + * If the assembly is 'jar-with-dependencies', remove the security files in all dependencies + * that will prevent the uberjar to execute. Please see MASSEMBLY-64 for details. + */ + if ( archiver instanceof JarArchiver ) { - throw new MojoExecutionException("Failed to delete security files: " + e.getMessage(), e); + String[] securityFiles = { "*.RSA", "*.DSA", "*.SF", "*.rsa", "*.dsa", "*.sf" }; + org.apache.maven.shared.model.fileset.FileSet securityFileSet = new org.apache.maven.shared.model.fileset.FileSet(); + securityFileSet.setDirectory(tempLocation.getAbsolutePath() + "/META-INF/" ); + + for ( int sfsi = 0; sfsi < securityFiles.length; sfsi++ ) + { + securityFileSet.addInclude( securityFiles[sfsi] ); + } + + FileSetManager fsm = new FileSetManager( getLog() ); + try + { + fsm.delete( securityFileSet ); + } + catch ( IOException e ) + { + throw new MojoExecutionException("Failed to delete security files: " + e.getMessage(), e); + } } } + catch ( NoSuchArchiverException e ) + { + throw new MojoExecutionException( + "Unable to obtain unarchiver for file '" + artifact.getFile() + "'" ); + } } - catch ( NoSuchArchiverException e ) - { - throw new MojoExecutionException( - "Unable to obtain unarchiver for file '" + artifact.getFile() + "'" ); - } - } - addDirectory( archiver, tempLocation, output, null, FileUtils.getDefaultExcludesAsList() ); - } - else - { - String outputFileNameMapping = moduleSet.getOutputFileNameMapping(); - - //insert the classifier if exist - if ( !StringUtils.isEmpty( artifact.getClassifier() ) ) + addDirectory( archiver, tempLocation, output, null, FileUtils.getDefaultExcludesAsList() ); + } + else { - int dotIdx = outputFileNameMapping.lastIndexOf( "." ); + String outputFileNameMapping = moduleSet.getOutputFileNameMapping(); - String extension = - outputFileNameMapping.substring( dotIdx + 1, outputFileNameMapping.length() ); - String artifactWithoutExt = outputFileNameMapping.substring( 0, dotIdx ); + //insert the classifier if exist + if ( !StringUtils.isEmpty( artifact.getClassifier() ) ) + { + int dotIdx = outputFileNameMapping.lastIndexOf( "." ); - outputFileNameMapping = - artifactWithoutExt + "-" + artifact.getClassifier() + "." + extension; - } + String extension = + outputFileNameMapping.substring( dotIdx + 1, outputFileNameMapping.length() ); + String artifactWithoutExt = outputFileNameMapping.substring( 0, dotIdx ); - archiver.addFile( artifact.getFile(), - output + evaluateFileNameMapping( outputFileNameMapping, artifact ) ); + outputFileNameMapping = + artifactWithoutExt + "-" + artifact.getClassifier() + "." + extension; + } - if ( moduleSet.isIncludeDependencies() ) - { - Set artifactSet = reactorProject.getArtifacts(); + archiver.addFile( artifact.getFile(), + output + evaluateFileNameMapping( outputFileNameMapping, artifact ) ); - for ( Iterator artifacts = artifactSet.iterator(); artifacts.hasNext(); ) + if ( moduleSet.isIncludeDependencies() ) { - Artifact dependencyArtifact = (Artifact) artifacts.next(); + Set artifactSet = reactorProject.getArtifacts(); + + for ( Iterator artifacts = artifactSet.iterator(); artifacts.hasNext(); ) + { + Artifact dependencyArtifact = (Artifact) artifacts.next(); - File artifactFile = dependencyArtifact.getFile(); + File artifactFile = dependencyArtifact.getFile(); - archiver.addFile( artifactFile, artifactFile.getName() ); + archiver.addFile( artifactFile, artifactFile.getName() ); + } } } } + } else { // would be better to have a way to find out when a specified include or exclude // is never triggered and warn() it. getLog().debug( "artifact: " + artifact + " not included" ); + } + + if ( !moduleFileSets.isEmpty() ) + { + processFileSets( archiver, moduleFileSets, includeBaseDirectory ); // TODO: includes and excludes } } } Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo?rev=399870&r1=399869&r2=399870&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo Thu May 4 15:23:13 2006 @@ -402,6 +402,35 @@ <superClass>SetBase</superClass> <fields> <field> + <name>includeSources</name> + <version>1.0.0</version> + <type>boolean</type> + <defaultValue>false</defaultValue> + <description> + When set to true, the plugin will include the source files for modules included in this + set. Otherwise, it will only include binaries. + </description> + </field> + <field> + <name>sourceOutputDirectory</name> + <version>1.0.0</version> + <type>String</type> + <description> + The output directory in the assembly for the module-sources included by this set. + </description> + </field> + <field> + <name>includeBinaries</name> + <version>1.0.0</version> + <type>boolean</type> + <defaultValue>true</defaultValue> + <description> + When set to true, the plugin will include the binaries for the included modules, according to other + configuration in this set. This includes the module artifacts, along with the dependency artifacts + (optionally). + </description> + </field> + <field> <name>includeDependencies</name> <version>1.0.0</version> <type>boolean</type> Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/BasicAbstractAssemblyMojoFeaturesTest.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/BasicAbstractAssemblyMojoFeaturesTest.java?rev=399870&r1=399869&r2=399870&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/BasicAbstractAssemblyMojoFeaturesTest.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/BasicAbstractAssemblyMojoFeaturesTest.java Thu May 4 15:23:13 2006 @@ -6,19 +6,18 @@ import org.apache.maven.plugin.assembly.stubs.ArchiverManagerStub; import org.apache.maven.plugin.assembly.stubs.ArchiverStub; import org.apache.maven.plugin.assembly.stubs.ArtifactStub; -import org.apache.maven.plugin.assembly.stubs.ReactorMavenProjectStub; import org.apache.maven.plugin.testing.AbstractMojoTestCase; import org.apache.maven.plugin.testing.stubs.MavenProjectStub; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ArchiverException; +import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archiver.manager.ArchiverManager; import org.codehaus.plexus.archiver.manager.NoSuchArchiverException; import java.io.File; -import java.net.URL; +import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -46,32 +45,16 @@ testDependencyMapping( pluginConfig, requiredDependencies ); } - public void testOutputFileNameMappingWithTwoDependencySets() throws Exception - { - String pluginConfig = "outputFileNameMappingWithTwoDependencySets-pluginConfig.xml"; - - List requiredDependencies = new ArrayList(); - - requiredDependencies.add( "dependencies/test.jar" ); - requiredDependencies.add( "dependencies/test2.jar" ); - requiredDependencies.add( "dependencies/test3-3.jar" ); - requiredDependencies.add( "dependencies/test4-4.jar" ); - - testDependencyMapping( pluginConfig, requiredDependencies ); - } - private void testDependencyMapping( String pluginConfig, List requiredDependencies ) throws Exception { - ClassLoader cloader = Thread.currentThread().getContextClassLoader(); - String pluginConfigResource = "basicAbstractAssemblyMojoFeaturesTest/" + pluginConfig; - URL resource = cloader.getResource( pluginConfigResource ); + File pluginConfigFile = new File( getBasedir(), "src/test/plugin-configs/" + pluginConfigResource ); - assertNotNull( "Cannot find plugin-configuration: \'" + pluginConfigResource + "\' in context-classloader\'s classpath.", resource ); + assertTrue( "Cannot find plugin-configuration: \'" + pluginConfigResource + "\' in context-classloader\'s classpath.", pluginConfigFile.exists() ); // TODO: Need to replace this with test-only mojos... - DirectoryMojo mojo = (DirectoryMojo) lookupMojo( "directory", resource.getPath() ); + DirectoryMojo mojo = (DirectoryMojo) lookupMojo( "directory", pluginConfigFile.getAbsolutePath() ); FileLoggingArchiverManagerStub archiverManager = (FileLoggingArchiverManagerStub) getVariableValueFromObject( mojo, "archiverManager" ); archiverManager.clearArchiver(); @@ -93,7 +76,7 @@ } public static final class FileLoggingArchiverManagerStub - extends ArchiverManagerStub + implements ArchiverManager { private FileLoggingArchiverStub archiverStub; @@ -111,10 +94,16 @@ { archiverStub = null; } + + public UnArchiver getUnArchiver( String arg0 ) throws NoSuchArchiverException + { + // TODO Auto-generated method stub + return null; + } } public static final class FileLoggingArchiverStub - extends ArchiverStub + implements Archiver { private Set files = new LinkedHashSet(); @@ -132,6 +121,90 @@ public Set getAddedFiles() { return files; + } + + public void addDirectory( File arg0 ) throws ArchiverException + { + // TODO Auto-generated method stub + + } + + public void addDirectory( File arg0, String arg1 ) throws ArchiverException + { + // TODO Auto-generated method stub + + } + + public void addDirectory( File arg0, String[] arg1, String[] arg2 ) throws ArchiverException + { + // TODO Auto-generated method stub + + } + + public void addDirectory( File arg0, String arg1, String[] arg2, String[] arg3 ) throws ArchiverException + { + // TODO Auto-generated method stub + + } + + public void createArchive() throws ArchiverException, IOException + { + // TODO Auto-generated method stub + + } + + public int getDefaultDirectoryMode() + { + // TODO Auto-generated method stub + return 0; + } + + public int getDefaultFileMode() + { + // TODO Auto-generated method stub + return 0; + } + + public File getDestFile() + { + // TODO Auto-generated method stub + return null; + } + + public Map getFiles() + { + // TODO Auto-generated method stub + return null; + } + + public boolean getIncludeEmptyDirs() + { + // TODO Auto-generated method stub + return false; + } + + public void setDefaultDirectoryMode( int arg0 ) + { + // TODO Auto-generated method stub + + } + + public void setDefaultFileMode( int arg0 ) + { + // TODO Auto-generated method stub + + } + + public void setDestFile( File arg0 ) + { + // TODO Auto-generated method stub + + } + + public void setIncludeEmptyDirs( boolean arg0 ) + { + // TODO Auto-generated method stub + } } Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/plugin-configs/basicAbstractAssemblyMojoFeaturesTest/outputFileNameMapping-pluginConfig.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/test/plugin-configs/basicAbstractAssemblyMojoFeaturesTest/outputFileNameMapping-pluginConfig.xml?rev=399870&r1=399869&r2=399870&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/plugin-configs/basicAbstractAssemblyMojoFeaturesTest/outputFileNameMapping-pluginConfig.xml (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/plugin-configs/basicAbstractAssemblyMojoFeaturesTest/outputFileNameMapping-pluginConfig.xml Thu May 4 15:23:13 2006 @@ -28,6 +28,14 @@ <depTwoGroupId>org.test.2</depTwoGroupId> <depTwoVersion>2</depTwoVersion> </project> + <executedProject implementation="org.apache.maven.plugin.assembly.BasicAbstractAssemblyMojoFeaturesTest$TwoDependencyReactorProjectStub"> + <depOneArtifactId>test</depOneArtifactId> + <depOneGroupId>org.test</depOneGroupId> + <depOneVersion>1</depOneVersion> + <depTwoArtifactId>test2</depTwoArtifactId> + <depTwoGroupId>org.test.2</depTwoGroupId> + <depTwoVersion>2</depTwoVersion> + </executedProject> <descriptors> <descriptor>${basedir}/src/test/resources/basicAbstractAssemblyMojoFeaturesTest/outputFileNameMapping-assemblyDescriptor.xml</descriptor> </descriptors>