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


Reply via email to