Repository: karaf
Updated Branches:
  refs/heads/master 47193f74f -> 6ecc2ae47


[KARAF-5004] Detect dependency type in the assembly plugin


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/6ecc2ae4
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/6ecc2ae4
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/6ecc2ae4

Branch: refs/heads/master
Commit: 6ecc2ae47509ce8f3bd74827e6197ad8cd1b02c4
Parents: 47193f7
Author: Guillaume Nodet <[email protected]>
Authored: Wed Mar 1 12:06:02 2017 +0100
Committer: Guillaume Nodet <[email protected]>
Committed: Wed Jul 19 13:38:36 2017 +0200

----------------------------------------------------------------------
 .../org/apache/karaf/tooling/AssemblyMojo.java  | 71 ++++++++++++++++++--
 1 file changed, 65 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/6ecc2ae4/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
----------------------------------------------------------------------
diff --git 
a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
 
b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
index 018cb7f..6671614 100644
--- 
a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
+++ 
b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
@@ -18,6 +18,9 @@
  */
 package org.apache.karaf.tooling;
 
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -31,7 +34,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Properties;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
 import java.util.stream.Collectors;
+import java.util.zip.ZipFile;
 
 import org.apache.karaf.profile.assembly.Builder;
 import org.apache.karaf.tooling.utils.IoUtils;
@@ -49,6 +55,7 @@ import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.eclipse.aether.repository.WorkspaceReader;
+import org.osgi.framework.Constants;
 
 /**
  * Creates a customized Karaf distribution by installing features and setting 
up
@@ -411,22 +418,21 @@ public class AssemblyMojo extends MojoSupport {
             default:
                 continue;
             }
-            if ("kar".equals(artifact.getType())) {
-                String uri = artifactToMvn(artifact);
+            String uri = artifactToMvn(artifact);
+            String type = getType(artifact);
+            if ("kar".equals(type)) {
                 switch (stage) {
                 case Startup:   startupKars.add(uri); break;
                 case Boot:      bootKars.add(uri); break;
                 case Installed: installedKars.add(uri); break;
                 }
-            } else if ("features".equals(artifact.getClassifier()) || 
"karaf".equals(artifact.getClassifier())) {
-                String uri = artifactToMvn(artifact);
+            } else if ("features".equals(type)) {
                 switch (stage) {
                 case Startup:   startupRepositories.add(uri); break;
                 case Boot:      bootRepositories.add(uri); break;
                 case Installed: installedRepositories.add(uri); break;
                 }
-            } else if ("jar".equals(artifact.getType()) || 
"bundle".equals(artifact.getType())) {
-                String uri = artifactToMvn(artifact);
+            } else if ("bundle".equals(type)) {
                 switch (stage) {
                 case Startup:   startupBundles.add(uri); break;
                 case Boot:      bootBundles.add(uri); break;
@@ -557,6 +563,59 @@ public class AssemblyMojo extends MojoSupport {
         }
     }
 
+    private String getType(Artifact artifact) {
+        // Identify kars
+        if ("kar".equals(artifact.getType())) {
+            return "kar";
+        }
+        if ("zip".equals(artifact.getType())) {
+            try (ZipFile zip = new ZipFile(artifact.getFile())) {
+                if (zip.getEntry("META-INF/KARAF.MF") != null) {
+                    return "kar";
+                }
+            } catch (IOException e) {
+                // Ignore
+            }
+        }
+        // Identify features
+        if ("features".equals(artifact.getClassifier())) {
+            return "features";
+        }
+        if ("xml".equals(artifact.getType())) {
+            try (InputStream is = new FileInputStream(artifact.getFile())) {
+                XMLInputFactory xif = XMLInputFactory.newFactory();
+                xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true);
+                XMLStreamReader r = xif.createXMLStreamReader(is);
+                r.nextTag();
+                QName name = r.getName();
+                if (name.getLocalPart().equals("features")
+                        && (name.getNamespaceURI().isEmpty()
+                                || 
name.getNamespaceURI().startsWith("http://karaf.apache.org/xmlns/features/";))) {
+                    return "features";
+                }
+
+            } catch (Exception e) {
+                // Ignore
+            }
+        }
+        // Identify bundles
+        if ("bundle".equals(artifact.getType())) {
+            return "bundle";
+        }
+        if ("jar".equals(artifact.getType())) {
+            try (JarFile jar = new JarFile(artifact.getFile())) {
+                Manifest manifest = jar.getManifest();
+                if (manifest != null
+                        && 
manifest.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME) != null) {
+                    return "bundle";
+                }
+            } catch (Exception e) {
+                // Ignore
+            }
+        }
+        return "unknown";
+    }
+
     private String artifactToMvn(Artifact artifact) throws 
MojoExecutionException {
         String uri;
 

Reply via email to