You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/04/21 19:15:28 UTC
[camel] 05/06: CAMEL-17998: camel-jbang - fat-jar command
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 3e9987823e9e2743eb79fb3fb7ff6d6d063ef8f8
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 21 19:00:59 2022 +0200
CAMEL-17998: camel-jbang - fat-jar command
---
.../dsl/jbang/core/commands/CamelJBangMain.java | 3 +-
.../camel/dsl/jbang/core/commands/Create.java | 1 +
.../core/commands/{FarJar.java => FatJar.java} | 73 ++++++++++++++++------
.../core/commands/{Create.java => Package.java} | 4 +-
.../camel/dsl/jbang/core/commands/Project.java | 1 +
5 files changed, 60 insertions(+), 22 deletions(-)
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
index ed8eaa64caa..aeb1ea2624f 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
@@ -37,8 +37,9 @@ public class CamelJBangMain implements Callable<Integer> {
.addSubcommand("languages", new SearchLanguages())
.addSubcommand("others", new SearchOthers()))
.addSubcommand("create", new CommandLine(new Create())
- .addSubcommand("fat-jar", new FarJar())
.addSubcommand("project", new Project()))
+ .addSubcommand("package", new CommandLine(new Package())
+ .addSubcommand("fat-jar", new FatJar()))
.addSubcommand("generate", new CommandLine(new CodeGenerator())
.addSubcommand("rest", new CodeRestGenerator()));
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Create.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Create.java
index 83f47576bca..b0d4ce4787d 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Create.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Create.java
@@ -23,6 +23,7 @@ import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@Command(name = "create", description = "Creates Maven Project (use --help)")
+@Deprecated
class Create implements Callable<Integer> {
//CHECKSTYLE:OFF
@Option(names = { "-h", "--help" }, usageHelp = true, description = "Display the help and sub-commands")
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/FarJar.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/FatJar.java
similarity index 70%
rename from dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/FarJar.java
rename to dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/FatJar.java
index cfa5e58580b..ee327ac9140 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/FarJar.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/FatJar.java
@@ -18,8 +18,10 @@ package org.apache.camel.dsl.jbang.core.commands;
import java.io.File;
import java.io.FileInputStream;
+import java.io.InputStream;
import java.net.URI;
import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -37,7 +39,7 @@ import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@Command(name = "fat-jar", description = "Package application as a single fat-jar")
-class FarJar implements Callable<Integer> {
+class FatJar implements Callable<Integer> {
//CHECKSTYLE:OFF
@Option(names = { "-h", "--help" }, usageHelp = true, description = "Display the help and sub-commands")
@@ -52,7 +54,7 @@ class FarJar implements Callable<Integer> {
return 0;
}
- File target = new File("target/camel-app/lib");
+ File target = new File("target/camel-app/");
FileUtil.removeDir(target);
target.mkdirs();
@@ -60,8 +62,26 @@ class FarJar implements Callable<Integer> {
ClassLoader parentCL = KameletMain.class.getClassLoader();
final GroovyClassLoader gcl = new GroovyClassLoader(parentCL);
+ // copy settings also (but not as hidden file)
+ File out = new File(target, Run.RUN_SETTINGS_FILE.substring(1));
+ safeCopy(settings, out, true);
+
+ // routes
+ target = new File("target/camel-app/");
+ copyFiles(settings, target);
+
+ // log4j configuration
+ InputStream is = FatJar.class.getResourceAsStream("/log4j2.properties");
+ safeCopy(is, new File(target, "log4j2.properties"), false);
+
List<String> lines = Files.readAllLines(settings.toPath());
+ // include log4j dependencies
+ lines.add("dependency=org.apache.logging.log4j:log4j-api:2.17.2");
+ lines.add("dependency=org.apache.logging.log4j:log4j-core:2.17.2");
+ lines.add("dependency=org.apache.logging.log4j:log4j-slf4j-impl:2.17.2");
+ lines.add("dependency=org.fusesource.jansi:jansi:2.4.0");
+
// include camel-kamelet-main as its a core dependency needed
Optional<MavenGav> first = lines.stream()
.filter(l -> l.startsWith("dependency="))
@@ -73,6 +93,9 @@ class FarJar implements Callable<Integer> {
lines.add(0, "dependency=mvn:org.apache.camel:camel-kamelet-main:" + v);
}
+ // JARs should be in lib sub-folder
+ target = new File("target/camel-app/lib");
+ target.mkdirs();
for (String l : lines) {
if (l.startsWith("dependency=")) {
l = StringHelper.after(l, "dependency=");
@@ -89,15 +112,6 @@ class FarJar implements Callable<Integer> {
}
}
- // copy route files
- // TODO: 3rd party .jar should be in lib
- target = new File("target/camel-app/");
- copyFiles(settings, target);
-
- // copy settings also (but not as hidden file)
- File out = new File(target, Run.RUN_SETTINGS_FILE.substring(1));
- Files.copy(settings.toPath(), out.toPath());
-
return 0;
}
@@ -111,11 +125,9 @@ class FarJar implements Callable<Integer> {
for (String f : files.split(",")) {
if (f.startsWith("file:")) {
f = f.substring(5);
- File s = new File(f);
- if (s.exists() && s.isFile()) {
- File out = new File(target, s.getName());
- Files.copy(s.toPath(), out.toPath());
- }
+ File source = new File(f);
+ File out = new File(target, source.getName());
+ safeCopy(source, out, true);
}
}
}
@@ -125,9 +137,32 @@ class FarJar implements Callable<Integer> {
for (URI u : uris) {
File f = new File(u.toURL().getFile());
File out = new File(target, f.getName());
- if (!out.exists()) {
- Files.copy(f.toPath(), out.toPath());
- }
+ safeCopy(f, out, false);
+ }
+ }
+
+ private void safeCopy(File source, File target, boolean override) throws Exception {
+ if (!source.exists()) {
+ return;
+ }
+
+ if (!target.exists()) {
+ Files.copy(source.toPath(), target.toPath());
+ } else if (override) {
+ Files.copy(source.toPath(), target.toPath(),
+ StandardCopyOption.REPLACE_EXISTING);
+ }
+ }
+
+ private void safeCopy(InputStream source, File target, boolean override) throws Exception {
+ if (source == null) {
+ return;
+ }
+
+ if (!target.exists()) {
+ Files.copy(source, target.toPath());
+ } else if (override) {
+ Files.copy(source, target.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Create.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Package.java
similarity index 91%
copy from dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Create.java
copy to dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Package.java
index 83f47576bca..82f63be3c43 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Create.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Package.java
@@ -22,8 +22,8 @@ import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
-@Command(name = "create", description = "Creates Maven Project (use --help)")
-class Create implements Callable<Integer> {
+@Command(name = "package", description = "Package Camel application (use --help)")
+class Package implements Callable<Integer> {
//CHECKSTYLE:OFF
@Option(names = { "-h", "--help" }, usageHelp = true, description = "Display the help and sub-commands")
private boolean helpRequested = false;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Project.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Project.java
index 416cc7eff17..6d041040ee1 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Project.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Project.java
@@ -41,6 +41,7 @@ import org.apache.camel.dsl.jbang.core.generator.QuarkusGenerator;
import picocli.CommandLine;
@CommandLine.Command(name = "create-project", description = "Creates Camel-Quarkus project")
+@Deprecated
public class Project implements Callable<Integer> {
private static final String PACKAGE_REGEX = "package\\s+([a-zA_Z_][\\.\\w]*);";