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
The following commit(s) were added to refs/heads/main by this push:
new c9018877654 CAMEL-18823: camel-jbang - Add dependency copy command.
c9018877654 is described below
commit c90188776544cb30730f50da9ff8e440e7e0e303
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Dec 19 08:25:57 2022 +0100
CAMEL-18823: camel-jbang - Add dependency copy command.
---
.../ROOT/pages/camel-3x-upgrade-guide-3_21.adoc | 12 +++
.../modules/ROOT/pages/camel-3x-upgrade-guide.adoc | 1 +
.../modules/ROOT/pages/camel-jbang.adoc | 30 +++++-
.../dsl/jbang/core/commands/CamelJBangMain.java | 5 +-
.../dsl/jbang/core/commands/DependencyCommand.java | 36 +++++++
.../dsl/jbang/core/commands/DependencyCopy.java | 107 +++++++++++++++++++++
.../{DependencyTree.java => DependencyList.java} | 6 +-
7 files changed, 189 insertions(+), 8 deletions(-)
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_21.adoc
b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_21.adoc
new file mode 100644
index 00000000000..c2dd69ba82c
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_21.adoc
@@ -0,0 +1,12 @@
+= Apache Camel 3.x Upgrade Guide
+
+This document is for helping you upgrade your Apache Camel application
+from Camel 3.x to 3.y. For example if you are upgrading Camel 3.0 to 3.2, then
you should follow the guides
+from both 3.0 to 3.1 and 3.1 to 3.2.
+
+== Upgrading Camel 3.20 to 3.21
+
+=== camel-jbang
+
+The command `camel dependencies` has been renamed to `camel dependency`.
+
diff --git a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
index 0cc3616710d..4d7726ae722 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
@@ -29,3 +29,4 @@ You can find upgrade guide for each release in the following
pages:
- xref:camel-3x-upgrade-guide-3_18.adoc[Upgrade guide 3.17 -> 3.18]
- xref:camel-3x-upgrade-guide-3_19.adoc[Upgrade guide 3.18 -> 3.19]
- xref:camel-3x-upgrade-guide-3_20.adoc[Upgrade guide 3.19 -> 3.20]
+- xref:camel-3x-upgrade-guide-3_21.adoc[Upgrade guide 3.20 -> 3.21]
diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
index 0ce9a508fae..7dc872dd7ab 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
@@ -1354,7 +1354,7 @@ you do not have to use a build system like Maven or
Gradle to add every Camel co
as a dependency.
However, you may want to know what dependencies are required to run the Camel
integration.
-To see this, you can use the `dependencies` command. The command output does
not output a detailed
+To see this, you can use the `dependency` command. The command output does not
output a detailed
tree, such as `mvn dependencies:tree`, as the output is intended to list which
Camel components,
and other JARs needed (when using Kamelets).
@@ -1362,7 +1362,7 @@ The dependency output by default is _vanilla_ Apache
Camel with the camel-main a
[source,bash]
----
-camel dependencies
+camel dependency
org.apache.camel:camel-dsl-modeline:3.20.0
org.apache.camel:camel-health:3.20.0
org.apache.camel:camel-kamelet:3.20.0
@@ -1381,7 +1381,7 @@ You can also specify the output should be in _Maven
format_ as shown:
[source,bash]
----
-camel dependencies --output=maven
+camel dependency --output=maven
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-main</artifactId>
@@ -1443,7 +1443,7 @@ You can also choose the target runtime as either
_quarkus_ or _spring-boot_ as s
[source,bash]
----
-camel dependencies --runtime=spring-boot
+camel dependency --runtime=spring-boot
org.springframework.boot:spring-boot-starter-actuator:2.7.5
org.springframework.boot:spring-boot-starter-web:2.7.5
org.apache.camel.springboot:camel-spring-boot-engine-starter:3.20.0
@@ -1458,6 +1458,28 @@ org.apache.camel.kamelets:camel-kamelets-utils:0.9.3
org.apache.camel.kamelets:camel-kamelets:0.9.3
----
+=== Copying dependency JARs to a specific directory
+
+You can use the `camel dependency copy` command to copy the required JARs to a
specific folder.
+This command reuses Maven by invoking the `mvn dependency:copy-dependencies`
command.
+
+By default, the JARs are copied to `lib` folder:
+
+[source,bash]
+----
+camel dependency copy
+ls lib
+camel-api-3.21.0.jar camel-health-3.21.0.jar
camel-yaml-dsl-3.21.0.jar
+camel-base-3.21.0.jar camel-main-3.21.0.jar
camel-yaml-dsl-common-3.21.0.jar
+camel-base-engine-3.21.0.jar camel-management-api-3.21.0.jar
camel-yaml-dsl-deserializers-3.21.0.jar
+camel-core-engine-3.21.0.jar camel-rest-3.21.0.jar
jakarta.activation-api-1.2.2.jar
+camel-core-languages-3.21.0.jar camel-support-3.21.0.jar
jakarta.xml.bind-api-2.3.3.jar
+camel-core-model-3.21.0.jar camel-timer-3.21.0.jar
slf4j-api-1.7.36.jar
+camel-core-processor-3.21.0.jar camel-tooling-model-3.21.0.jar
snakeyaml-engine-2.3.jar
+camel-core-reifier-3.21.0.jar camel-util-3.21.0.jar
+camel-dsl-support-3.21.0.jar camel-util-json-3.21.0.jar
+----
+
== Creating Projects
You can _export_ your Camel JBang integration to a traditional Java based
project such as Spring Boot or Quarkus.
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 49ed050991b..9c487c6800c 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
@@ -103,6 +103,9 @@ public class CamelJBangMain implements Callable<Integer> {
.addSubcommand("thread-dump", new CommandLine(new
CamelThreadDump(main)))
.addSubcommand("logger", new CommandLine(new
LoggerAction(main)))
.addSubcommand("gc", new CommandLine(new
CamelGCAction(main))))
+ .addSubcommand("dependency", new CommandLine(new
DependencyCommand(main))
+ .addSubcommand("list", new CommandLine(new
DependencyList(main)))
+ .addSubcommand("copy", new CommandLine(new
DependencyCopy(main))))
.addSubcommand("generate", new CommandLine(new
CodeGenerator(main))
.addSubcommand("rest", new CommandLine(new
CodeRestGenerator(main))))
.addSubcommand("catalog", new CommandLine(new
CatalogCommand(main))
@@ -116,7 +119,7 @@ public class CamelJBangMain implements Callable<Integer> {
.addSubcommand("hawtio", new CommandLine(new Hawtio(main)))
.addSubcommand("bind", new CommandLine(new Bind(main)))
.addSubcommand("pipe", new CommandLine(new Pipe(main)))
- .addSubcommand("dependencies", new CommandLine(new
DependencyTree(main)))
+ .addSubcommand("dependencies", new CommandLine(new
DependencyList(main)))
.addSubcommand("export", new CommandLine(new Export(main)))
.addSubcommand("completion", new CommandLine(new
Complete(main)));
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyCommand.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyCommand.java
new file mode 100644
index 00000000000..e34619741ec
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyCommand.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands;
+
+import picocli.CommandLine;
+
[email protected](name = "dependency",
+ description = "Displays all Camel dependencies required
to run (use dependency --help to see sub commands)")
+public class DependencyCommand extends CamelCommand {
+
+ public DependencyCommand(CamelJBangMain main) {
+ super(main);
+ }
+
+ @Override
+ public Integer call() throws Exception {
+ // default to list
+ new CommandLine(new DependencyList(getMain())).execute();
+ return 0;
+ }
+
+}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyCopy.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyCopy.java
new file mode 100644
index 00000000000..bd033fa954f
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyCopy.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands;
+
+import java.io.File;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
+import org.apache.camel.util.CamelCaseOrderedProperties;
+import org.apache.camel.util.FileUtil;
+import picocli.CommandLine;
+
[email protected](name = "copy",
+ description = "Copies all Camel dependencies required to
run to a specific directory")
+public class DependencyCopy extends Export {
+
+ protected static final String EXPORT_DIR = ".camel-jbang/export";
+
+ @CommandLine.Option(names = { "--output-directory" }, description =
"Directory where dependencies should be copied",
+ defaultValue = "lib", required = true)
+ protected String outputDirectory;
+
+ public DependencyCopy(CamelJBangMain main) {
+ super(main);
+ }
+
+ @Override
+ protected Integer export() throws Exception {
+ this.quiet = true; // be quiet and generate from fresh data to ensure
the output is up-to-date
+
+ Integer answer = doExport();
+ if (answer == 0) {
+ File buildDir = new File(EXPORT_DIR);
+ Process p = Runtime.getRuntime()
+ .exec("mvn dependency:copy-dependencies
-DincludeScope=compile
-DexcludeGroupIds=org.fusesource.jansi,org.apache.logging.log4j
-DoutputDirectory=../../"
+ + outputDirectory,
+ null,
+ buildDir);
+ boolean done = p.waitFor(30, TimeUnit.SECONDS);
+ if (!done) {
+ answer = 1;
+ }
+ // cleanup dir after complete
+ FileUtil.removeDir(buildDir);
+ }
+ return answer;
+ }
+
+ protected Integer doExport() throws Exception {
+ // read runtime and gav from profile if not configured
+ File profile = new File(getProfile() + ".properties");
+ if (profile.exists()) {
+ Properties prop = new CamelCaseOrderedProperties();
+ RuntimeUtil.loadProperties(prop, profile);
+ if (this.runtime == null) {
+ this.runtime = prop.getProperty("camel.jbang.runtime");
+ }
+ if (this.gav == null) {
+ this.gav = prop.getProperty("camel.jbang.gav");
+ }
+ // allow configuring versions from profile
+ this.javaVersion = prop.getProperty("camel.jbang.javaVersion",
this.javaVersion);
+ this.kameletsVersion =
prop.getProperty("camel.jbang.kameletsVersion", this.kameletsVersion);
+ this.localKameletDir =
prop.getProperty("camel.jbang.localKameletDir", this.localKameletDir);
+ this.quarkusGroupId =
prop.getProperty("camel.jbang.quarkusGroupId", this.quarkusGroupId);
+ this.quarkusArtifactId =
prop.getProperty("camel.jbang.quarkusArtifactId", this.quarkusArtifactId);
+ this.quarkusVersion =
prop.getProperty("camel.jbang.quarkusVersion", this.quarkusVersion);
+ this.springBootVersion =
prop.getProperty("camel.jbang.springBootVersion", this.springBootVersion);
+ }
+
+ // use temporary export dir
+ exportDir = EXPORT_DIR;
+ if (gav == null) {
+ gav = "org.apache.camel:camel-jbang-dummy:1.0";
+ }
+ if (runtime == null) {
+ runtime = "camel-main";
+ }
+
+ if ("spring-boot".equals(runtime) ||
"camel-spring-boot".equals(runtime)) {
+ return export(new ExportSpringBoot(getMain()));
+ } else if ("quarkus".equals(runtime) ||
"camel-quarkus".equals(runtime)) {
+ return export(new ExportQuarkus(getMain()));
+ } else if ("main".equals(runtime) || "camel-main".equals(runtime)) {
+ return export(new ExportCamelMain(getMain()));
+ } else {
+ System.err.println("Unknown runtime: " + runtime);
+ return 1;
+ }
+ }
+
+}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyTree.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyList.java
similarity index 98%
rename from
dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyTree.java
rename to
dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyList.java
index 040150d1123..3dc475b2cad 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyTree.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyList.java
@@ -35,16 +35,16 @@ import org.apache.camel.util.CamelCaseOrderedProperties;
import org.apache.camel.util.FileUtil;
import picocli.CommandLine;
[email protected](name = "dependencies",
[email protected](name = "list",
description = "Displays all Camel dependencies required
to run")
-public class DependencyTree extends Export {
+public class DependencyList extends Export {
protected static final String EXPORT_DIR = ".camel-jbang/export";
@CommandLine.Option(names = { "--output" }, description = "Output format
(gav or maven)", defaultValue = "gav")
protected String output;
- public DependencyTree(CamelJBangMain main) {
+ public DependencyList(CamelJBangMain main) {
super(main);
}