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 2025/05/17 11:27:21 UTC
(camel) 01/01: CAMEL-22079: camel-jbang - Move DEPS modeline parsing out of camel-k
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch modeline
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0b3cb06e1df738dbeec84d9ea17b8f96f389e332
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat May 17 10:37:33 2025 +0200
CAMEL-22079: camel-jbang - Move DEPS modeline parsing out of camel-k
---
.../apache/camel/catalog/others/dsl-modeline.json | 4 +-
.../java/org/apache/camel/spi/ModelineFactory.java | 5 +-
dsl/camel-dsl-modeline/pom.xml | 4 +-
.../services/org/apache/camel/other.properties | 4 +-
.../src/generated/resources/dsl-modeline.json | 4 +-
.../src/main/docs/dsl-modeline.adoc | 17 +++--
...delineParser.java => CamelKModelineParser.java} | 46 ++----------
.../camel/dsl/modeline/DefaultModelineFactory.java | 29 +++++---
...odelineParser.java => JBangModelineParser.java} | 86 ++++++----------------
.../apache/camel/dsl/modeline/ModelineParser.java | 5 +-
...rserTest.java => CamelKModelineParserTest.java} | 33 +--------
.../dsl/modeline/JBangModelineParserTest.java | 86 ++++++++++++++++++++++
.../apache/camel/dsl/jbang/core/commands/Run.java | 10 ---
.../java/org/apache/camel/main/KameletMain.java | 4 -
.../camel/main/download/DependencyDownloader.java | 8 --
.../camel/main/download/DownloadListener.java | 7 --
.../main/download/DownloadModelineParser.java | 42 -----------
.../main/download/MavenDependencyDownloader.java | 8 --
18 files changed, 156 insertions(+), 246 deletions(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/dsl-modeline.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/dsl-modeline.json
index a9799d405cf..721d83d135f 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/dsl-modeline.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/dsl-modeline.json
@@ -3,8 +3,8 @@
"kind": "other",
"name": "dsl-modeline",
"title": "DSL Modeline",
- "description": "Camel DSL Camel K modeline",
- "deprecated": true,
+ "description": "Camel DSL modeline",
+ "deprecated": false,
"firstVersion": "3.16.0",
"label": "dsl",
"supportLevel": "Stable",
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ModelineFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/ModelineFactory.java
index 3107c22ab09..1209c2d87b9 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ModelineFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ModelineFactory.java
@@ -17,9 +17,8 @@
package org.apache.camel.spi;
/**
- * Factory for parsing camel-k modeline when running Camel standalone with DSLs.
+ * Factory for parsing modeline when running Camel JBang standalone with DSLs.
*/
-@Deprecated(since = "4.10")
public interface ModelineFactory {
/**
@@ -28,7 +27,7 @@ public interface ModelineFactory {
String FACTORY = "dsl-modeline-factory";
/**
- * Parses the resources to discover camel-k modeline snippets which is parsed and processed.
+ * Parses the resources to discover camel-jbang modeline snippets which is parsed and processed.
*
* @param resource the resource with Camel routes such as a yaml, xml or java source file.
* @throws Exception is thrown if error parsing
diff --git a/dsl/camel-dsl-modeline/pom.xml b/dsl/camel-dsl-modeline/pom.xml
index c93bbd91cc5..7633ba50188 100644
--- a/dsl/camel-dsl-modeline/pom.xml
+++ b/dsl/camel-dsl-modeline/pom.xml
@@ -29,8 +29,8 @@
<artifactId>camel-dsl-modeline</artifactId>
<packaging>jar</packaging>
- <name>Camel :: DSL :: Modeline (deprecated)</name>
- <description>Camel DSL Camel K modeline</description>
+ <name>Camel :: DSL :: Modeline</name>
+ <description>Camel DSL modeline</description>
<properties>
<firstVersion>3.16.0</firstVersion>
diff --git a/dsl/camel-dsl-modeline/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/dsl/camel-dsl-modeline/src/generated/resources/META-INF/services/org/apache/camel/other.properties
index 3fb1d0f1afc..71418d0b97b 100644
--- a/dsl/camel-dsl-modeline/src/generated/resources/META-INF/services/org/apache/camel/other.properties
+++ b/dsl/camel-dsl-modeline/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -3,5 +3,5 @@ name=dsl-modeline
groupId=org.apache.camel
artifactId=camel-dsl-modeline
version=4.12.0-SNAPSHOT
-projectName=Camel :: DSL :: Modeline (deprecated)
-projectDescription=Camel DSL Camel K modeline
+projectName=Camel :: DSL :: Modeline
+projectDescription=Camel DSL modeline
diff --git a/dsl/camel-dsl-modeline/src/generated/resources/dsl-modeline.json b/dsl/camel-dsl-modeline/src/generated/resources/dsl-modeline.json
index a9799d405cf..721d83d135f 100644
--- a/dsl/camel-dsl-modeline/src/generated/resources/dsl-modeline.json
+++ b/dsl/camel-dsl-modeline/src/generated/resources/dsl-modeline.json
@@ -3,8 +3,8 @@
"kind": "other",
"name": "dsl-modeline",
"title": "DSL Modeline",
- "description": "Camel DSL Camel K modeline",
- "deprecated": true,
+ "description": "Camel DSL modeline",
+ "deprecated": false,
"firstVersion": "3.16.0",
"label": "dsl",
"supportLevel": "Stable",
diff --git a/dsl/camel-dsl-modeline/src/main/docs/dsl-modeline.adoc b/dsl/camel-dsl-modeline/src/main/docs/dsl-modeline.adoc
index 33eee8fac06..93622555a50 100644
--- a/dsl/camel-dsl-modeline/src/main/docs/dsl-modeline.adoc
+++ b/dsl/camel-dsl-modeline/src/main/docs/dsl-modeline.adoc
@@ -1,19 +1,24 @@
-= DSL Modeline Component (deprecated)
+= DSL Modeline Component
:doctitle: DSL Modeline
:shortname: dsl-modeline
:artifactid: camel-dsl-modeline
-:description: Camel DSL Camel K modeline
+:description: Camel DSL modeline
:since: 3.16
-:supportlevel: Stable-deprecated
-:deprecated: *deprecated*
+:supportlevel: Stable
:tabs-sync-option:
//Manually maintained attributes
:group: DSL
*Since Camel {since}*
+== Camel JBang
+
+There is support for https://www.jbang.dev/documentation/guide/latest/dependencies.html[JBang dependencies] using the `//DEPS` comments style.
+
== Camel K
+*Deprecated*
+
Support for Camel K style modeline when running Camel standalone such as with Camel JBang.
The following traits is supported:
@@ -22,7 +27,3 @@ The following traits is supported:
- env
- name
- property
-
-== Camel JBang
-
-There is also support for https://www.jbang.dev/documentation/guide/latest/dependencies.html[JBang dependencies] using the `//DEPS` comments style.
diff --git a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineParser.java b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/CamelKModelineParser.java
similarity index 67%
copy from dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineParser.java
copy to dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/CamelKModelineParser.java
index 232468c7998..551d37086d8 100644
--- a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineParser.java
+++ b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/CamelKModelineParser.java
@@ -31,16 +31,15 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Deprecated(since = "4.10")
-public class DefaultModelineParser implements ModelineParser {
+public class CamelKModelineParser implements ModelineParser {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultModelineParser.class);
+ private static final Logger LOG = LoggerFactory.getLogger(CamelKModelineParser.class);
public static final String MODELINE_START = "camel-k:";
- public static final String JBANG_DEPS_START = "//DEPS";
private final Map<String, Trait> traits = new HashMap<>();
- public DefaultModelineParser() {
+ public CamelKModelineParser() {
// add known traits
Trait trait = new DependencyTrait();
this.traits.put(trait.getName(), trait);
@@ -102,41 +101,6 @@ public class DefaultModelineParser implements ModelineParser {
}
}
- if (line.startsWith(JBANG_DEPS_START)) {
- line = line.substring(JBANG_DEPS_START.length()).trim();
- line = line.trim();
- Trait dep = traits.get("dependency");
- String[] parts = StringQuoteHelper.splitSafeQuote(line, ' ', false);
- for (String part : parts) {
- part = part.trim();
- if (part.endsWith("@pom")) {
- // skip @pom
- continue;
- }
- // in case DEPS uses jbang ${ } style that refer to JVM system properties
- if (part.contains("${") && part.contains("}")) {
- String target = StringHelper.between(part, "${", "}");
- String value = StringHelper.before(target, ":", target);
- if (target.contains(":")) {
- String def = StringHelper.after(target, ":");
- value = System.getProperty(value, def);
- } else {
- String found = System.getProperty(value);
- if (found == null) {
- throw new IllegalArgumentException(
- "Cannot find JVM system property: " + value + " for dependency: " + part);
- }
- value = found;
- }
- part = part.replace("${" + target + "}", value);
- }
- CamelContextCustomizer customizer = dep.parseTrait(resource, part);
- if (customizer != null) {
- answer.add(customizer);
- }
- }
- }
-
return answer;
}
@@ -152,7 +116,7 @@ public class DefaultModelineParser implements ModelineParser {
return false;
}
line = removeLeadingComments(line);
- return line.startsWith(MODELINE_START) || line.startsWith(JBANG_DEPS_START);
+ return line.startsWith(MODELINE_START);
}
private static String removeLeadingComments(String line) {
@@ -161,7 +125,7 @@ public class DefaultModelineParser implements ModelineParser {
}
line = line.trim();
- while (!line.startsWith(JBANG_DEPS_START) && line.startsWith("/") || line.startsWith("#")) {
+ while (line.startsWith("/") || line.startsWith("#")) {
line = line.substring(1);
}
diff --git a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineFactory.java b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineFactory.java
index 03c89fce64b..da617f8152e 100644
--- a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineFactory.java
+++ b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineFactory.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.dsl.modeline;
+import java.util.ArrayList;
import java.util.List;
import org.apache.camel.CamelContext;
@@ -31,12 +32,13 @@ import org.apache.camel.spi.annotations.JdkService;
import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.service.ServiceSupport;
-@Deprecated(since = "4.10")
@JdkService(ModelineFactory.FACTORY)
public class DefaultModelineFactory extends ServiceSupport
implements ModelineFactory, CamelContextAware, NonManagedService, StaticService {
private CamelContext camelContext;
+ private final ModelineParser camelk = new CamelKModelineParser();
+ private final ModelineParser jbang = new JBangModelineParser();
private ModelineParser parser;
@Override
@@ -51,7 +53,16 @@ public class DefaultModelineFactory extends ServiceSupport
@Override
public void parseModeline(Resource resource) throws Exception {
- List<CamelContextCustomizer> customizers = parser.parse(resource);
+ List<CamelContextCustomizer> customizers = new ArrayList<>();
+ customizers.addAll(camelk.parse(resource));
+ customizers.addAll(jbang.parse(resource));
+ // custom parser which may return null
+ if (parser != null) {
+ var list = parser.parse(resource);
+ if (list != null) {
+ customizers.addAll(list);
+ }
+ }
customizers.forEach(this::onConfigureModeline);
}
@@ -66,25 +77,19 @@ public class DefaultModelineFactory extends ServiceSupport
@Override
protected void doInit() throws Exception {
+ // is there any custom modeline parser
parser = CamelContextHelper.findSingleByType(camelContext, ModelineParser.class);
- if (parser == null) {
- parser = createModelineParser();
- }
- // the property is both a trait and a source but we must use the same instance
+ // the property is both a trait and a source, but we must use the same instance
// so we need to get the existing instance from the properties component to
// add to the parser as its trait
PropertiesComponent pc = camelContext.getPropertiesComponent();
PropertiesSource ps = pc.getPropertiesSource("property");
- if (ps instanceof Trait) {
- parser.addTrait((Trait) ps);
+ if (ps instanceof Trait trait) {
+ camelk.addTrait(trait);
}
}
- protected ModelineParser createModelineParser() {
- return new DefaultModelineParser();
- }
-
@Override
public String toString() {
return "camel-dsl-modeline";
diff --git a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineParser.java b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/JBangModelineParser.java
similarity index 66%
rename from dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineParser.java
rename to dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/JBangModelineParser.java
index 232468c7998..f55fd40b894 100644
--- a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/DefaultModelineParser.java
+++ b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/JBangModelineParser.java
@@ -19,41 +19,26 @@ package org.apache.camel.dsl.modeline;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.apache.camel.spi.CamelContextCustomizer;
+import org.apache.camel.spi.DependencyStrategy;
import org.apache.camel.spi.Resource;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.StringQuoteHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-@Deprecated(since = "4.10")
-public class DefaultModelineParser implements ModelineParser {
+public class JBangModelineParser implements ModelineParser {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultModelineParser.class);
-
- public static final String MODELINE_START = "camel-k:";
public static final String JBANG_DEPS_START = "//DEPS";
- private final Map<String, Trait> traits = new HashMap<>();
-
- public DefaultModelineParser() {
- // add known traits
- Trait trait = new DependencyTrait();
- this.traits.put(trait.getName(), trait);
- // property trait is added from the default mode line factory
- trait = new NameTrait();
- this.traits.put(trait.getName(), trait);
- trait = new EnvTrait();
- this.traits.put(trait.getName(), trait);
+ @Override
+ public void addTrait(Trait trait) {
+ throw new UnsupportedOperationException("Cannot add traits");
}
@Override
- public void addTrait(Trait trait) {
- this.traits.put(trait.getName(), trait);
+ public Trait parseModeline(Resource resource, String key, String value) {
+ return null;
}
@Override
@@ -74,6 +59,16 @@ public class DefaultModelineParser implements ModelineParser {
return answer;
}
+ @Override
+ public boolean isModeline(String line) {
+ // the line must be a comment and start with //DEPS
+ if (line == null) {
+ return false;
+ }
+ line = removeLeadingComments(line);
+ return line.startsWith(JBANG_DEPS_START);
+ }
+
protected List<CamelContextCustomizer> parse(Resource resource, String line) {
if (!isModeline(line)) {
return Collections.emptyList();
@@ -82,30 +77,9 @@ public class DefaultModelineParser implements ModelineParser {
List<CamelContextCustomizer> answer = new ArrayList<>();
- if (line.startsWith(MODELINE_START)) {
- LOG.warn("Using modeline is deprecated. {}: {}", resource.getLocation(), line);
-
- line = line.substring(MODELINE_START.length()).trim();
- // split into key value pairs
- String[] parts = StringQuoteHelper.splitSafeQuote(line, ' ', false);
- for (String part : parts) {
- part = part.trim();
- String key = StringHelper.before(part, "=");
- String value = StringHelper.after(part, "=");
- Trait trait = parseModeline(resource, key, value);
- if (trait != null) {
- CamelContextCustomizer customizer = trait.parseTrait(resource, value);
- if (customizer != null) {
- answer.add(customizer);
- }
- }
- }
- }
-
if (line.startsWith(JBANG_DEPS_START)) {
line = line.substring(JBANG_DEPS_START.length()).trim();
line = line.trim();
- Trait dep = traits.get("dependency");
String[] parts = StringQuoteHelper.splitSafeQuote(line, ' ', false);
for (String part : parts) {
part = part.trim();
@@ -130,31 +104,19 @@ public class DefaultModelineParser implements ModelineParser {
}
part = part.replace("${" + target + "}", value);
}
- CamelContextCustomizer customizer = dep.parseTrait(resource, part);
- if (customizer != null) {
- answer.add(customizer);
- }
+ final String dep = part;
+ CamelContextCustomizer customizer = camelContext -> {
+ for (DependencyStrategy ds : camelContext.getRegistry().findByType(DependencyStrategy.class)) {
+ ds.onDependency(dep);
+ }
+ };
+ answer.add(customizer);
}
}
return answer;
}
- @Override
- public Trait parseModeline(Resource resource, String key, String value) {
- return traits.get(key);
- }
-
- @Override
- public boolean isModeline(String line) {
- // the line must be a comment and start with camel-k
- if (line == null) {
- return false;
- }
- line = removeLeadingComments(line);
- return line.startsWith(MODELINE_START) || line.startsWith(JBANG_DEPS_START);
- }
-
private static String removeLeadingComments(String line) {
if (line == null) {
return null;
diff --git a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/ModelineParser.java b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/ModelineParser.java
index 6d8145937d2..5d49361f952 100644
--- a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/ModelineParser.java
+++ b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/ModelineParser.java
@@ -24,7 +24,6 @@ import org.apache.camel.spi.Resource;
/**
* Modeline parser
*/
-@Deprecated(since = "4.10")
public interface ModelineParser {
/**
@@ -32,6 +31,7 @@ public interface ModelineParser {
*
* @param trait the trait
*/
+ @Deprecated
void addTrait(Trait trait);
/**
@@ -43,7 +43,7 @@ public interface ModelineParser {
boolean isModeline(String line);
/**
- * Parses the resource to detect modelines and process them via {@link Trait}s
+ * Parses the resource to detect modelines
*
* @param resource the source code resource
* @return list of {@link CamelContextCustomizer} customizers that processes the modelines
@@ -59,5 +59,6 @@ public interface ModelineParser {
* @param value the mode line value
* @return the trait that handles the detected modeline
*/
+ @Deprecated
Trait parseModeline(Resource resource, String key, String value);
}
diff --git a/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/ModelineParserTest.java b/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/CamelKModelineParserTest.java
similarity index 86%
rename from dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/ModelineParserTest.java
rename to dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/CamelKModelineParserTest.java
index 941336521f7..5e398bf8ca5 100644
--- a/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/ModelineParserTest.java
+++ b/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/CamelKModelineParserTest.java
@@ -28,7 +28,8 @@ import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-public class ModelineParserTest extends CamelTestSupport {
+@Deprecated
+public class CamelKModelineParserTest extends CamelTestSupport {
private final List<String> deps = new ArrayList<>();
@@ -81,20 +82,6 @@ public class ModelineParserTest extends CamelTestSupport {
Assertions.assertEquals("mvn:org.my:application:1.0", deps.get(0));
}
- @Test
- public void testModelineSingleJBangDependency() throws Exception {
- context.start();
-
- Assertions.assertEquals(0, deps.size());
-
- String line = "//DEPS org.my:application:1.0";
- ModelineFactory factory = resolveModelineFactory(context);
- factory.parseModeline(ResourceHelper.fromString(null, line));
-
- Assertions.assertEquals(1, deps.size());
- Assertions.assertEquals("org.my:application:1.0", deps.get(0));
- }
-
@Test
public void testModelineMultiDependency() throws Exception {
context.start();
@@ -111,22 +98,6 @@ public class ModelineParserTest extends CamelTestSupport {
Assertions.assertEquals("mvn:com.foo:myapp:2.1", deps.get(1));
}
- @Test
- public void testModelineMultiJBangDependency() throws Exception {
- context.start();
- deps.clear();
-
- Assertions.assertEquals(0, deps.size());
-
- String line = "//DEPS org.my:application:1.0 com.foo:myapp:2.1";
- ModelineFactory factory = resolveModelineFactory(context);
- factory.parseModeline(ResourceHelper.fromString(null, line));
-
- Assertions.assertEquals(2, deps.size());
- Assertions.assertEquals("org.my:application:1.0", deps.get(0));
- Assertions.assertEquals("com.foo:myapp:2.1", deps.get(1));
- }
-
@Test
public void testModelineSingleProperty() throws Exception {
context.start();
diff --git a/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/JBangModelineParserTest.java b/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/JBangModelineParserTest.java
new file mode 100644
index 00000000000..84f7c3e3c97
--- /dev/null
+++ b/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/JBangModelineParserTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.modeline;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.DependencyStrategy;
+import org.apache.camel.spi.ModelineFactory;
+import org.apache.camel.support.PluginHelper;
+import org.apache.camel.support.ResourceHelper;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class JBangModelineParserTest extends CamelTestSupport {
+
+ private final List<String> deps = new ArrayList<>();
+
+ private ModelineFactory resolveModelineFactory(CamelContext camelContext) {
+ return PluginHelper.getModelineFactory(camelContext);
+ }
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ context.getRegistry().bind("myDep", new DependencyStrategy() {
+ @Override
+ public void onDependency(String dependency) {
+ deps.add(dependency);
+ }
+ });
+ return context;
+ }
+
+ @Override
+ public boolean isUseRouteBuilder() {
+ return false;
+ }
+
+ @Test
+ public void testModelineSingleJBangDependency() throws Exception {
+ context.start();
+
+ Assertions.assertEquals(0, deps.size());
+
+ String line = "//DEPS org.my:application:1.0";
+ ModelineFactory factory = resolveModelineFactory(context);
+ factory.parseModeline(ResourceHelper.fromString(null, line));
+
+ Assertions.assertEquals(1, deps.size());
+ Assertions.assertEquals("org.my:application:1.0", deps.get(0));
+ }
+
+ @Test
+ public void testModelineMultiJBangDependency() throws Exception {
+ context.start();
+ deps.clear();
+
+ Assertions.assertEquals(0, deps.size());
+
+ String line = "//DEPS org.my:application:1.0 com.foo:myapp:2.1";
+ ModelineFactory factory = resolveModelineFactory(context);
+ factory.parseModeline(ResourceHelper.fromString(null, line));
+
+ Assertions.assertEquals(2, deps.size());
+ Assertions.assertEquals("org.my:application:1.0", deps.get(0));
+ Assertions.assertEquals("com.foo:myapp:2.1", deps.get(1));
+ }
+
+}
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 880efd7658c..f6b8835ac74 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
@@ -2005,7 +2005,6 @@ public class Run extends CamelCommand {
final Set<String> downloaded = new HashSet<>();
final Set<String> repos = new HashSet<>();
final Set<String> kamelets = new HashSet<>();
- final Set<String> modelines = new HashSet<>();
@Override
public void onDownloadDependency(String groupId, String artifactId, String version) {
@@ -2040,15 +2039,6 @@ public class Run extends CamelCommand {
kamelets.add(name);
}
}
-
- @Override
- public void onLoadingModeline(String key, String value) {
- String line = key + "=" + value;
- if (!modelines.contains(line)) {
- writeSettings("modeline", line);
- modelines.add(line);
- }
- }
}
static class FilesConsumer extends ParameterConsumer<Run> {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 6c90f07e70b..272f554893d 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -60,7 +60,6 @@ import org.apache.camel.main.download.DependencyDownloaderTransformerResolver;
import org.apache.camel.main.download.DependencyDownloaderUriFactoryResolver;
import org.apache.camel.main.download.DownloadEndpointStrategy;
import org.apache.camel.main.download.DownloadListener;
-import org.apache.camel.main.download.DownloadModelineParser;
import org.apache.camel.main.download.ExportPropertiesParser;
import org.apache.camel.main.download.ExportTypeConverter;
import org.apache.camel.main.download.JavaKnownImportsDownloader;
@@ -669,9 +668,6 @@ public class KameletMain extends MainCommandLineSupport {
} else {
answer.addService(new DependencyDownloaderKamelet(answer));
}
- answer.getCamelContextExtension().getRegistry().bind(DownloadModelineParser.class.getSimpleName(),
- new DownloadModelineParser(answer));
-
answer.addService(new DependencyDownloaderPropertiesComponent(answer, knownDeps, silent));
// reloader
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 044bf8cc726..840ca8b136b 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
@@ -184,14 +184,6 @@ public interface DependencyDownloader extends CamelContextAware, StaticService {
*/
void onLoadingKamelet(String name);
- /**
- * When a modeline is being loaded
- *
- * @param key modeline key
- * @param value modeline value
- */
- void onLoadingModeline(String key, String value);
-
/**
* Gets download record for a given artifact
*
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 842aa0c5ceb..0efe17adea0 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
@@ -52,11 +52,4 @@ public interface DownloadListener {
// noop
}
- /**
- * When a modeline is detected
- */
- default void onLoadingModeline(String key, String value) {
- // noop
- }
-
}
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadModelineParser.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadModelineParser.java
deleted file mode 100644
index 340f94a38c4..00000000000
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadModelineParser.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.main.download;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.dsl.modeline.DefaultModelineParser;
-import org.apache.camel.dsl.modeline.Trait;
-import org.apache.camel.spi.Resource;
-
-public class DownloadModelineParser extends DefaultModelineParser {
-
- private final DependencyDownloader downloader;
-
- public DownloadModelineParser(CamelContext camelContext) {
- super();
- this.downloader = camelContext.hasService(DependencyDownloader.class);
- }
-
- @Override
- public Trait parseModeline(Resource resource, String key, String value) {
- Trait answer = super.parseModeline(resource, key, value);
- if (downloader != null && answer != null) {
- // only trigger for modelines for traits that can parse
- downloader.onLoadingModeline(key, value);
- }
- return answer;
- }
-}
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 dd7c219e2cf..7b1954c33fd 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
@@ -465,14 +465,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
}
}
- @Override
- public void onLoadingModeline(String key, String value) {
- // trigger listener
- for (DownloadListener listener : downloadListeners) {
- listener.onLoadingModeline(key, value);
- }
- }
-
@Override
public DownloadRecord getDownloadState(String groupId, String artifactId, String version) {
return downloadRecords.get(groupId + ":" + artifactId + ":" + version);