This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.x by this push:
new 9fd342972c8 CAMEL-19108: camel-jbang - Export to support local lib JAR
via systemPath in Maven pom.xml
9fd342972c8 is described below
commit 9fd342972c852af3de9739cfcb5a2a1af48867a4
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 75281378e8f..45731475489 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:")) {