Author: brett Date: Mon Jan 2 23:57:17 2006 New Revision: 365567 URL: http://svn.apache.org/viewcvs?rev=365567&view=rev Log: PR: MASSEMBLY-47 include modules and their dependencies in assembly when included in dependency sets
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractUnpackingMojo.java maven/plugins/trunk/maven-assembly-plugin/src/main/resources/assemblies/jar-with-dependencies.xml 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=365567&r1=365566&r2=365567&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 Mon Jan 2 23:57:17 2006 @@ -16,6 +16,12 @@ * limitations under the License. */ +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.handler.ArtifactHandler; +import org.apache.maven.artifact.resolver.filter.AndArtifactFilter; +import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter; +import org.apache.maven.artifact.resolver.filter.IncludesArtifactFilter; +import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.assembly.model.Assembly; @@ -23,41 +29,35 @@ import org.apache.maven.plugins.assembly.model.FileItem; import org.apache.maven.plugins.assembly.model.FileSet; import org.apache.maven.plugins.assembly.model.io.xpp3.AssemblyXpp3Reader; -import org.apache.maven.artifact.resolver.filter.AndArtifactFilter; -import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter; -import org.apache.maven.artifact.resolver.filter.IncludesArtifactFilter; -import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.handler.ArtifactHandler; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ArchiverException; -import org.codehaus.plexus.archiver.war.WarArchiver; -import org.codehaus.plexus.archiver.tar.TarArchiver; import org.codehaus.plexus.archiver.manager.NoSuchArchiverException; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; -import org.codehaus.plexus.util.StringUtils; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.archiver.tar.TarArchiver; +import org.codehaus.plexus.archiver.war.WarArchiver; import org.codehaus.plexus.util.DirectoryScanner; +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.introspection.ReflectionValueExtractor; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; -import java.util.Iterator; -import java.util.List; -import java.util.ArrayList; -import java.util.regex.Pattern; -import java.util.regex.Matcher; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; -import java.io.IOException; -import java.io.Reader; -import java.io.FileReader; import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.FileWriter; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a> @@ -123,7 +123,7 @@ * @readonly */ private File tempFile; - + /** * Directory for site generated. * @@ -138,7 +138,7 @@ * @parameter expression="${includeSite}" default-value="false" */ private boolean includeSite; - + /** * Set to false to exclude the assembly id from the assembly final name. * @@ -152,6 +152,7 @@ * Create the binary distribution. * * @throws org.apache.maven.plugin.MojoExecutionException + * */ public void execute() throws MojoExecutionException, MojoFailureException @@ -216,7 +217,7 @@ { return finalName; } - + if ( appendAssemblyId ) { return finalName + "-" + assembly.getId(); @@ -385,7 +386,8 @@ evaluateFileNameMapping( dependencySet.getOutputFileNameMapping(), artifact ) ); } } - else { + 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" ); @@ -397,16 +399,19 @@ private void addDirectory( Archiver archiver, File directory, String output, String[] includes, List excludes ) throws IOException, XmlPullParserException, ArchiverException { - // TODO: more robust set of filters on added files in the archiver - File componentsXml = new File( directory, ComponentsXmlArchiverFileFilter.COMPONENTS_XML_PATH ); - if ( componentsXml.exists() ) + if ( directory.exists() ) { - componentsXmlFilter.addComponentsXml( componentsXml ); - excludes = new ArrayList( excludes ); - excludes.add( ComponentsXmlArchiverFileFilter.COMPONENTS_XML_PATH ); - } + // TODO: more robust set of filters on added files in the archiver + File componentsXml = new File( directory, ComponentsXmlArchiverFileFilter.COMPONENTS_XML_PATH ); + if ( componentsXml.exists() ) + { + componentsXmlFilter.addComponentsXml( componentsXml ); + excludes = new ArrayList( excludes ); + excludes.add( ComponentsXmlArchiverFileFilter.COMPONENTS_XML_PATH ); + } - archiver.addDirectory( directory, output, includes, (String[]) excludes.toArray( EMPTY_STRING_ARRAY ) ); + archiver.addDirectory( directory, output, includes, (String[]) excludes.toArray( EMPTY_STRING_ARRAY ) ); + } } /** @@ -416,6 +421,7 @@ * @param fileSets * @param includeBaseDirecetory * @throws org.codehaus.plexus.archiver.ArchiverException + * */ protected void processFileSets( Archiver archiver, List fileSets, boolean includeBaseDirecetory ) throws ArchiverException, IOException, XmlPullParserException @@ -499,6 +505,7 @@ * @param archiver * @param fileList * @throws org.codehaus.plexus.archiver.ArchiverException + * */ protected void processFileList( Archiver archiver, List fileList, boolean includeBaseDirecetory ) throws ArchiverException, IOException @@ -506,37 +513,37 @@ for ( Iterator i = fileList.iterator(); i.hasNext(); ) { FileItem fileItem = (FileItem) i.next(); - - File source = new File ( fileItem.getSource() ); - + + File source = new File( fileItem.getSource() ); + String outputDirectory = fileItem.getOutputDirectory(); - + if ( outputDirectory == null ) { - outputDirectory = ""; + outputDirectory = ""; } - + String destName = fileItem.getDestName(); - - if ( destName == null ) + + if ( destName == null ) { - destName = source.getName(); + destName = source.getName(); } String lineEnding = getLineEndingCharacters( fileItem.getLineEnding() ); - + if ( lineEnding != null ) { - this.copyReplacingLineEndings( source, this.tempFile, lineEnding ); - source = this.tempFile; + this.copyReplacingLineEndings( source, this.tempFile, lineEnding ); + source = this.tempFile; } - + outputDirectory = getOutputDirectory( outputDirectory, includeBaseDirecetory ); - - archiver.addFile( source , outputDirectory + "/" + destName, Integer.parseInt( fileItem.getFileMode() ) ); + + archiver.addFile( source, outputDirectory + "/" + destName, Integer.parseInt( fileItem.getFileMode() ) ); } } - + /** * Evaluates Filename Mapping * @@ -544,6 +551,7 @@ * @param artifact * @return expression * @throws org.apache.maven.plugin.MojoExecutionException + * */ private static String evaluateFileNameMapping( String expression, Artifact artifact ) throws MojoExecutionException @@ -635,7 +643,9 @@ * @param format Archive format * @return archiver Archiver generated * @throws org.codehaus.plexus.archiver.ArchiverException + * * @throws org.codehaus.plexus.archiver.manager.NoSuchArchiverException + * */ private Archiver createArchiver( String format ) throws ArchiverException, NoSuchArchiverException Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractUnpackingMojo.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractUnpackingMojo.java?rev=365567&r1=365566&r2=365567&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractUnpackingMojo.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractUnpackingMojo.java Mon Jan 2 23:57:17 2006 @@ -16,8 +16,10 @@ * limitations under the License. */ +import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archiver.manager.ArchiverManager; @@ -32,8 +34,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.project.MavenProject; /** * Base routines for assembly and unpack goals. @@ -88,6 +88,15 @@ private List reactorProjects; /** + * The executed project when the base was forked. + * + * @parameter expression="${executedProject}" + * @required + * @readonly + */ + private MavenProject executedProject; + + /** * Retrieves all artifact dependencies within the reactor * * @return A HashSet of artifacts @@ -96,16 +105,40 @@ { Map dependencies = new HashMap(); + // TODO: this is not mediating dependencies versions - first wins. Is there a way we can do that properly from here? + if ( executedProject != null ) + { + Artifact artifact = executedProject.getArtifact(); + + if ( artifact.getFile() != null ) + { + String key = artifact.getDependencyConflictId(); + + dependencies.put( key, artifact ); + } + } + for ( Iterator i = reactorProjects.iterator(); i.hasNext(); ) { MavenProject reactorProject = (MavenProject) i.next(); + Artifact artifact = reactorProject.getArtifact(); + + if ( artifact.getFile() != null ) + { + String key = artifact.getDependencyConflictId(); + + if ( !dependencies.containsKey( key ) ) + { + dependencies.put( key, artifact ); + } + } + for ( Iterator j = reactorProject.getArtifacts().iterator(); j.hasNext(); ) { - Artifact artifact = (Artifact) j.next(); + artifact = (Artifact) j.next(); - // TODO: [jc; 16-nov-05] Why doesn't this use artifact.getId()? - String key = artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion(); + String key = artifact.getDependencyConflictId(); if ( !dependencies.containsKey( key ) ) { @@ -120,7 +153,7 @@ /** * Unpacks the archive file. * - * @param file File to be unpacked. + * @param file File to be unpacked. * @param location Location where to put the unpacked files. */ protected void unpack( File file, File location ) Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/resources/assemblies/jar-with-dependencies.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/resources/assemblies/jar-with-dependencies.xml?rev=365567&r1=365566&r2=365567&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/resources/assemblies/jar-with-dependencies.xml (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/resources/assemblies/jar-with-dependencies.xml Mon Jan 2 23:57:17 2006 @@ -5,13 +5,6 @@ <format>jar</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> - <fileSets> - <fileSet> - <!-- TODO: use expressions instead: ${project.build.directory}, ${project.build.finalName}, or have a <build /> tag to include the built artifact --> - <directory>target/classes</directory> - <outputDirectory>/</outputDirectory> - </fileSet> - </fileSets> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory>