You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2017/03/06 12:22:24 UTC

svn commit: r1785640 - in /aries/trunk/esa-maven-plugin: ./ src/main/java/org/apache/aries/plugin/esa/ src/test/java/org/apache/aries/plugin/esa/ src/test/java/org/apache/aries/plugin/esa/stubs/ src/test/remote-repo/org/apache/maven/test/maven-artifact...

Author: davidb
Date: Mon Mar  6 12:22:24 2017
New Revision: 1785640

URL: http://svn.apache.org/viewvc?rev=1785640&view=rev
Log:
ARIES-1650 Maven plugin no longer includes non-bundle artifacts

Patch applied on behalf of Wouter Bancken and Tom de Wolf with many thanks!
This closes https://github.com/apache/aries/pull/63

Added:
    aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub11.java
    aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/
    aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/
    aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.jar   (with props)
    aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.pom
    aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-exclude-non-bundle-jars/
    aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-exclude-non-bundle-jars/plugin-config.xml
Modified:
    aries/trunk/esa-maven-plugin/pom.xml
    aries/trunk/esa-maven-plugin/src/main/java/org/apache/aries/plugin/esa/EsaMojo.java
    aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/EsaMojoTest.java
    aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub10.java
    aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-test-with-pgk-type/target/maven-esa-test-1.0-SNAPSHOT.jar

Modified: aries/trunk/esa-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/pom.xml?rev=1785640&r1=1785639&r2=1785640&view=diff
==============================================================================
--- aries/trunk/esa-maven-plugin/pom.xml (original)
+++ aries/trunk/esa-maven-plugin/pom.xml Mon Mar  6 12:22:24 2017
@@ -43,6 +43,11 @@
     
     <dependencies>
         <dependency>
+            <groupId>org.apache.aries</groupId>
+            <artifactId>org.apache.aries.util</artifactId>
+            <version>1.1.3</version>
+        </dependency>
+        <dependency>
             <groupId>biz.aQute</groupId>
             <artifactId>bndlib</artifactId>
             <version>0.0.357</version>

Modified: aries/trunk/esa-maven-plugin/src/main/java/org/apache/aries/plugin/esa/EsaMojo.java
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/src/main/java/org/apache/aries/plugin/esa/EsaMojo.java?rev=1785640&r1=1785639&r2=1785640&view=diff
==============================================================================
--- aries/trunk/esa-maven-plugin/src/main/java/org/apache/aries/plugin/esa/EsaMojo.java (original)
+++ aries/trunk/esa-maven-plugin/src/main/java/org/apache/aries/plugin/esa/EsaMojo.java Mon Mar  6 12:22:24 2017
@@ -19,6 +19,8 @@ package org.apache.aries.plugin.esa;
  * under the License.
  */
 
+import static org.apache.aries.util.manifest.BundleManifest.fromBundle;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
@@ -28,6 +30,7 @@ import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.aries.util.manifest.BundleManifest;
 import org.apache.maven.archiver.PomPropertiesUtil;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.AbstractMojo;
@@ -239,7 +242,9 @@ public class EsaMojo
                     artifacts.add(project.getArtifact());
                 }
                 
