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 7bbb7b7c2adb7441142d3826d458d11c95c72c46 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon May 2 13:31:30 2022 +0200 CAMEL-18029: camel-jbang - Uber Jar - Specify custom properties file to override what was packaged --- .../apache/camel/main/MainCommandLineSupport.java | 10 +++- .../org/apache/camel/main/uberjar/UberJarMain.java | 65 +++++++++++++++++++++- 2 files changed, 70 insertions(+), 5 deletions(-) diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainCommandLineSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/MainCommandLineSupport.java index b0afbf5a2c7..839f1b6eefd 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/MainCommandLineSupport.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/MainCommandLineSupport.java @@ -83,6 +83,11 @@ public abstract class MainCommandLineSupport extends MainSupport { if (initOptionsDone) { return; } + addInitialOptions(); + initOptionsDone = true; + } + + protected void addInitialOptions() { addOption(new Option("h", "help", "Displays the help screen") { protected void doProcess(String arg, LinkedList<String> remainingArgs) { showOptions(); @@ -156,7 +161,6 @@ public abstract class MainCommandLineSupport extends MainSupport { setPropertyPlaceholderLocations(parameter); } }); - initOptionsDone = true; } /** @@ -276,7 +280,7 @@ public abstract class MainCommandLineSupport extends MainSupport { private final String fullName; private final String description; - protected Option(String abbreviation, String fullName, String description) { + public Option(String abbreviation, String fullName, String description) { this.abbreviation = "-" + abbreviation; this.fullName = "-" + fullName; this.description = description; @@ -312,7 +316,7 @@ public abstract class MainCommandLineSupport extends MainSupport { public abstract class ParameterOption extends Option { private final String parameterName; - protected ParameterOption(String abbreviation, String fullName, String description, String parameterName) { + public ParameterOption(String abbreviation, String fullName, String description, String parameterName) { super(abbreviation, fullName, description); this.parameterName = parameterName; } diff --git a/dsl/camel-uberjar-main/src/main/java/org/apache/camel/main/uberjar/UberJarMain.java b/dsl/camel-uberjar-main/src/main/java/org/apache/camel/main/uberjar/UberJarMain.java index ae9fd9cdfb6..2b14e46b1e7 100644 --- a/dsl/camel-uberjar-main/src/main/java/org/apache/camel/main/uberjar/UberJarMain.java +++ b/dsl/camel-uberjar-main/src/main/java/org/apache/camel/main/uberjar/UberJarMain.java @@ -19,9 +19,12 @@ package org.apache.camel.main.uberjar; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; +import java.nio.file.FileSystems; +import java.util.LinkedList; import org.apache.camel.main.KameletMain; import org.apache.camel.util.OrderedProperties; +import org.apache.camel.util.StringHelper; /** * Main class to run Camel as an uber-jar packaged by camel-jbang @@ -30,16 +33,74 @@ public class UberJarMain extends KameletMain { public static final String RUN_SETTINGS_FILE = "camel-jbang-run.properties"; + private UberJarMain main; + public static void main(String[] args) throws Exception { UberJarMain main = new UberJarMain(); - main.run(); // run without args as they are for legacy camel-main - int code = main.getExitCode(); + main.main = main; + int code = main.run(args); if (code != 0) { System.exit(code); } // normal exit } + @Override + public void showOptionsHeader() { + System.out.println("Apache Camel (UberJar) takes the following options"); + System.out.println(); + } + + @Override + protected void addInitialOptions() { + addOption(new Option("h", "help", "Displays the help screen") { + protected void doProcess(String arg, LinkedList<String> remainingArgs) { + showOptions(); + completed(); + } + }); + addOption(new ParameterOption("prop", "property", "Additional properties (override existing)", "property") { + @Override + protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) { + if (arg.equals("-prop") || arg.equals("-property")) { + String k = StringHelper.before(parameter, "="); + String v = StringHelper.after(parameter, "="); + if (k != null && v != null) { + main.addArgumentProperty(k, v); + } + } + } + }); + addOption(new ParameterOption( + "properties", "properties", + "Load properties file for route placeholders (ex. /path/to/file.properties", + "properties") { + protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) { + if (arg.equals("-properties") && parameter != null) { + String[] filesLocation = parameter.split(","); + StringBuilder locations = new StringBuilder(); + for (String file : filesLocation) { + if (!file.startsWith("file:")) { + if (!file.startsWith("/")) { + file = FileSystems.getDefault().getPath("").toAbsolutePath() + File.separator + file; + } + file = "file://" + file; + } + locations.append(file).append(","); + } + // there may be existing properties + String loc = main.getInitialProperties().getProperty("camel.component.properties.location"); + if (loc != null) { + loc = loc + "," + locations; + } else { + loc = locations.toString(); + } + main.addInitialProperty("camel.component.properties.location", loc); + } + } + }); + } + @Override protected ClassLoader createApplicationContextClassLoader() { // use the classloader that loaded this class