This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.20.x by this push:
     new 4364d9cacd4 CAMEL-19108: camel-jbang - Export to support local lib JAR 
via systemPath in Maven pom.xml
4364d9cacd4 is described below

commit 4364d9cacd4a14ca2de875dc1cfa1f15f2ccd006
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Apr 12 10:08:16 2023 +0200

    CAMEL-19108: camel-jbang - Export to support local lib JAR via systemPath 
in Maven pom.xml
---
 .../dsl/jbang/core/commands/ExportBaseCommand.java | 65 +++++++++++++++++-----
 1 file changed, 50 insertions(+), 15 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index db51f45b1dd..871a002cc1c 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -35,6 +35,8 @@ import java.util.Properties;
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.function.Function;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -655,30 +657,63 @@ abstract class ExportBaseCommand extends CamelCommand {
 
     protected static MavenGav parseMavenGav(String dep) {
         MavenGav gav;
-        if (dep.startsWith("lib:")) {
+        if (dep.startsWith("lib:") && dep.endsWith(".jar")) {
             // lib:commons-lang3-3.12.0.jar
             String n = dep.substring(4);
-            if (n.endsWith(".jar")) {
-                n = n.substring(0, n.length() - 4);
-            }
-            String v = "1.0";
-            String a = n;
-            int pos = n.lastIndexOf("-");
-            if (pos != -1) {
-                a = n.substring(0, pos);
-                v = n.substring(pos + 1);
+            n = n.substring(0, n.length() - 4);
+            // scan inside JAR in META-INF/maven and find pom.properties file
+            gav = parseLocalJar(n);
+            if (gav == null) {
+                // okay JAR was not maven build
+                gav = new MavenGav();
+                String v = "1.0";
+                String a = n;
+                int pos = n.lastIndexOf("-");
+                if (pos != -1) {
+                    a = n.substring(0, pos);
+                    v = n.substring(pos + 1);
+                }
+                gav.setGroupId("local");
+                gav.setArtifactId(a);
+                gav.setVersion(v);
+                gav.setPackaging("lib");
             }
-            gav = new MavenGav();
-            gav.setGroupId("custom");
-            gav.setArtifactId(a);
-            gav.setVersion(v);
-            gav.setPackaging("lib");
         } else {
             gav = MavenGav.parseGav(dep);
         }
         return gav;
     }
 
+    private static MavenGav parseLocalJar(String dep) {
+        File file = new File(dep + ".jar");
+        if (!file.isFile() || !file.exists()) {
+            return null;
+        }
+
+        try {
+            JarFile jf = new JarFile(file);
+            Optional<JarEntry> je = jf.stream().filter(e -> 
e.getName().startsWith("META-INF/maven/")
+                    && e.getName().endsWith("/pom.properties")).findFirst();
+            if (je.isPresent()) {
+                JarEntry e = je.get();
+                InputStream is = jf.getInputStream(e);
+                Properties prop = new Properties();
+                prop.load(is);
+                IOHelper.close(is);
+                MavenGav gav = new MavenGav();
+                gav.setGroupId(prop.getProperty("groupId"));
+                gav.setArtifactId(prop.getProperty("artifactId"));
+                gav.setVersion(prop.getProperty("version"));
+                gav.setPackaging("lib");
+                return gav;
+            }
+        } catch (Exception e) {
+            // ignore
+        }
+
+        return null;
+    }
+
     protected void copyLocalLibDependencies(Set<String> deps) throws Exception 
{
         for (String d : deps) {
             if (d.startsWith("lib:")) {

Reply via email to