Author: krosenvold Date: Tue Nov 4 06:19:05 2014 New Revision: 1636510 URL: http://svn.apache.org/r1636510 Log: [MASSEMBLY-395] Fixed primary problem of scope upgrades not being detected
Testcase submitted by Jaan Vajakas, modified slightly by me Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/pom.xml maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/com/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/com/mycompany/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/com/mycompany/app/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/com/mycompany/app/App.java maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/pom.xml maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/com/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/com/mycompany/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/com/mycompany/app/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/com/mycompany/app/App2.java maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/pom.xml maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/src/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/src/main/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/src/main/assembly/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/src/main/assembly/zip.xml maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/verify.bsh maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfoTest.java Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfo.java Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/pom.xml?rev=1636510&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/pom.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/pom.xml Tue Nov 4 06:19:05 2014 @@ -0,0 +1,19 @@ +<?xml version="1.0"?><project> + <modelVersion>4.0.0</modelVersion> + <groupId>com.mycompany.app</groupId> + <artifactId>my-app-module1</artifactId> + <name>my-app-module1</name> + <version>1.0-SNAPSHOT</version> + <dependencies> + <dependency> + <artifactId>my-app-module2</artifactId> + <groupId>com.mycompany.app</groupId> + <version>1.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + </dependency> + </dependencies> +</project> Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/com/mycompany/app/App.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/com/mycompany/app/App.java?rev=1636510&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/com/mycompany/app/App.java (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module1/src/main/java/com/mycompany/app/App.java Tue Nov 4 06:19:05 2014 @@ -0,0 +1,13 @@ +package com.mycompany.app; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/pom.xml?rev=1636510&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/pom.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/pom.xml Tue Nov 4 06:19:05 2014 @@ -0,0 +1,15 @@ +<?xml version="1.0"?><project> + <modelVersion>4.0.0</modelVersion> + <groupId>com.mycompany.app</groupId> + <artifactId>my-app-module2</artifactId> + <name>my-app-module2</name> + <version>1.0-SNAPSHOT</version> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/com/mycompany/app/App2.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/com/mycompany/app/App2.java?rev=1636510&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/com/mycompany/app/App2.java (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/my-app-module2/src/main/java/com/mycompany/app/App2.java Tue Nov 4 06:19:05 2014 @@ -0,0 +1,13 @@ +package com.mycompany.app; + +/** + * Hello world! + * + */ +public class App2 +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/pom.xml?rev=1636510&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/pom.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/pom.xml Tue Nov 4 06:19:05 2014 @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>com.mycompany.app</groupId> + <artifactId>my-app</artifactId> + <packaging>pom</packaging> + <version>1.0-SNAPSHOT</version> + <name>my-app</name> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> + <modules> + <module>my-app-module1</module> + <module>my-app-module2</module> + </modules> + <build> + <plugins> + <plugin> + <inherited>false</inherited> + <artifactId>maven-assembly-plugin</artifactId> + <version>${testVersion}</version> + <configuration> + <descriptors> + <descriptor>src/main/assembly/zip.xml</descriptor> + </descriptors> + </configuration> + <executions> + <execution> + <id>make-assembly</id> + <phase>package</phase> + <goals> + <goal>attached</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/src/main/assembly/zip.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/src/main/assembly/zip.xml?rev=1636510&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/src/main/assembly/zip.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/src/main/assembly/zip.xml Tue Nov 4 06:19:05 2014 @@ -0,0 +1,20 @@ +<assembly> + <id>bin</id> + <formats> + <format>zip</format> + </formats> + <moduleSets> + <moduleSet> + <includes> + <include>com.mycompany.app:my-app-module1</include> + </includes> + <binaries> + <outputDirectory>modules</outputDirectory> + <outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping> + + <unpack>false</unpack> + <includeDependencies>true</includeDependencies> + </binaries> + </moduleSet> + </moduleSets> +</assembly> Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/verify.bsh URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/verify.bsh?rev=1636510&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/verify.bsh (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-395/verify.bsh Tue Nov 4 06:19:05 2014 @@ -0,0 +1,36 @@ +/* + * 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.*; +import java.util.*; +import java.util.jar.*; +import java.util.zip.*; + + +File f = new File( basedir, "target/my-app-1.0-SNAPSHOT-bin.zip" ); +ZipFile zf = new ZipFile( f ); + +ZipEntry child1InclEntry = zf.getEntry( "my-app-1.0-SNAPSHOT/modules/junit.jar" ); + +if ( child1InclEntry == null ) +{ + System.out.println( "Expected junit.jar!" ); + return false; +} +return true; Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java?rev=1636510&r1=1636509&r2=1636510&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java Tue Nov 4 06:19:05 2014 @@ -34,6 +34,7 @@ import org.codehaus.plexus.components.io import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.StringUtils; +import sun.util.calendar.CalendarUtils; import java.io.File; import java.io.IOException; @@ -184,6 +185,15 @@ public class AddArtifactTask } else { + /* + Artifact primary = moduleArtifact != null ? moduleArtifact : artifact; + Artifact secondary = moduleArtifact != null ? artifact : moduleArtifact; + final String tempMapping = + AssemblyFormatUtils.evaluateFileNameMapping( outputFileNameMapping, primary, + configSource.getProject(), moduleProject, secondary, + project, configSource ); + + */ final String tempMapping = AssemblyFormatUtils.evaluateFileNameMapping( outputFileNameMapping, artifact, configSource.getProject(), moduleProject, moduleArtifact, Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfo.java?rev=1636510&r1=1636509&r2=1636510&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfo.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfo.java Tue Nov 4 06:19:05 2014 @@ -42,7 +42,7 @@ class ResolutionManagementInfo private final Set<MavenProject> enabledProjects = new LinkedHashSet<MavenProject>(); - private final Set<Artifact> artifacts = new LinkedHashSet<Artifact>(); + private final LinkedHashSet<Artifact> artifacts = new LinkedHashSet<Artifact>(); ResolutionManagementInfo( final MavenProject currentProject ) { @@ -126,7 +126,55 @@ class ResolutionManagementInfo void addArtifacts( final Set<Artifact> a ) { + for ( Artifact artifact : a ) + { + addOneArtifact( artifact ); + } artifacts.addAll( a ); } + private void addOneArtifact( Artifact artifact ) + { + for ( Artifact existing : artifacts ) + { + if (existing.equals( artifact )){ + if (isScopeUpgrade(artifact, existing)){ + artifacts.remove( existing ); + artifacts.add( artifact); + return; + } + } + } + } + + private boolean isScopeUpgrade( Artifact a, Artifact existing ) + { + return scopeValue( a.getScope() ) > scopeValue( existing.getScope() ); + } + + private int scopeValue( final String scope) + { + if ( Artifact.SCOPE_COMPILE.equals( scope ) ) + { + return 5; + } + else if ( Artifact.SCOPE_PROVIDED.equals( scope ) ) + { + return 4; + } + else if ( Artifact.SCOPE_RUNTIME.equals( scope ) ) + { + return 3; + } + else if ( Artifact.SCOPE_SYSTEM.equals( scope ) ) + { + return 2; + } + else if ( Artifact.SCOPE_TEST.equals( scope ) ) + { + return 1; + } + return 0; + } + } Added: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfoTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfoTest.java?rev=1636510&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfoTest.java (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfoTest.java Tue Nov 4 06:19:05 2014 @@ -0,0 +1,78 @@ +package org.apache.maven.plugin.assembly.artifact; + +/* + * 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 junit.framework.TestCase; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.DefaultArtifact; +import org.apache.maven.artifact.handler.DefaultArtifactHandler; +import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.project.MavenProject; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; + +public class ResolutionManagementInfoTest + extends TestCase +{ + + public void testName() + throws Exception + { + + } + + public void testAddSingleArtifactWithReplacemen() + throws Exception + { + ResolutionManagementInfo rmi = new ResolutionManagementInfo( new MavenProject( ) ); + Artifact a1 = new DefaultArtifact( "groupid", "1", VersionRange.createFromVersion("1.0"), "test", "jar", null, new DefaultArtifactHandler() ); + rmi.addArtifacts( Collections.singleton( a1)); + Artifact a2 = new DefaultArtifact( "groupid", "1", VersionRange.createFromVersion("1.0"), "compile", "jar", null, new DefaultArtifactHandler() ); + rmi.addArtifacts( Collections.singleton( a2)); + assertEquals( 1, rmi.getArtifacts().size()); + Artifact next = rmi.getArtifacts().iterator().next(); + assertEquals("compile", next.getScope()); + } + + public void testAddMultiArtifactWithReplacemen() + throws Exception + { + ResolutionManagementInfo rmi = new ResolutionManagementInfo( new MavenProject( ) ); + Artifact a1 = new DefaultArtifact( "groupid", "a1", VersionRange.createFromVersion("1.0"), "test", "jar", null, new DefaultArtifactHandler() ); + Artifact a2 = new DefaultArtifact( "groupid", "a2", VersionRange.createFromVersion("1.0"), "test", "jar", null, new DefaultArtifactHandler() ); + Artifact a3 = new DefaultArtifact( "groupid", "a3", VersionRange.createFromVersion("1.0"), "test", "jar", null, new DefaultArtifactHandler() ); + rmi.addArtifacts( new HashSet<Artifact>( Arrays.asList( a1, a2, a3 ))); + Artifact b2 = new DefaultArtifact( "groupid", "a2", VersionRange.createFromVersion("1.0"), "compile", "jar", null, new DefaultArtifactHandler() ); + Artifact b3 = new DefaultArtifact( "groupid", "a3", VersionRange.createFromVersion("1.0"), "compile", "jar", null, new DefaultArtifactHandler() ); + rmi.addArtifacts( new HashSet<Artifact>( Arrays.asList( b2, b3))); + assertEquals( 3, rmi.getArtifacts().size()); + int compile = 0; + int test = 0; + for ( Artifact artifact : rmi.getArtifacts() ) + { + if ( Artifact.SCOPE_COMPILE.equals( artifact.getScope() )) compile++; + else test++; + } + assertEquals(2, compile); + assertEquals(1, test); + } +} \ No newline at end of file