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 <[email protected]> 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]*);";
