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 <claus.ib...@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);

Reply via email to