-                artifacts = selectArtifacts(artifacts);
+                artifacts = selectArtifactsInCompileOrRuntimeScope(artifacts);
+                artifacts = selectNonJarArtifactsAndBundles(artifacts);
+
                 int cnt = 0;
                 for (Artifact artifact : artifacts) {                    
                     if (!artifact.isOptional() /*&& filter.include(artifact)*/) {
@@ -424,9 +429,8 @@ public class EsaMojo
             }
 
             // Write the SUBSYSTEM-CONTENT
-            // TODO: check that the dependencies are bundles (currently, the converter
-            // will throw an exception)
             Set<Artifact> artifacts = null;
+
             switch (EsaManifestContent.valueOf(manifestContent)) {
                 case content:
                     // only include the direct dependencies in the content
@@ -439,8 +443,10 @@ public class EsaMojo
                 default:
                     throw new MojoExecutionException("Invalid configuration for <manifestContent/>.  Valid values are content and all." );
             }
-            
-            artifacts = selectArtifacts(artifacts);
+
+            artifacts = selectArtifactsInCompileOrRuntimeScope(artifacts);
+            artifacts = selectNonJarArtifactsAndBundles(artifacts);
+
             Iterator<Artifact> iter = artifacts.iterator();
 
             FileUtils.fileAppend(fileName, Constants.SUBSYSTEM_CONTENT + ": ");
@@ -551,7 +557,7 @@ public class EsaMojo
     /**
      * Return non-pom artifacts in 'compile' or 'runtime' scope only.
      */
-    private Set<Artifact> selectArtifacts(Set<Artifact> artifacts) 
+    private Set<Artifact> selectArtifactsInCompileOrRuntimeScope(Set<Artifact> artifacts)
     {
         Set<Artifact> selected = new LinkedHashSet<Artifact>();
         for (Artifact artifact : artifacts) {
@@ -567,6 +573,31 @@ public class EsaMojo
         return selected;
     }
 
+    /**
+     * Returns bundles and artifacts that aren't JARs
+     */
+    private Set<Artifact> selectNonJarArtifactsAndBundles(Set<Artifact> artifacts)
+    {
+        Set<Artifact> selected = new LinkedHashSet<Artifact>();
+        for (Artifact artifact : artifacts) {
+            if (isNonJarOrOSGiBundle(artifact)) {
+                selected.add(artifact);
+            } else {
+                getLog().warn("Skipping dependency on non-bundle JAR! groupId: " + artifact.getGroupId() + " artifactId:" + artifact.getArtifactId());
+            }
+        }
+        return selected;
+    }
+
+    private boolean isNonJarOrOSGiBundle(Artifact artifact) {
+        if(!artifact.getFile().getName().endsWith(".jar")){
+            return true;
+        } else {
+            BundleManifest manifest = fromBundle(artifact.getFile());
+            return manifest != null && manifest.getSymbolicName() != null;
+        }
+    }
+
     private void includeSharedResources() throws MojoExecutionException {
         try
         {

Modified: aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/EsaMojoTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/EsaMojoTest.java?rev=1785640&r1=1785639&r2=1785640&view=diff
==============================================================================
--- aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/EsaMojoTest.java (original)
+++ aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/EsaMojoTest.java Mon Mar  6 12:22:24 2017
@@ -30,12 +30,12 @@ import java.util.Map;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
 
-import aQute.lib.osgi.Analyzer;
-
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.codehaus.plexus.archiver.zip.ZipEntry;
 import org.codehaus.plexus.archiver.zip.ZipFile;
 
+import aQute.lib.osgi.Analyzer;
+
 /**
  * @author <a href="mailto:aramirez@apache.org">Allan Ramirez</a>
  */
@@ -414,6 +414,52 @@ public class EsaMojoTest
 
     }
 
+    public void testBasicEsaWithoutNonBundleJars()
+            throws Exception
+    {
+        File testPom = new File( getBasedir(),
+                "target/test-classes/unit/basic-esa-exclude-non-bundle-jars/plugin-config.xml" );
+
+        EsaMojo mojo = ( EsaMojo ) lookupMojo( "esa", testPom );
+
+        assertNotNull( mojo );
+
+        String finalName = ( String ) getVariableValueFromObject( mojo, "finalName" );
+
+        String workDir = ( String ) getVariableValueFromObject( mojo, "workDirectory" );
+
+        String outputDir = ( String ) getVariableValueFromObject( mojo, "outputDirectory" );
+
+        mojo.execute();
+
+        //check the generated esa file
+        File esaFile = new File( outputDir, finalName + ".esa" );
+
+        assertTrue( esaFile.exists() );
+
+        //expected files/directories inside the esa file
+        List expectedFiles = new ArrayList();
+
+        expectedFiles.add( "maven-artifact01-1.0-SNAPSHOT.jar" );
+        expectedFiles.add( "META-INF/maven/org.apache.maven.test/maven-esa-test/pom.properties" );
+        expectedFiles.add( "META-INF/maven/org.apache.maven.test/maven-esa-test/pom.xml" );
+        expectedFiles.add( "META-INF/maven/org.apache.maven.test/maven-esa-test/" );
+        expectedFiles.add( "META-INF/maven/org.apache.maven.test/" );
+        expectedFiles.add( "META-INF/maven/" );
+        expectedFiles.add( "META-INF/" );
+        expectedFiles.add( "OSGI-INF/SUBSYSTEM.MF" );
+        expectedFiles.add( "OSGI-INF/" );
+
+        ZipFile esa = new ZipFile( esaFile );
+
+        Enumeration entries = esa.getEntries();
+
+        assertTrue( entries.hasMoreElements() );
+
+        int missing = getSizeOfExpectedFiles(entries, expectedFiles);
+        assertEquals("Missing files: " + expectedFiles,  0, missing);
+    }
+
     public void testArchiveContentConfigurationSubsystemContentBundles()
         throws Exception
     {

Modified: aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub10.java
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub10.java?rev=1785640&r1=1785639&r2=1785640&view=diff
==============================================================================
--- aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub10.java (original)
+++ aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub10.java Mon Mar  6 12:22:24 2017
@@ -1,4 +1,22 @@
 package org.apache.aries.plugin.esa.stubs;
+/*
+ * 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.util.LinkedHashSet;
 import java.util.Set;

Added: aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub11.java
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub11.java?rev=1785640&view=auto
==============================================================================
--- aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub11.java (added)
+++ aries/trunk/esa-maven-plugin/src/test/java/org/apache/aries/plugin/esa/stubs/EsaMavenProjectStub11.java Mon Mar  6 12:22:24 2017
@@ -0,0 +1,39 @@
+package org.apache.aries.plugin.esa.stubs;
+/*
+ * 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.File;
+import java.util.HashSet;
+import java.util.Set;
+
+public class EsaMavenProjectStub11 extends EsaMavenProjectStub
+	{
+		public File getFile()
+		{
+			return new File( getBasedir(), "src/test/resources/unit/basic-esa-exclude-non-bundle-jars/plugin-config.xml" );
+		}
+
+		public Set getArtifacts()
+		{
+			Set artifacts = new HashSet();
+			artifacts.add( createArtifact( "org.apache.maven.test", "maven-artifact01", "1.0-SNAPSHOT", false ) );
+			artifacts.add( createArtifact( "org.apache.maven.test", "maven-artifact05-no-bundle-manifest", "1.1-SNAPSHOT", false ));
+			return artifacts;
+		}
+}

Added: aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.jar
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.jar?rev=1785640&view=auto
==============================================================================
Binary file - no diff available.

Propchange: aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.pom
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.pom?rev=1785640&view=auto
==============================================================================
--- aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.pom (added)
+++ aries/trunk/esa-maven-plugin/src/test/remote-repo/org/apache/maven/test/maven-artifact05-no-bundle-manifest/1.1-SNAPSHOT/maven-artifact05-no-bundle-manifest-1.1-SNAPSHOT.pom Mon Mar  6 12:22:24 2017
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.test</groupId>
+  <artifactId>maven-artifact05-no-bundle-manifest</artifactId>
+  <version>1.1-SNAPSHOT</version>
+</project>

Added: aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-exclude-non-bundle-jars/plugin-config.xml
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-exclude-non-bundle-jars/plugin-config.xml?rev=1785640&view=auto
==============================================================================
--- aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-exclude-non-bundle-jars/plugin-config.xml (added)
+++ aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-exclude-non-bundle-jars/plugin-config.xml Mon Mar  6 12:22:24 2017
@@ -0,0 +1,45 @@
+<!--
+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.
+-->
+
+<project>
+	<build>
+		<plugins>
+			<plugin>
+				<artifactId>esa-maven-plugin</artifactId>
+				<configuration>
+					<esaSourceDirectory>${basedir}/src/test/resources/unit/basic-esa-exclude-non-bundle-jars/src/main/esa</esaSourceDirectory>
+					<generateManifest>true</generateManifest>
+					<archiveContent>all</archiveContent>
+					<instructions>
+					</instructions>
+					<addMavenDescriptor>true</addMavenDescriptor>
+					<includeEmptyDirs>true</includeEmptyDirs>
+					<workDirectory>${basedir}/target/unit/basic-esa-exclude-non-bundle-jars/target/basic-esa-exclude-non-bundle-jars
+					</workDirectory>
+					<sharedResources>${basedir}/target/unit/basic-esa-exclude-non-bundle-jars/target/maven-shared-archive-resources
+					</sharedResources>
+					<outputDirectory>${basedir}/target/unit/basic-esa-exclude-non-bundle-jars/target
+					</outputDirectory>
+					<finalName>test-esa-exclude-non-bundle-jars</finalName>
+					<project implementation="org.apache.aries.plugin.esa.stubs.EsaMavenProjectStub11" />
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>

Modified: aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-test-with-pgk-type/target/maven-esa-test-1.0-SNAPSHOT.jar
URL: http://svn.apache.org/viewvc/aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-test-with-pgk-type/target/maven-esa-test-1.0-SNAPSHOT.jar?rev=1785640&r1=1785639&r2=1785640&view=diff
==============================================================================
Binary files aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-test-with-pgk-type/target/maven-esa-test-1.0-SNAPSHOT.jar (original) and aries/trunk/esa-maven-plugin/src/test/resources/unit/basic-esa-test-with-pgk-type/target/maven-esa-test-1.0-SNAPSHOT.jar Mon Mar  6 12:22:24 2017 differ