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/11/10 16:24:19 UTC
[camel] branch main updated: CAMEL-18710: camel-jbang - Only include kamelets JARs if kamelets are in use
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 51a6bf30eef CAMEL-18710: camel-jbang - Only include kamelets JARs if kamelets are in use
51a6bf30eef is described below
commit 51a6bf30eefe3e6932aad9467b7222160b98f507
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Nov 10 17:22:10 2022 +0100
CAMEL-18710: camel-jbang - Only include kamelets JARs if kamelets are in use
---
.../camel/dsl/jbang/core/commands/ExportBaseCommand.java | 10 ++++++----
.../java/org/apache/camel/dsl/jbang/core/commands/Run.java | 9 +++++++++
.../apache/camel/main/download/DependencyDownloader.java | 11 +++++++----
.../camel/main/download/DependencyDownloaderKamelet.java | 13 +++++++++++++
.../org/apache/camel/main/download/DownloadListener.java | 7 +++++++
.../camel/main/download/MavenDependencyDownloader.java | 8 ++++++++
6 files changed, 50 insertions(+), 8 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 88f7cb9aa90..d3e6eb49071 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
@@ -196,6 +196,7 @@ abstract class ExportBaseCommand extends CamelCommand {
}
List<String> lines = Files.readAllLines(settings.toPath());
+ boolean kamelets = lines.stream().anyMatch(l -> l.startsWith("kamelet="));
for (String line : lines) {
if (line.startsWith("dependency=")) {
String v = StringHelper.after(line, "dependency=");
@@ -203,11 +204,12 @@ abstract class ExportBaseCommand extends CamelCommand {
// we let quarkus compile
boolean skip = v == null || v.contains("org.apache.camel:camel-core-languages")
|| v.contains("org.apache.camel:camel-java-joor-dsl")
- || v.contains("camel-endpointdsl");
+ || v.contains("camel-endpointdsl")
+ || !kamelets && v.contains("org.apache.camel:camel-kamelet");
if (!skip) {
answer.add(v);
}
- if (v != null && v.contains("org.apache.camel:camel-kamelet")) {
+ if (kamelets && v != null && v.contains("org.apache.camel:camel-kamelet")) {
// include yaml-dsl and kamelet catalog if we use kamelets
answer.add("camel:yaml-dsl");
answer.add("org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
@@ -217,7 +219,7 @@ abstract class ExportBaseCommand extends CamelCommand {
String deps = StringHelper.after(line, "camel.jbang.dependencies=");
for (String d : deps.split(",")) {
answer.add(d.trim());
- if (d.contains("org.apache.camel:camel-kamelet")) {
+ if (kamelets && d.contains("org.apache.camel:camel-kamelet")) {
// include yaml-dsl and kamelet catalog if we use kamelets
answer.add("camel:yaml-dsl");
answer.add("org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
@@ -250,7 +252,7 @@ abstract class ExportBaseCommand extends CamelCommand {
}
}
}
- } else if (line.startsWith("camel.component.kamelet.location=")) {
+ } else if (kamelets && line.startsWith("camel.component.kamelet.location=")) {
// include kamelet catalog if we use kamelets
answer.add("mvn:org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
answer.add("mvn:org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index dfccbb856ff..41fe9f132ec 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -309,6 +309,7 @@ class Run extends CamelCommand {
final KameletMain main = createMainInstance();
final Set<String> downloaded = new HashSet<>();
+ final Set<String> kamelets = new HashSet<>();
main.setRepos(repos);
main.setDownload(download);
main.setFresh(fresh);
@@ -332,6 +333,14 @@ class Run extends CamelCommand {
// we want to register everything
onDownloadDependency(groupId, artifactId, version);
}
+
+ @Override
+ public void onLoadingKamelet(String name) {
+ if (!kamelets.contains(name)) {
+ writeSettings("kamelet", name);
+ kamelets.add(name);
+ }
+ }
});
main.setAppName("Apache Camel (JBang)");
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java
index 9296d653da2..3c3bb7ef622 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java
@@ -62,8 +62,6 @@ public interface DependencyDownloader extends CamelContextAware, StaticService {
/**
* Configure location of Maven settings.xml file
- *
- * @param mavenSettings
*/
void setMavenSettings(String mavenSettings);
@@ -71,8 +69,6 @@ public interface DependencyDownloader extends CamelContextAware, StaticService {
/**
* Configure location of Maven settings-security.xml file
- *
- * @param mavenSettingsSecurity
*/
void setMavenSettingsSecurity(String mavenSettingsSecurity);
@@ -124,4 +120,11 @@ public interface DependencyDownloader extends CamelContextAware, StaticService {
*/
boolean alreadyOnClasspath(String groupId, String artifactId, String version);
+ /**
+ * When a kamelet is being loaded
+ *
+ * @param name the kamelet name
+ */
+ void onLoadingKamelet(String name);
+
}
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderKamelet.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderKamelet.java
index baaa9f25dca..2a51675e01f 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderKamelet.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderKamelet.java
@@ -30,6 +30,7 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.kamelet.KameletComponent;
import org.apache.camel.dsl.yaml.YamlRoutesBuilderLoaderSupport;
import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
+import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport;
import org.apache.camel.spi.Resource;
import org.apache.camel.spi.RouteTemplateLoaderListener;
import org.apache.camel.support.service.ServiceHelper;
@@ -53,11 +54,19 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
private static final String KAMELETS_VERSION = "0.9.2";
private KameletDependencyDownloader downloader;
private CamelContext camelContext;
+ private volatile boolean kameletsInUse;
public DependencyDownloaderKamelet(CamelContext camelContext) {
this.camelContext = camelContext;
}
+ /**
+ * Whether any kamelets are in use.
+ */
+ public boolean isKameletsInUse() {
+ return kameletsInUse;
+ }
+
@Override
public CamelContext getCamelContext() {
return camelContext;
@@ -143,6 +152,10 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
@Override
protected RouteBuilder builder(YamlDeserializationContext ctx, Node node) {
+ Node name = nodeAt(node, "/metadata/name");
+ String text = YamlDeserializerSupport.asText(name);
+ downloader.onLoadingKamelet(text);
+
final List<String> dependencies = new ArrayList<>();
// always include kamelets-utils
dependencies.add("org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
index 28f62644a7a..482bd1b889f 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
@@ -38,4 +38,11 @@ public interface DownloadListener {
*/
void onAlreadyDownloadedDependency(String groupId, String artifactId, String version);
+ /**
+ * When a kamelet is being downloaded (typically loaded directly from camel-kamelets JAR)
+ */
+ default void onLoadingKamelet(String name) {
+ // noop
+ }
+
}
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
index eaf5ecba2d5..3a3d4699104 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
@@ -471,6 +471,14 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
return false;
}
+ @Override
+ public void onLoadingKamelet(String name) {
+ // trigger listener
+ for (DownloadListener listener : downloadListeners) {
+ listener.onLoadingKamelet(name);
+ }
+ }
+
@Override
protected void doBuild() throws Exception {
if (classLoader == null && camelContext != null) {