This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karaf.git


The following commit(s) were added to refs/heads/main by this push:
     new 37dcf334 Ref #346: Allow to auto detect the version of transitive 
dependencies (#349)
37dcf334 is described below

commit 37dcf33444d46c22944c2a0e6a39cf81b780517c
Author: Nicolas Filotto <[email protected]>
AuthorDate: Fri Jun 14 11:06:31 2024 +0200

    Ref #346: Allow to auto detect the version of transitive dependencies (#349)
    
    ## Motivation
    
    Get rid of the hard-coded versions in the features file to ease camel 
migrations and maintenance.
    
    ## Modifications
    
    * Add a new goal to the maven plugin to replace the placeholder 
`${auto-detect-version}` with the most recent version of the corresponding 
dependency that could be found as part of the dependencies of the bundles of 
the current feature for which the version is already known.
    * Remove the usage of the `depends-maven-plugin` as it is not used by the 
plugin
    * Configure the `maven-shade-plugin` to have the dependencies of the 
wrappers in the pom file
    * Allow providing an alias to find the version of a bundle by seeking the 
version of another artifact with  
`${auto-detect-version:alias=groupId/artifactId}`
    * Replace the hard-coded versions in the `camel-features.xml` with the 
placeholder
    * Remove the useless file `tests/camel-test-blueprint/route.xml` (not 
related to the initial topic)
---
 components/pom.xml                                 |  18 -
 features/pom.xml                                   |   1 +
 features/src/main/feature/camel-features.xml       | 425 +++++++++++----------
 pom.xml                                            |   4 +
 tests/camel-test-blueprint/route.xml               |  12 -
 .../karaf/feature/maven/AutoDetectVersionMojo.java | 289 ++++++++++++++
 .../camel/karaf/feature/maven/WrappedBundle.java   |   2 +-
 .../{configure-spi => auto-detect-version}/pom.xml |   6 +-
 .../src/main/feature/expected.xml                  |  63 +++
 .../src/main/feature/features.xml                  |  63 +++
 .../src/it/auto-detect-version/verify.groovy       |  58 +++
 .../src/it/configure-spi/pom.xml                   |   2 +-
 12 files changed, 697 insertions(+), 246 deletions(-)

diff --git a/components/pom.xml b/components/pom.xml
index da50a564..19b4c8c7 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -318,22 +318,4 @@
         <module>camel-zookeeper</module>
         <module>camel-zookeeper-master</module>
     </modules>
-
-    <build>
-        <plugins>
-            <!-- generates an osgi repository added to the test karaf 
containing the dependencies-->
-            <plugin>
-                <groupId>org.apache.servicemix.tooling</groupId>
-                <artifactId>depends-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>generate-depends-file</id>
-                        <goals>
-                            <goal>generate-depends-file</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/features/pom.xml b/features/pom.xml
index 912c8fd8..e12c6ac0 100644
--- a/features/pom.xml
+++ b/features/pom.xml
@@ -74,6 +74,7 @@
                 <executions>
                     <execution>
                         <goals>
+                            <goal>auto-detect-version</goal>
                             <goal>ensure-wrap-bundle-version</goal>
                             <goal>configure-wrap-spi-provider</goal>
                         </goals>
diff --git a/features/src/main/feature/camel-features.xml 
b/features/src/main/feature/camel-features.xml
index 2eb06dfd..1bde3c7d 100644
--- a/features/src/main/feature/camel-features.xml
+++ b/features/src/main/feature/camel-features.xml
@@ -296,7 +296,7 @@
     <feature name='camel-activemq' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-jms</feature>
         <bundle 
dependency='true'>mvn:org.apache.activemq/activemq-client/${activemq-version}</bundle>
-        <bundle 
dependency='true'>mvn:org.fusesource.hawtbuf/hawtbuf/1.11</bundle>
+        <bundle 
dependency='true'>mvn:org.fusesource.hawtbuf/hawtbuf/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-activemq/${project.version}</bundle>
     </feature>
 
@@ -343,7 +343,7 @@
     </feature>
     <feature name='camel-atom' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle 
dependency="true">wrap:mvn:com.apptasticsoftware/rssreader/3.6.0</bundle>
+        <bundle 
dependency="true">wrap:mvn:com.apptasticsoftware/rssreader/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-atom/${project.version}</bundle>
     </feature>
     <feature name='camel-avro' version='${project.version}' start-level='50'>
@@ -394,7 +394,7 @@
     <feature name='camel-aws2-eventbridge' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version="${aws-java-sdk2-version}">awssdk</feature>
-        <bundle dependency='true'>mvn:commons-io/commons-io/2.14.0</bundle>
+        <bundle 
dependency='true'>mvn:commons-io/commons-io/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:software.amazon.awssdk/eventbridge/${aws-java-sdk2-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-aws2-eventbridge/${project.version}</bundle>
     </feature>
@@ -451,7 +451,7 @@
     <feature name='camel-aws2-ses' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version="${aws-java-sdk2-version}">awssdk</feature>
-        <bundle 
dependency="true">mvn:jakarta.mail/jakarta.mail-api/2.1.2</bundle>
+        <bundle 
dependency="true">mvn:jakarta.mail/jakarta.mail-api/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:software.amazon.awssdk/ses/${aws-java-sdk2-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-aws2-ses/${project.version}</bundle>
     </feature>
@@ -524,27 +524,27 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <feature version='[1.48,2)'>azure</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-cosmos/4.58.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-cosmos/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-azure-cosmosdb/${project.version}</bundle>
     </feature>
     <feature name='camel-azure-eventhubs' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='[1.48,2)'>azure-eventhubs</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-blob/12.25.4</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-blob/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-azure-eventhubs/${project.version}</bundle>
     </feature>  
     <feature name='camel-azure-files' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-ftp</feature>
         <feature version='[1.48,2)'>azure-storage</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-file-share/12.21.4</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-file-share/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-azure-files/${project.version}</bundle>
     </feature>
     <feature name='camel-azure-key-vault' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <feature version='[1.48,2)'>azure-eventhubs</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-security-keyvault-secrets/4.8.2</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-blob/12.25.4</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-security-keyvault-secrets/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-blob/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-azure-key-vault/${project.version}</bundle>
     </feature>
     <feature name='camel-azure-schema-registry' version='${project.version}' 
start-level='50'>
@@ -555,14 +555,14 @@
     <feature name='camel-azure-servicebus' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='[1.48,2)'>azure</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-core-amqp/2.9.3</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-messaging-servicebus/7.16.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-core-amqp/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-messaging-servicebus/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-azure-servicebus/${project.version}</bundle>
     </feature>
     <feature name='camel-azure-storage-blob' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='[1.48,2)'>azure-storage</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-blob/12.25.4</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-blob/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-blob-changefeed/${azure-storage-blob-changefeed-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-azure-storage-blob/${project.version}</bundle>
     </feature>
@@ -570,13 +570,13 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='[1.48,2)'>azure-storage</feature>
         <bundle 
dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-file-datalake/12.18.4</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-file-datalake/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-azure-storage-datalake/${project.version}</bundle>
     </feature>
     <feature name='camel-azure-storage-queue' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='[1.48,2)'>azure-storage</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-queue/12.20.4</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.azure/azure-storage-queue/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-azure-storage-queue/${project.version}</bundle>
     </feature>
     <feature name='camel-base64' version='${project.version}' start-level='50'>
@@ -588,7 +588,7 @@
         <feature>jakarta-validation</feature>
         
<bundle>mvn:org.hibernate.validator/hibernate-validator/${hibernate-validator-version}</bundle>
         
<bundle>mvn:org.jboss.logging/jboss-logging/${jboss-logging-version}</bundle>
-        <bundle>mvn:com.fasterxml/classmate/1.5.1</bundle>
+        <bundle>mvn:com.fasterxml/classmate/${auto-detect-version}</bundle>
         
<bundle>mvn:jakarta.el/jakarta.el-api/${jakarta-el-api-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-bean-validator/${project.version}</bundle>
     </feature>
@@ -608,7 +608,7 @@
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <feature version="[5,6)">jakarta-servlet</feature>
         <feature version="[3,4)">jaxb-runtime</feature>
-        <bundle 
dependency="true">mvn:org.apache.ws.xmlschema/xmlschema-core/2.3.1</bundle>
+        <bundle 
dependency="true">mvn:org.apache.ws.xmlschema/xmlschema-core/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-base/${jackson2-version}</bundle>
         <bundle 
dependency='true'>mvn:com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/${jackson2-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.cxf/cxf-core/${cxf-version}</bundle>
@@ -646,10 +646,10 @@
         <feature version='[4.1,5)'>netty</feature>
         <bundle 
dependency="true">mvn:com.datastax.oss/java-driver-core/${cassandra-driver-version}</bundle>
         <bundle 
dependency='true'>mvn:com.datastax.oss/java-driver-query-builder/${cassandra-driver-version}</bundle>
-        <bundle 
dependency="true">mvn:com.datastax.oss/native-protocol/1.5.1</bundle>
-        <bundle 
dependency="true">mvn:com.datastax.oss/java-driver-shaded-guava/25.1-jre-graal-sub-1</bundle>
+        <bundle 
dependency="true">mvn:com.datastax.oss/native-protocol/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.datastax.oss/java-driver-shaded-guava/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:io.dropwizard.metrics/metrics-core/${metrics-version}</bundle>
-        <bundle dependency='true'>mvn:com.typesafe/config/1.4.1</bundle>
+        <bundle 
dependency='true'>mvn:com.typesafe/config/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.hdrhistogram/HdrHistogram/${hdrhistrogram-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-cassandraql/${project.version}</bundle>
     </feature>
@@ -712,7 +712,7 @@
     </feature>
     <feature name='camel-couchbase' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle 
dependency='true'>mvn:com.couchbase.client/core-io/2.6.2</bundle>
+        <bundle 
dependency='true'>mvn:com.couchbase.client/core-io/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:com.couchbase.client/java-client/${couchbase-client-version}</bundle>
         <bundle 
dependency='true'>mvn:io.projectreactor/reactor-core/${reactor-version}</bundle>
         <bundle 
dependency='true'>mvn:org.reactivestreams/reactive-streams/${reactive-streams-version}</bundle>
@@ -721,7 +721,7 @@
     <feature name='camel-couchdb' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version="[4,5)">http-client</feature>
-        <bundle dependency='true'>mvn:com.google.code.gson/gson/2.9.1</bundle>
+        <bundle 
dependency='true'>mvn:com.google.code.gson/gson/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.lightcouch/lightcouch/${lightcouch-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-couchdb/${project.version}</bundle>
     </feature>
@@ -754,10 +754,10 @@
         <feature>jakarta-validation</feature>
         <feature version="[11,12)">jetty</feature>
         <bundle 
dependency="true">mvn:org.glassfish.hk2/osgi-resource-locator/2.5.0-b42</bundle>
-        <bundle dependency="true">mvn:org.apache.neethi/neethi/3.2.0</bundle>
-        <bundle 
dependency="true">mvn:org.apache.ws.xmlschema/xmlschema-core/2.3.1</bundle>
+        <bundle 
dependency="true">mvn:org.apache.neethi/neethi/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.apache.ws.xmlschema/xmlschema-core/${auto-detect-version}</bundle>
         <bundle 
dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.cglib/${cglib-version}_1</bundle>
-        <bundle 
dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.wsdl4j/1.6.3_1</bundle>
+        <bundle 
dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.wsdl4j/${auto-detect-version:alias=wsdl4j/wsdl4j}_1</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-attachments/${project.version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-http-base/${project.version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-cxf-all/${project.version}</bundle>
@@ -774,7 +774,7 @@
         <bundle 
dependency='true'>wrap:mvn:com.datasonnet/datasonnet-mapper/${datasonnet-mapper-version}</bundle>
         <bundle 
dependency='true'>mvn:io.github.classgraph/classgraph/${classgraph-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.lihaoyi/ujson_2.13/1.2.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.lihaoyi/ujson_2.13/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-datasonnet/${project.version}</bundle>
     </feature>
     <feature name='camel-debug' version='${project.version}' start-level='50'>
@@ -791,7 +791,7 @@
     </feature>
     <feature name='camel-disruptor' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle dependency='true'>mvn:com.lmax/disruptor/3.4.4</bundle>
+        <bundle 
dependency='true'>mvn:com.lmax/disruptor/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-disruptor/${project.version}</bundle>
     </feature>
     <feature name='camel-djl' version='${project.version}' start-level='50'>
@@ -822,7 +822,7 @@
     <feature name='camel-dropbox' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version="[6,7)">jakarta-servlet</feature>
-        <bundle 
dependency='true'>mvn:com.google.code.findbugs/jsr305/3.0.2</bundle>
+        <bundle 
dependency='true'>mvn:com.google.code.findbugs/jsr305/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle>
         <bundle 
dependency='true'>mvn:com.fasterxml.jackson.core/jackson-core/${jackson2-version}</bundle>
         <bundle 
dependency='true'>mvn:com.dropbox.core/dropbox-core-sdk/${dropbox-version}</bundle>
@@ -933,13 +933,13 @@
         <bundle 
dependency='true'>mvn:com.jayway.jsonpath/json-path/${json-path-version}</bundle>
         <bundle 
dependency='true'>mvn:net.minidev/json-smart/${json-smart-version}</bundle>
         <bundle 
dependency='true'>mvn:net.minidev/accessors-smart/${json-smart-version}</bundle>
-        <bundle dependency='true'>mvn:org.ow2.asm/asm/9.3</bundle>
+        <bundle 
dependency='true'>mvn:org.ow2.asm/asm/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-geocoder/${project.version}</bundle>
     </feature>
     <feature name='camel-git' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <bundle 
dependency='true'>mvn:org.eclipse.jgit/org.eclipse.jgit/${jgit-version}</bundle>
-        <bundle 
dependency='true'>mvn:com.googlecode.javaewah/JavaEWAH/1.2.3</bundle>
+        <bundle 
dependency='true'>mvn:com.googlecode.javaewah/JavaEWAH/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-git/${project.version}</bundle>
     </feature>
     <feature name='camel-github' version='${project.version}' start-level='50'>
@@ -954,13 +954,13 @@
         <feature version='[4,5)'>http-client</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client/${google-cloud-http-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*&amp;Export-Package=com.google.api.client.auth*;version=${google-cloud-http-client-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.apis/google-api-services-bigquery/v2-rev20240211-2.0.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.apis/google-api-services-bigquery/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${google-auth-library-oauth2-http-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${google-auth-library-oauth2-http-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-common-protos/2.36.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-bigquery/2.38.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-common-protos/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-bigquery/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-google-bigquery/${project.version}</bundle>
     </feature>
     <feature name='camel-google-calendar' version='${project.version}' 
start-level='50'>
@@ -971,8 +971,8 @@
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client/${google-cloud-http-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${google-auth-library-oauth2-http-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${google-auth-library-oauth2-http-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client/${google-oauth-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-gson/${google-cloud-http-client-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-apache-v2/${google-cloud-http-client-version}</bundle>
@@ -996,8 +996,8 @@
         <bundle 
dependency='true'>mvn:com.google.oauth-client/google-oauth-client-java6/${google-oauth-client-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client/${google-oauth-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client-jetty/${google-oauth-client-version}$overwrite=merge&amp;Import-Package=com.sun.net.httpserver;resolution:=optional,*</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-google-drive/${project.version}</bundle>
     </feature>
     <feature name='camel-google-functions' version='${project.version}' 
start-level='50'>
@@ -1005,13 +1005,13 @@
         <feature version="[33,34)">guava</feature>
         <feature version='[4,5)'>http-client</feature>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client/${google-cloud-http-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
-        <bundle dependency='true'>wrap:mvn:com.google.api/gax/2.45.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/gax/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${grpc-google-auth-library-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${grpc-google-auth-library-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-functions/${google-cloud-functions-bom-version}</bundle>
         <bundle 
dependency='true'>mvn:com.google.protobuf/protobuf-java/${protobuf-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-google-functions/${project.version}</bundle>
     </feature>
     <feature name='camel-google-mail' version='${project.version}' 
start-level='50'>
@@ -1023,8 +1023,8 @@
         <bundle 
dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client/${google-oauth-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${google-auth-library-oauth2-http-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${google-auth-library-oauth2-http-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-gson/${google-cloud-http-client-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-apache-v2/${google-cloud-http-client-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-jackson2/${google-cloud-http-client-version}</bundle>
@@ -1035,31 +1035,31 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version="[33,34)">guava</feature>
         <feature version='[4.1,5)'>netty</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-pubsub/1.127.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api/api-common/2.28.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-pubsub/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/api-common/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:com.google.protobuf/protobuf-java/${protobuf-version}</bundle>
-        <bundle dependency='true'>wrap:mvn:com.google.api/gax/2.45.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api/gax-grpc/2.45.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-cloud-pubsub-v1/1.109.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/gax/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/gax-grpc/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-cloud-pubsub-v1/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${grpc-google-auth-library-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${grpc-google-auth-library-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.grpc/grpc-api/${grpc-version}$${spi-consumer}</bundle>
-        <bundle dependency='true'>mvn:org.threeten/threetenbp/1.6.8</bundle>
+        <bundle 
dependency='true'>mvn:org.threeten/threetenbp/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client/${google-cloud-http-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[32,33)",*;resolution:=optional</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-gson/${google-cloud-http-client-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.grpc/grpc-protobuf/${grpc-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.grpc/grpc-protobuf-lite/${grpc-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-iam-v1/1.31.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-iam-v1/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-transport-native-epoll/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-transport-classes-epoll/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-codec-http/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-codec-http2/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-handler-proxy/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-codec-socks/${netty-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-common-protos/2.36.0$Export-Package=com.google.longrunning*;version=2.36.0,*</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.perfmark/perfmark-api/0.27.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-common-protos/${auto-detect-version}$Export-Package=com.google.longrunning*;version=${auto-detect-version},*</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.perfmark/perfmark-api/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.grpc/grpc-stub/${grpc-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.grpc/grpc-netty/${grpc-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.grpc/grpc-core/${grpc-version}</bundle>
@@ -1074,14 +1074,14 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version="[33,34)">guava</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api/api-common/2.28.0</bundle>
-        <bundle dependency='true'>wrap:mvn:com.google.api/gax/2.45.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/api-common/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/gax/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${google-auth-library-oauth2-http-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${google-auth-library-oauth2-http-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-pubsub/1.127.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-pubsub/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-cloud-secretmanager-v1/${google-cloud-secretmanager-bom-version}</bundle>
         <bundle 
dependency='true'>mvn:com.google.protobuf/protobuf-java/${protobuf-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-cloud-pubsub-v1/1.109.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api.grpc/proto-google-cloud-pubsub-v1/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-google-secret-manager/${project.version}</bundle>
     </feature>
     <feature name='camel-google-sheets' version='${project.version}' 
start-level='50'>
@@ -1097,8 +1097,8 @@
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-jackson2/${google-cloud-http-client-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${grpc-google-auth-library-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${grpc-google-auth-library-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.apis/google-api-services-sheets/${google-api-services-sheets-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-google-sheets/${project.version}</bundle>
     </feature>
@@ -1110,24 +1110,24 @@
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <bundle 
dependency='true'>mvn:com.google.api-client/google-api-client/${google-api-client-version}</bundle>
         <bundle 
dependency='true'>mvn:com.google.http-client/google-http-client-apache-v2/${google-cloud-http-client-version}</bundle>
-        <bundle dependency='true'>mvn:org.threeten/threetenbp/1.6.8</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api/api-common/2.28.0</bundle>
-        <bundle dependency='true'>wrap:mvn:com.google.api/gax/2.45.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.api/gax-httpjson/2.45.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.apis/google-api-services-storage/v1-rev20240209-2.0.0</bundle>
+        <bundle 
dependency='true'>mvn:org.threeten/threetenbp/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/api-common/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/gax/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.api/gax-httpjson/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.apis/google-api-services-storage/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-credentials/${google-auth-library-oauth2-http-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.auth/google-auth-library-oauth2-http/${google-auth-library-oauth2-http-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-core/2.35.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-core-http/2.35.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-storage/2.35.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-core/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-core-http/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.cloud/google-cloud-storage/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client/${google-cloud-http-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-appengine/${google-cloud-http-client-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-gson/${google-cloud-http-client-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-jackson2/${google-cloud-http-client-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client/${google-oauth-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.grpc/grpc-api/${grpc-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-google-storage/${project.version}</bundle>
     </feature>
     <feature name='camel-grape' version='${project.version}' start-level='50'>
@@ -1168,7 +1168,7 @@
     </feature>
     <feature name='camel-gson' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle dependency='true'>mvn:com.google.code.gson/gson/2.10.1</bundle>
+        <bundle 
dependency='true'>mvn:com.google.code.gson/gson/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-gson/${project.version}</bundle>
     </feature>
     <feature name='camel-guava-eventbus' version='${project.version}' 
start-level='50'>
@@ -1188,7 +1188,8 @@
     </feature>
     <feature name='camel-headersmap' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.cedarsoftware/java-util/2.4.0</bundle>
+        <!-- Need to wrap the bundle because it doesn't export properly 
com.cedarsoftware.util -->
+        <bundle 
dependency='true'>wrap:mvn:com.cedarsoftware/java-util/${java-util-version}$overwrite=merge&amp;Export-Package=com.cedarsoftware.util*;version=${java-util-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-headersmap/${project.version}</bundle>
     </feature>
     <feature name='camel-hl7' version='${project.version}' start-level='50'>
@@ -1210,10 +1211,10 @@
     <feature name='camel-ical' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <bundle 
dependency='true'>mvn:org.apache.commons/commons-lang3/${commons-lang3-version}</bundle>
-        <bundle 
dependency='true'>mvn:commons-validator/commons-validator/1.7</bundle>
+        <bundle 
dependency='true'>mvn:commons-validator/commons-validator/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-beanutils/commons-beanutils/${commons-beanutils-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-collections/commons-collections/${commons-collections-version}</bundle>
-        <bundle 
dependency='true'>mvn:commons-digester/commons-digester/2.1</bundle>
+        <bundle 
dependency='true'>mvn:commons-digester/commons-digester/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.mnode.ical4j/ical4j/${ical4j-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-ical/${project.version}</bundle>
     </feature>
@@ -1250,9 +1251,9 @@
         <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/logging-interceptor/${squareup-okhttp-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/okhttp/${squareup-okhttp-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.squareup.okio/okio/${squareup-okio-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.moshi/moshi/1.15.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/converter-moshi/2.11.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/retrofit/2.11.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.moshi/moshi/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/converter-moshi/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/retrofit/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.jetbrains.kotlin/kotlin-stdlib/${kotlin-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.influxdb/influxdb-java/${influx-java-driver-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-influxdb/${project.version}</bundle>
@@ -1262,21 +1263,21 @@
         <bundle 
dependency='true'>wrap:mvn:com.influxdb/influxdb-client-java/${influx-client-java-driver-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.influxdb/influxdb-client-core/${influx-client-java-driver-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.influxdb/influxdb-client-utils/${influx-client-java-driver-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/logging-interceptor/4.12.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/okhttp/4.12.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/adapter-rxjava3/2.9.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/converter-scalars/2.9.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/converter-gson/2.9.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/retrofit/2.9.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/logging-interceptor/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/okhttp/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/adapter-rxjava3/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/converter-scalars/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/converter-gson/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.retrofit2/retrofit/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.jetbrains.kotlin/kotlin-reflect/${kotlin-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.jetbrains.kotlin/kotlin-stdlib/1.9.21</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.reactivestreams/reactive-streams/1.0.4</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.reactivex.rxjava3/rxjava/3.1.8$overwrite=merge&amp;Export-Package=io.reactivex.rxjava3.internal*,*</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.8.21</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.8.21</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.okio/okio/3.7.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.okio/okio-jvm/3.7.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.jetbrains/annotations/13.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.jetbrains.kotlin/kotlin-stdlib/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.reactivestreams/reactive-streams/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.reactivex.rxjava3/rxjava/${auto-detect-version}$overwrite=merge&amp;Export-Package=io.reactivex.rxjava3.internal*,*</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.jetbrains.kotlin/kotlin-stdlib-jdk8/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.jetbrains.kotlin/kotlin-stdlib-jdk7/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.okio/okio/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.okio/okio-jvm/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.jetbrains/annotations/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.code.gson/gson/${gson-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-influxdb2/${project.version}</bundle>
     </feature>
@@ -1299,20 +1300,24 @@
     </feature>
     <feature name='camel-jackson-avro' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-jackson</feature>
-        <bundle 
dependency='true'>mvn:org.apache.commons/commons-compress/1.21</bundle>
-        <bundle dependency='true'>mvn:org.apache.avro/avro/1.11.1</bundle>
-        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-avro/2.16.1</bundle>
+        <feature version='[33,34)'>guava</feature>
+        <bundle 
dependency='true'>mvn:org.apache.commons/commons-compress/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.avro/avro/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.codehaus.jackson/jackson-core-asl/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.codehaus.jackson/jackson-mapper-asl/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.thoughtworks.paranamer/paranamer/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-avro/${jackson2-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-jackson-avro/${project.version}</bundle>
     </feature>
     <feature name='camel-jackson-protobuf' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-jackson</feature>
-        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-protobuf/2.16.1</bundle>
+        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-protobuf/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-jackson-protobuf/${project.version}</bundle>
     </feature>
     <feature name='camel-jacksonxml' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-jackson</feature>
-        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.module/jackson-module-jakarta-xmlbind-annotations/2.16.1</bundle>
-        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.16.1</bundle>
+        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.module/jackson-module-jakarta-xmlbind-annotations/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-xml/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-jacksonxml/${project.version}</bundle>
     </feature>
     <feature name='camel-jasypt' version='${project.version}' start-level='50'>
@@ -1359,19 +1364,19 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='[33,34)'>guava</feature>
         <feature version='[4,5)'>http-client</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.atlassian.event/atlassian-event/4.1.3</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.atlassian.httpclient/atlassian-httpclient-library/2.1.5</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.atlassian.httpclient/atlassian-httpclient-api/2.1.5</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.atlassian.event/atlassian-event/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.atlassian.httpclient/atlassian-httpclient-library/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.atlassian.httpclient/atlassian-httpclient-api/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.atlassian.jira/jira-rest-java-client-core/${jira-rest-client-api-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.atlassian.jira/jira-rest-java-client-api/${jira-rest-client-api-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.atlassian.sal/sal-api/5.1.4$overwrite=merge&amp;Import-Package=*;resolution:=optional&amp;Export-Package=com.atlassian.sal.api*;version=5.1.4</bundle>
-        <bundle 
dependency='true'>mvn:io.atlassian.util.concurrent/atlassian-util-concurrent/4.0.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client/1.43.3$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-gson/1.43.3</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.atlassian.sal/sal-api/${auto-detect-version}$overwrite=merge&amp;Import-Package=*;resolution:=optional&amp;Export-Package=com.atlassian.sal.api*;version=${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.atlassian.util.concurrent/atlassian-util-concurrent/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client/${auto-detect-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.google.http-client/google-http-client-gson/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client/${google-oauth-client-version}$overwrite=merge&amp;Import-Package=com.google.common*;version="[33,34)",*</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/0.31.1</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/0.31.1</bundle>
-        <bundle dependency='true'>mvn:joda-time/joda-time/2.9.9</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-contrib-http-util/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.opencensus/opencensus-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:joda-time/joda-time/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-jira/${project.version}</bundle>
     </feature>
     <feature name='camel-jfr' version='${project.version}' start-level='50'>
@@ -1416,7 +1421,7 @@
     <feature name='camel-jooq' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <bundle dependency='true'>mvn:org.jooq/jooq/${jooq-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:io.r2dbc/r2dbc-spi/1.0.0.RELEASE</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.r2dbc/r2dbc-spi/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.reactivestreams/reactive-streams/${reactive-streams-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-jooq/${project.version}</bundle>
     </feature>
@@ -1437,8 +1442,8 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <bundle 
dependency='true'>wrap:mvn:net.thisptr/jackson-jq/${jackson-jq-version}$overwrite=merge&amp;Export-Package=net*;version=${jackson-jq-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.jruby.jcodings/jcodings/1.0.58</bundle>
-        <bundle dependency='true'>wrap:mvn:org.jruby.joni/joni/2.2.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.jruby.jcodings/jcodings/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.jruby.joni/joni/${auto-detect-version}</bundle>
         <bundle>mvn:org.apache.camel.karaf/camel-jq/${project.version}</bundle>
     </feature>
     <feature name='camel-jsch' version='${project.version}' start-level='50'>
@@ -1461,16 +1466,16 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <bundle 
dependency='true'>wrap:mvn:com.github.java-json-tools/json-patch/${json-patch-version}$overwrite=merge&amp;Export-Package=com.github.fge*;version=${json-patch-version}&amp;Import-Package=com.fasterxml*,com.github*;javax*</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.github.java-json-tools/jackson-coreutils/2.0$overwrite=merge&amp;Export-Package=com.github.fge*;version=2.0&amp;Import-Package=com.fasterxml*,com.github*;javax*</bundle>
-        <bundle 
dependency='true'>mvn:com.github.java-json-tools/msg-simple/1.2</bundle>
-        <bundle 
dependency='true'>mvn:com.github.java-json-tools/btf/1.3</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.github.java-json-tools/jackson-coreutils/${auto-detect-version}$overwrite=merge&amp;Export-Package=com.github.fge*;version=${auto-detect-version}&amp;Import-Package=com.fasterxml*,com.github*;javax*</bundle>
+        <bundle 
dependency='true'>mvn:com.github.java-json-tools/msg-simple/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.github.java-json-tools/btf/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-json-patch/${project.version}</bundle>
     </feature>    
     <feature name='camel-json-validator' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <bundle 
dependency='true'>mvn:com.networknt/json-schema-validator/${networknt-json-schema-validator-version}</bundle>
-        <bundle dependency='true'>mvn:com.ethlo.time/itu/1.8.0</bundle>
+        <bundle 
dependency='true'>mvn:com.ethlo.time/itu/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${jackson2-version}</bundle>
         <bundle 
dependency='true'>mvn:org.yaml/snakeyaml/${snakeyaml-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-json-validator/${project.version}</bundle>
@@ -1493,17 +1498,17 @@
         <bundle 
dependency='true'>mvn:com.jayway.jsonpath/json-path/${json-path-version}</bundle>
         <bundle 
dependency='true'>mvn:net.minidev/json-smart/${json-smart-version}</bundle>
         <bundle 
dependency='true'>mvn:net.minidev/accessors-smart/${json-smart-version}</bundle>
-        <bundle dependency='true'>mvn:org.ow2.asm/asm/9.3</bundle>
+        <bundle 
dependency='true'>mvn:org.ow2.asm/asm/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-jsonpath/${project.version}</bundle>
     </feature>
     <feature name='camel-jta' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <bundle 
dependency='true'>mvn:jakarta.transaction/jakarta.transaction-api/${jakarta-transaction-api-version}</bundle>
         <bundle 
dependency='true'>mvn:jakarta.enterprise/jakarta.enterprise.cdi-api/${jakarta-enterprise-cdi-api-version}</bundle>
-        <bundle 
dependency='true'>mvn:jakarta.enterprise/jakarta.enterprise.lang-model/4.1.0</bundle>
+        <bundle 
dependency='true'>mvn:jakarta.enterprise/jakarta.enterprise.lang-model/${jakarta-enterprise-cdi-api-version}</bundle>
         <bundle 
dependency='true'>mvn:jakarta.inject/jakarta.inject-api/${jakarta-inject-version}</bundle>
         <bundle 
dependency='true'>mvn:jakarta.el/jakarta.el-api/${jakarta-el-api-version}</bundle>
-        <bundle 
dependency='true'>mvn:jakarta.interceptor/jakarta.interceptor-api/2.2.0</bundle>
+        <bundle 
dependency='true'>mvn:jakarta.interceptor/jakarta.interceptor-api/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-jta/${project.version}</bundle>
     </feature>
     <feature name='camel-jte' version='${project.version}' start-level='50'>
@@ -1513,12 +1518,12 @@
     </feature>
     <feature name='camel-jt400' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle dependency='true'>wrap:mvn:net.sf.jt400/jt400/20.0.6</bundle>
+        <bundle 
dependency='true'>wrap:mvn:net.sf.jt400/jt400/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-jt400/${project.version}</bundle>
     </feature>
     <feature name='camel-kafka' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle 
dependency='true'>wrap:mvn:org.apache.kafka/kafka-clients/3.6.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.apache.kafka/kafka-clients/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-kafka/${project.version}</bundle>
     </feature>
     <feature name='camel-kamelet' version='${project.version}' 
start-level='50'>
@@ -1577,19 +1582,19 @@
     </feature>
     <feature name='camel-ldif' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-i18n/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-asn1-api/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-asn1-ber/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-client-api/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-codec-core/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-extras-aci/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-extras-codec/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-extras-codec-api/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-model/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-schema-data/2.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-util/2.0.0</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-i18n/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-asn1-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-asn1-ber/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-client-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-codec-core/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-extras-aci/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-extras-codec/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-extras-codec-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-model/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-ldap-schema-data/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.directory.api/api-util/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.directory.server/apacheds-core-api/${apacheds-version}</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.antlr/2.7.7_5</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.antlr/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.commons/commons-collections4/${commons-collections4-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.commons/commons-lang3/${commons-lang3-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.commons/commons-pool2/${commons-pool2-version}</bundle>
@@ -1627,7 +1632,7 @@
     <feature name='camel-mail' version='${project.version}' start-level='50'>
         <feature prerequisite="true">spifly</feature>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle 
dependency="true">mvn:jakarta.mail/jakarta.mail-api/2.1.3</bundle>
+        <bundle 
dependency="true">mvn:jakarta.mail/jakarta.mail-api/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.eclipse.angus/angus-mail/${angus-mail-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-attachments/${project.version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-mail/${project.version}</bundle>
@@ -1636,14 +1641,14 @@
         <feature version='${camel.osgi.version.range}'>camel-mail</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <bundle 
dependency='true'>wrap:mvn:com.microsoft.azure/msal4j/${msal4j-version}$overwrite=merge&amp;Import-Package=com.sun.net.httpserver;resolution:=optional,*</bundle>
-        <bundle dependency='true'>mvn:com.nimbusds/content-type/2.3</bundle>
+        <bundle 
dependency='true'>mvn:com.nimbusds/content-type/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:com.nimbusds/nimbus-jose-jwt/${nimbus-jose-jwt}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.github.stephenc.jcip/jcip-annotations/1.0-1</bundle>
-        <bundle 
dependency='true'>mvn:com.nimbusds/oauth2-oidc-sdk/11.9.1</bundle>
-        <bundle dependency='true'>mvn:com.nimbusds/lang-tag/1.7</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.github.stephenc.jcip/jcip-annotations/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.nimbusds/oauth2-oidc-sdk/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.nimbusds/lang-tag/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:net.minidev/json-smart/${json-smart-version}</bundle>
         <bundle 
dependency='true'>mvn:net.minidev/accessors-smart/${json-smart-version}</bundle>
-        <bundle dependency='true'>mvn:org.ow2.asm/asm/9.3</bundle>
+        <bundle 
dependency='true'>mvn:org.ow2.asm/asm/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-mail-microsoft-oauth/${project.version}</bundle>
     </feature>
     <feature name='camel-mapstruct' version='${project.version}' 
start-level='50'>
@@ -1677,25 +1682,25 @@
         <feature 
version='${camel.osgi.version.range}'>camel-micrometer</feature>
         <feature 
version='${camel.osgi.version.range}'>camel-platform-http-main</feature>
         <bundle 
dependency='true'>mvn:io.micrometer/micrometer-registry-prometheus/${micrometer-version}</bundle>
-        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient_common/0.16.0</bundle>
-        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient/0.16.0</bundle>
-        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient_tracer_common/0.16.0</bundle>
-        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient_tracer_otel/0.16.0</bundle>
-        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient_tracer_otel_agent/0.16.0</bundle>
+        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient_common/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient_tracer_common/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient_tracer_otel/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.prometheus/simpleclient_tracer_otel_agent/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:io.smallrye/jandex/${jandex-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-micrometer-prometheus/${project.version}</bundle>
     </feature>
     <feature name='camel-mina' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle dependency='true'>mvn:org.apache.mina/mina-core/2.2.2</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.mina/mina-core/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-mina/${project.version}</bundle>
     </feature>
     <feature name='camel-minio' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle dependency='true'>wrap:mvn:io.minio/minio/8.5.9</bundle>
+        <bundle 
dependency='true'>wrap:mvn:io.minio/minio/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.commons/commons-compress/${commons-compress-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/okhttp/4.12.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/okhttp/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-minio/${project.version}</bundle>
     </feature>
     <feature name='camel-mllp' version='${project.version}' start-level='50'>
@@ -1725,8 +1730,8 @@
     </feature>
     <feature name='camel-mvel' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle dependency='true'>mvn:org.ow2.asm/asm/9.6</bundle>
-        <bundle dependency='true'>mvn:org.mvel/mvel2/2.5.2.Final</bundle>
+        <bundle dependency='true'>mvn:org.ow2.asm/asm/${asm-version}</bundle>
+        <bundle dependency='true'>mvn:org.mvel/mvel2/${mvel-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-mvel/${project.version}</bundle>
     </feature>
     <feature name='camel-mybatis' version='${project.version}' 
start-level='50'>
@@ -1775,7 +1780,7 @@
     </feature>
     <feature name='camel-ognl' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle dependency='true'>wrap:mvn:ognl/ognl/3.4.2</bundle>
+        <bundle 
dependency='true'>wrap:mvn:ognl/ognl/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-ognl/${project.version}</bundle>
     </feature>
     <feature name='camel-olingo2' version='${project.version}' 
start-level='50'>
@@ -1784,8 +1789,8 @@
         <bundle 
dependency='true'>mvn:org.apache.httpcomponents/httpasyncclient-osgi/${httpasyncclient-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.commons/commons-lang3/${commons-lang3-version}</bundle>
         <bundle 
dependency='true'>mvn:com.google.code.gson/gson/${gson-version}</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.olingo/olingo-odata2-api/2.0.13</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.apache.olingo/olingo-odata2-core/2.0.13$overwrite=merge&amp;Import-Package=com.*,org.*,javax.xml.*</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.olingo/olingo-odata2-api/${olingo2-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.apache.olingo/olingo-odata2-core/${olingo2-version}$overwrite=merge&amp;Import-Package=com.*,org.*,javax.xml.*</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-olingo2/${project.version}</bundle>
     </feature>
     <feature name='camel-olingo4' version='${project.version}' 
start-level='50'>
@@ -1793,26 +1798,26 @@
         <feature version="[4,5)">http-client</feature>
         <feature version="[6,7)">jakarta-servlet</feature>
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
-        <bundle 
dependency='true'>mvn:org.apache.olingo/odata-commons-api/5.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.olingo/odata-commons-core/5.0.0</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.olingo/odata-client-api/5.0.0</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.olingo/odata-commons-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.olingo/odata-commons-core/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.olingo/odata-client-api/${auto-detect-version}</bundle>
 <!--      TODO remove wrap protocol when 
https://issues.apache.org/jira/browse/OLINGO-1206 is resolved -->
-        <bundle 
dependency='true'>mvn:org.apache.olingo/odata-server-api/5.0.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.apache.olingo/odata-server-core/5.0.0$overwrite=merge&amp;Export-Package=org.apache.olingo.*;version=5.0.0</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.apache.olingo/odata-client-core/5.0.0$overwrite=merge&amp;Export-Package=org.apache.olingo.client.core*;version=5.0.0</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.olingo/odata-server-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.apache.olingo/odata-server-core/${auto-detect-version}$overwrite=merge&amp;Export-Package=org.apache.olingo.*;version=${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.apache.olingo/odata-client-core/${auto-detect-version}$overwrite=merge&amp;Export-Package=org.apache.olingo.client.core*;version=${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.commons/commons-lang3/${commons-lang3-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.httpcomponents/httpasyncclient-osgi/${httpasyncclient-version}</bundle>
-        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.16.1</bundle>
-        <bundle dependency='true'>mvn:com.fasterxml/aalto-xml/1.3.2</bundle>
-        <bundle 
dependency='true'>mvn:io.netty/netty-common/4.1.107.Final</bundle>
-        <bundle 
dependency='true'>mvn:io.netty/netty-transport/4.1.107.Final</bundle>
-        <bundle 
dependency='true'>mvn:io.netty/netty-transport-native-unix-common/4.1.107.Final</bundle>
-        <bundle 
dependency='true'>mvn:io.netty/netty-buffer/4.1.107.Final</bundle>
-        <bundle 
dependency='true'>mvn:io.netty/netty-handler/4.1.107.Final</bundle>
-        <bundle 
dependency='true'>mvn:io.netty/netty-resolver/4.1.107.Final</bundle>
-        <bundle 
dependency='true'>mvn:io.netty/netty-codec/4.1.107.Final</bundle>
-        <bundle 
dependency='true'>mvn:io.netty/netty-codec-http/4.1.107.Final</bundle>
+        <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-xml/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.fasterxml/aalto-xml/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.netty/netty-common/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.netty/netty-transport/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.netty/netty-transport-native-unix-common/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.netty/netty-buffer/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.netty/netty-handler/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.netty/netty-resolver/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.netty/netty-codec/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:io.netty/netty-codec-http/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-olingo4/${project.version}</bundle>
     </feature>
     <feature name='camel-openapi-java' version='${project.version}' 
start-level='50'>
@@ -1851,9 +1856,9 @@
         <bundle 
dependency='true'>wrap:mvn:com.github.openstack4j.core/openstack4j-core/${openstack4j-version}$overwrite=merge&amp;Import-Package=com.fasterxml*,com.github*,javax*,org*,com.google*;version='[33,34)'</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.github.openstack4j.core.connectors/openstack4j-okhttp/${openstack4j-version}$overwrite=merge&amp;Import-Package=com.fasterxml*,okhttp3*,javax*,org*;resolution:=optional,com.google*;version='[33,34)'</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.github.java-json-tools/json-patch/${json-patch-version}$overwrite=merge&amp;Export-Package=com.github.fge*;version=${json-patch-version}&amp;Import-Package=com.fasterxml*,com.github*;javax*</bundle>
-        <bundle 
dependency='true'>wrap:mvn:com.github.java-json-tools/jackson-coreutils/2.0$overwrite=merge&amp;Export-Package=com.github.fge*;version=2.0&amp;Import-Package=com.fasterxml*,com.github*;javax*</bundle>
-        <bundle 
dependency='true'>mvn:com.github.java-json-tools/msg-simple/1.2</bundle>
-        <bundle 
dependency='true'>mvn:com.github.java-json-tools/btf/1.3</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.github.java-json-tools/jackson-coreutils/${auto-detect-version}$overwrite=merge&amp;Export-Package=com.github.fge*;version=${auto-detect-version}&amp;Import-Package=com.fasterxml*,com.github*;javax*</bundle>
+        <bundle 
dependency='true'>mvn:com.github.java-json-tools/msg-simple/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.github.java-json-tools/btf/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.yaml/snakeyaml/${snakeyaml-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/okhttp/${squareup-okhttp-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.squareup.okhttp3/logging-interceptor/${squareup-okhttp-version}</bundle>
@@ -1870,8 +1875,8 @@
     </feature>
     <feature name='camel-optaplanner' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle>wrap:mvn:org.kie/kie-api/8.44.0.Final</bundle>
-        
<bundle>wrap:mvn:org.optaplanner/optaplanner-core-impl/${optaplanner-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.kie/kie-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.optaplanner/optaplanner-core-impl/${optaplanner-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-optaplanner/${project.version}</bundle>
     </feature>
     <feature name='camel-paho' version='${project.version}' start-level='50'>
@@ -1882,7 +1887,7 @@
 <!--    Paho v5 does not work in OSGi: 
https://github.com/eclipse/paho.mqtt.java/issues/857-->
     <feature name='camel-paho-mqtt5' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        
<bundle>wrap:mvn:org.eclipse.paho/org.eclipse.paho.mqttv5.client/1.2.5$overwrite=merge&amp;Export-Package=org.eclipse.paho.mqttv5.*;version=1.2.5</bundle>
+        
<bundle>wrap:mvn:org.eclipse.paho/org.eclipse.paho.mqttv5.client/${paho-version}$overwrite=merge&amp;Export-Package=org.eclipse.paho.mqttv5.*;version=${paho-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-paho-mqtt5/${project.version}</bundle>
     </feature>
     <feature name='camel-parquet-avro' version='${project.version}' 
start-level='50'>
@@ -1960,7 +1965,7 @@
         <bundle 
dependency='true'>mvn:com.google.protobuf/protobuf-java-util/${protobuf-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle>
         <bundle 
dependency='true'>mvn:com.google.code.gson/gson/${gson-version}</bundle>
-        <bundle 
dependency='true'>mvn:com.google.code.findbugs/jsr305/3.0.2</bundle>
+        <bundle 
dependency='true'>mvn:com.google.code.findbugs/jsr305/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-protobuf/${project.version}</bundle>
     </feature>
     <feature name='camel-pubnub' version='${project.version}' start-level='50'>
@@ -1982,7 +1987,7 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='${camel.osgi.version.range}'>camel-cron</feature>
         <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.c3p0/${c3p0-version}_1</bundle>
-        <bundle dependency='true'>mvn:com.zaxxer/HikariCP-java7/2.4.13</bundle>
+        <bundle 
dependency='true'>mvn:com.zaxxer/HikariCP-java7/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.quartz-scheduler/quartz/${quartz-version}$overwrite=merge&amp;DynamicImport-Package=org.apache.camel.component.quartz</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-quartz/${project.version}</bundle>
     </feature>
@@ -2019,23 +2024,21 @@
         <feature version='[4.1,5)'>netty</feature>
         <feature version='${camel.osgi.spring.version}'>spring</feature>
         <bundle 
dependency='true'>mvn:org.redisson/redisson/${redisson-version}</bundle>
-        <bundle dependency='true'>mvn:com.esotericsoftware/kryo/5.6.0</bundle>
-        <bundle 
dependency='true'>mvn:com.esotericsoftware/minlog/1.3.1</bundle>
-        <bundle 
dependency='true'>mvn:com.esotericsoftware/reflectasm/1.11.9</bundle>
-        <bundle dependency='true'>mvn:org.objenesis/objenesis/3.3</bundle>
+        <bundle 
dependency='true'>mvn:com.esotericsoftware/kryo/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.esotericsoftware/minlog/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.esotericsoftware/reflectasm/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.objenesis/objenesis/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${jackson2-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-transport/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-resolver-dns/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-codec-dns/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-transport-classes-epoll/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-transport-classes-kqueue/${netty-version}</bundle>
-        <bundle 
dependency='true'>mvn:io.netty.incubator/netty-incubator-transport-classes-io_uring/0.0.21.Final</bundle>
-        <bundle 
dependency='true'>mvn:io.reactivex.rxjava3/rxjava/3.1.6</bundle>
+        <bundle 
dependency='true'>mvn:io.netty.incubator/netty-incubator-transport-classes-io_uring/0.0.25.Final</bundle>
+        <bundle 
dependency='true'>mvn:io.reactivex.rxjava3/rxjava/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.reactivestreams/reactive-streams/${reactive-streams-version}</bundle>
         <bundle 
dependency='true'>mvn:javax.cache/cache-api/${jcache-version}</bundle>
-        <bundle dependency='true'>wrap:mvn:org.jodd/jodd-bean/5.1.6</bundle>
         <bundle 
dependency='true'>mvn:net.bytebuddy/byte-buddy/${bytebuddy-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.jboss.marshalling/jboss-marshalling/2.0.11.Final</bundle>
         <bundle 
dependency='true'>mvn:io.projectreactor/reactor-core/${reactor-version}</bundle>
         <bundle 
dependency='true'>mvn:org.yaml/snakeyaml/${snakeyaml-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-redis/${project.version}</bundle>
@@ -2081,7 +2084,7 @@
     </feature>
     <feature name='camel-rss' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-atom</feature>
-        <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jdom/2.0.6.1_1</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jdom/${auto-detect-version:alias=org.jdom/jdom2}_1</bundle>
         <bundle 
dependency="true">mvn:com.rometools/rome/${rome-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-rss/${project.version}</bundle>
     </feature>
@@ -2115,7 +2118,7 @@
         <bundle 
dependency='true'>mvn:org.cometd.java/cometd-java-common/${cometd-java-client-version}</bundle>
         <bundle 
dependency='true'>mvn:org.eclipse.jetty/jetty-alpn-client/${jetty-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.eclipse.jetty/jetty-client/${jetty-version}$overwrite=merge&amp;Export-Package=org*;version=${jetty-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:tech.allegro.schema.json2avro/converter/0.2.15</bundle>
+        <bundle 
dependency='true'>wrap:mvn:tech.allegro.schema.json2avro/converter/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-salesforce/${project.version}</bundle>
     </feature>   
     <feature name='camel-sap-netweaver' version='${project.version}' 
start-level='50'>
@@ -2126,7 +2129,7 @@
     <feature name='camel-saxon' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <bundle 
dependency="true">wrap:mvn:net.sf.saxon/Saxon-HE/${saxon-version}</bundle>
-        <bundle 
dependency="true">wrap:mvn:org.xmlresolver/xmlresolver/5.2.2</bundle>
+        <bundle 
dependency="true">wrap:mvn:org.xmlresolver/xmlresolver/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-saxon/${project.version}</bundle>
     </feature>
     <feature name='camel-schematron' version='${project.version}' 
start-level='50'>
@@ -2146,7 +2149,7 @@
         <bundle 
dependency='true'>mvn:com.fasterxml.jackson.datatype/jackson-datatype-jdk8/${jackson2-version}</bundle>
         <bundle 
dependency='true'>mvn:com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-base/${jackson2-version}</bundle>
         <bundle 
dependency='true'>mvn:com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/${jackson2-version}</bundle>
-        <bundle 
dependency='true'>mvn:org.apache.ws.xmlschema/xmlschema-core/2.3.1</bundle>
+        <bundle 
dependency='true'>mvn:org.apache.ws.xmlschema/xmlschema-core/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.cxf/cxf-core/${cxf-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.cxf/cxf-rt-rs-client/${cxf-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.cxf/cxf-rt-rs-security-oauth2/${cxf-version}</bundle>
@@ -2177,7 +2180,7 @@
         <bundle 
dependency='true'>mvn:org.apache.shiro/shiro-crypto-core/${shiro-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.shiro/shiro-crypto-cipher/${shiro-version}</bundle>
         <bundle 
dependency='true'>mvn:org.apache.shiro/shiro-crypto-hash/${shiro-version}</bundle>
-        <bundle 
dependency='true'>mvn:jakarta.annotation/jakarta.annotation-api/1.3.5</bundle>
+        <bundle 
dependency='true'>mvn:jakarta.annotation/jakarta.annotation-api/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-beanutils/commons-beanutils/${commons-beanutils-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-collections/commons-collections/${commons-collections-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.apache.shiro/shiro-jakarta-ee/${shiro-version}</bundle>
@@ -2237,7 +2240,7 @@
         <bundle 
dependency='true'>mvn:commons-validator/commons-validator/${commons-validator-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-beanutils/commons-beanutils/${commons-beanutils-version}</bundle>
         <bundle 
dependency='true'>mvn:commons-collections/commons-collections/${commons-collections-version}</bundle>
-        <bundle 
dependency='true'>mvn:commons-digester/commons-digester/2.1</bundle>
+        <bundle 
dependency='true'>mvn:commons-digester/commons-digester/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-splunk-hec/${project.version}</bundle>
     </feature>
     <feature name='camel-spring-batch' version='${project.version}' 
start-level='50'>
@@ -2265,8 +2268,8 @@
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='${camel.osgi.spring.version}'>spring-tx</feature>
         <feature 
version='${camel.osgi.spring.version}'>spring-messaging</feature>
-        <bundle 
dependency='true'>wrap:mvn:org.springframework.retry/spring-retry/2.0.5</bundle>
-        <bundle dependency='true'>mvn:com.rabbitmq/amqp-client/5.19.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.springframework.retry/spring-retry/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:com.rabbitmq/amqp-client/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.micrometer/micrometer-commons/${micrometer-version}$overwrite=merge&amp;Import-Package=*;resolution:=optional</bundle>
         <bundle 
dependency='true'>mvn:io.micrometer/micrometer-observation/${micrometer-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:io.micrometer/micrometer-core/${micrometer-version}$overwrite=merge&amp;Import-Package=*;resolution:=optional</bundle>
@@ -2336,11 +2339,11 @@
             required by 
mvn:org.fusesource.stompjms/stompjms-client/${stompjms-version} bundle. The 
wrap protocol is used because
             it is not a valid OSGI bundle.
         -->
-        <bundle 
dependency='true'>wrap:mvn:org.apache.geronimo.specs/geronimo-jms_1.1_spec/1.1</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.apache.geronimo.specs/geronimo-jms_1.1_spec/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>mvn:org.fusesource.stompjms/stompjms-client/${stompjms-version}</bundle>
-        <bundle 
dependency='true'>mvn:org.fusesource.hawtbuf/hawtbuf/1.9</bundle>
-        <bundle 
dependency='true'>mvn:org.fusesource.hawtdispatch/hawtdispatch/1.20</bundle>
-        <bundle 
dependency='true'>mvn:org.fusesource.hawtdispatch/hawtdispatch-transport/1.20</bundle>
+        <bundle 
dependency='true'>mvn:org.fusesource.hawtbuf/hawtbuf/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.fusesource.hawtdispatch/hawtdispatch/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.fusesource.hawtdispatch/hawtdispatch-transport/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-stomp/${project.version}</bundle>
     </feature>    
     <feature name='camel-stream' version='${project.version}' start-level='50'>
@@ -2359,7 +2362,7 @@
     </feature>
     <feature name='camel-swift' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle 
dependency='true'>wrap:mvn:com.prowidesoftware/pw-swift-core/SRU2023-10.1.13</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.prowidesoftware/pw-swift-core/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.prowidesoftware/pw-iso20022/${prowide-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-swift/${project.version}</bundle>
     </feature>
@@ -2378,16 +2381,16 @@
     </feature>
     <feature name='camel-test' version='${project.version}' start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
-        <bundle 
dependency='true'>mvn:org.junit.platform/junit-platform-commons/1.10.2</bundle>
-        <bundle 
dependency='true'>mvn:org.junit.platform/junit-platform-engine/1.10.2</bundle>
-        <bundle 
dependency='true'>mvn:org.junit.platform/junit-platform-launcher/1.10.2</bundle>
+        <bundle 
dependency='true'>mvn:org.junit.platform/junit-platform-commons/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.junit.platform/junit-platform-engine/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.junit.platform/junit-platform-launcher/${auto-detect-version:alias=org.junit.platform/junit-platform-engine}</bundle>
         <bundle 
dependency='true'>mvn:org.junit.jupiter/junit-jupiter-params/${junit-jupiter-version}</bundle>
         <bundle 
dependency='true'>mvn:org.junit.jupiter/junit-jupiter-engine/${junit-jupiter-version}</bundle>
         <bundle 
dependency='true'>mvn:org.mockito/mockito-core/${mockito-version}</bundle>
         <bundle 
dependency='true'>mvn:net.bytebuddy/byte-buddy/${bytebuddy-version}</bundle>
         <bundle 
dependency='true'>mvn:net.bytebuddy/byte-buddy-agent/${bytebuddy-version}</bundle>
-        <bundle dependency='true'>mvn:org.objenesis/objenesis/3.3</bundle>
-        <bundle dependency='true'>mvn:org.opentest4j/opentest4j/1.3.0</bundle>
+        <bundle 
dependency='true'>mvn:org.objenesis/objenesis/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.opentest4j/opentest4j/${auto-detect-version}</bundle>
         <bundle dependency='true'> 
mvn:org.junit.jupiter/junit-jupiter-api/${junit-jupiter-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-test-junit5/${project.version}</bundle>
     </feature>
@@ -2442,11 +2445,11 @@
         <feature version="[6,7)">jakarta-servlet</feature>
         <bundle 
dependency='true'>mvn:io.undertow/undertow-core/${undertow-version}</bundle>
         <bundle 
dependency='true'>mvn:io.undertow/undertow-servlet/${undertow-version}</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.wildfly.common/wildfly-common/1.5.4.Final$Export-Package=*;version=1.5.4.Final</bundle>
-        <bundle 
dependency='true'>mvn:org.jboss.xnio/xnio-api/3.8.9.Final</bundle>
-        <bundle 
dependency='true'>mvn:org.jboss.xnio/xnio-nio/3.8.9.Final</bundle>
-        <bundle 
dependency='true'>wrap:mvn:org.jboss.threads/jboss-threads/3.5.0.Final</bundle>
-        <bundle 
dependency='true'>mvn:org.wildfly.client/wildfly-client-config/1.0.1.Final</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.wildfly.common/wildfly-common/${auto-detect-version}$Export-Package=*;version=${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.jboss.xnio/xnio-api/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.jboss.xnio/xnio-nio/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>wrap:mvn:org.jboss.threads/jboss-threads/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.wildfly.client/wildfly-client-config/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-attachments/${project.version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-http-base/${project.version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-undertow/${project.version}</bundle>
@@ -2544,7 +2547,7 @@
         <feature version='${camel.osgi.jackson2.version}'>jackson</feature>
         <bundle 
dependency='true'>wrap:mvn:org.knowm.xchange/xchange-core/${xchange-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.knowm.xchange/xchange-binance/${xchange-version}</bundle>
-        <bundle dependency='true'>wrap:mvn:com.github.mmazi/rescu/3.0</bundle>
+        <bundle 
dependency='true'>wrap:mvn:com.github.mmazi/rescu/${auto-detect-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-xchange/${project.version}</bundle>
     </feature>
     <feature name='camel-xj' version='${project.version}' start-level='50'>
@@ -2563,9 +2566,9 @@
         <bundle 
dependency='true'>mvn:org.igniterealtime.smack/smack-extensions/${smack-version}</bundle>
         <bundle 
dependency='true'>mvn:org.igniterealtime.smack/smack-tcp/${smack-version}</bundle>
         <bundle 
dependency='true'>mvn:org.igniterealtime.smack/smack-im/${smack-version}</bundle>
-        <bundle dependency='true'>mvn:org.jxmpp/jxmpp-jid/0.6.4</bundle>
-        <bundle dependency='true'>mvn:org.jxmpp/jxmpp-core/0.6.4</bundle>
-        <bundle dependency='true'>mvn:org.jxmpp/jxmpp-util-cache/0.6.4</bundle>
+        <bundle 
dependency='true'>mvn:org.jxmpp/jxmpp-jid/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.jxmpp/jxmpp-core/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.jxmpp/jxmpp-util-cache/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:org.minidns/minidns-core/${minidns-version}</bundle>
         <bundle dependency='true'>wrap:mvn:xpp3/xpp3/${xpp3-version}</bundle>
         
<bundle>mvn:org.apache.camel.karaf/camel-xmpp/${project.version}</bundle>
@@ -2592,8 +2595,8 @@
     <feature name='camel-zendesk' version='${project.version}' 
start-level='50'>
         <feature version='${camel.osgi.version.range}'>camel-core</feature>
         <feature version='[4.1,5)'>netty</feature>
-        <bundle 
dependency='true'>mvn:org.asynchttpclient/async-http-client/2.12.3</bundle>
-        <bundle 
dependency='true'>mvn:org.asynchttpclient/async-http-client-netty-utils/2.12.3</bundle>
+        <bundle 
dependency='true'>mvn:org.asynchttpclient/async-http-client/${auto-detect-version}</bundle>
+        <bundle 
dependency='true'>mvn:org.asynchttpclient/async-http-client-netty-utils/${auto-detect-version}</bundle>
         <bundle 
dependency='true'>wrap:mvn:com.cloudbees.thirdparty/zendesk-java-client/${zendesk-client-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-handler-proxy/${netty-version}</bundle>
         <bundle 
dependency='true'>mvn:io.netty/netty-codec-http/${netty-version}</bundle>
diff --git a/pom.xml b/pom.xml
index 42ca01d4..6ecbf252 100644
--- a/pom.xml
+++ b/pom.xml
@@ -637,6 +637,10 @@
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-shade-plugin</artifactId>
                     <version>${maven-shade-plugin-version}</version>
+                    <configuration>
+                        <!-- Need to keep the original pom file to be able to 
auto-detect the version of the dependencies -->
+                        
<createDependencyReducedPom>false</createDependencyReducedPom>
+                    </configuration>
                 </plugin>
             </plugins>
         </pluginManagement>
diff --git a/tests/camel-test-blueprint/route.xml 
b/tests/camel-test-blueprint/route.xml
deleted file mode 100644
index 79928335..00000000
--- a/tests/camel-test-blueprint/route.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
-
-    <camelContext xmlns="http://camel.apache.org/schema/blueprint";>
-        <route>
-            <from uri="timer:fire?period=2000"/>
-            <setBody><constant>Hello World</constant></setBody>
-            <to uri="log:test"/>
-        </route>
-    </camelContext>
-
-</blueprint>
\ No newline at end of file
diff --git 
a/tooling/camel-karaf-feature-maven-plugin/src/main/java/org/apache/camel/karaf/feature/maven/AutoDetectVersionMojo.java
 
b/tooling/camel-karaf-feature-maven-plugin/src/main/java/org/apache/camel/karaf/feature/maven/AutoDetectVersionMojo.java
new file mode 100644
index 00000000..6b261e6b
--- /dev/null
+++ 
b/tooling/camel-karaf-feature-maven-plugin/src/main/java/org/apache/camel/karaf/feature/maven/AutoDetectVersionMojo.java
@@ -0,0 +1,289 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.karaf.feature.maven;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import org.apache.karaf.features.internal.model.Bundle;
+import org.apache.karaf.features.internal.model.Feature;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.osgi.framework.Version;
+
+@Mojo(name = "auto-detect-version", defaultPhase = 
LifecyclePhase.PROCESS_RESOURCES)
+public class AutoDetectVersionMojo extends AbstractFeaturesMojo {
+
+    private static final String AUTO_DETECT_PLACEHOLDER_PREFIX = 
"${auto-detect-version";
+    private static final Pattern AUTO_DETECT_PLACEHOLDER = 
Pattern.compile("\\$\\{auto-detect-version(:alias=([^/]+)/([^}]+))?}");
+
+    private static final Pattern MVN_BASED_PROTOCOL = 
Pattern.compile("(wrap:)?mvn:([^/]+)/([^/]+)/([^$]+|\\$\\{auto-detect-version(:[^}]+)?}[^$]*)(\\$.*)?");
+
+    @Component
+    private RepositorySystem repoSystem;
+
+    @Parameter(defaultValue = "${repositorySystemSession}", readonly = true, 
required = true)
+    private RepositorySystemSession repoSession;
+
+    @Parameter(defaultValue = "${project.remoteProjectRepositories}", readonly 
= true, required = true)
+    private List<RemoteRepository> repositories;
+
+    @Override
+    protected void processFeature(Feature feature) {
+        List<Bundle> bundlesToProcess = new ArrayList<>();
+        List<Bundle> roots = new ArrayList<>();
+        for (Bundle bundle : feature.getBundle()) {
+            if (containsPlaceholder(bundle)) {
+                bundlesToProcess.add(bundle);
+            } else {
+                roots.add(bundle);
+            }
+        }
+        if (bundlesToProcess.isEmpty()) {
+            if (getLog().isDebugEnabled()) {
+                getLog().debug("No bundles found in the feature %s with the 
auto-detect version placeholder".formatted(feature.getName()));
+            }
+            return;
+        }
+        if (roots.isEmpty()) {
+            getLog().error("No root bundles found in the feature 
%s".formatted(feature.getName()));
+            return;
+        }
+        autoDetectVersion(feature, roots, bundlesToProcess);
+    }
+
+    /**
+     * Auto-detect the version of the bundles to process according to the 
dependencies of the given root bundles.
+     *
+     * @param feature the feature that contains the bundles
+     * @param roots the root bundles from which the dependencies are resolved
+     * @param bundlesToProcess the bundles for which the version should be 
auto-detected
+     */
+    private void autoDetectVersion(Feature feature, List<Bundle> roots, 
List<Bundle> bundlesToProcess) {
+        Map<String, BundleVersion> dependencies = resolveDependencies(roots);
+        if (dependencies.isEmpty()) {
+            getLog().error("No dependencies found for the root bundles in the 
feature %s".formatted(feature.getName()));
+            return;
+        }
+        for (Bundle bundle : bundlesToProcess) {
+            autoDetectVersion(feature, bundle, dependencies);
+        }
+    }
+
+    /**
+     * Auto-detect the version of the given bundle according to the provided 
dependencies.
+     *
+     * @param feature the feature that contains the bundle
+     * @param bundle the bundle for which the version should be auto-detected
+     * @param dependencies the dependencies to use for the auto-detection 
where the key is the group id / artifact id
+     *                     and the value is the version
+     */
+    private void autoDetectVersion(Feature feature, Bundle bundle, Map<String, 
BundleVersion> dependencies) {
+        String location = bundle.getLocation();
+        Matcher matcher = MVN_BASED_PROTOCOL.matcher(location);
+        if (!matcher.matches()) {
+            getLog().warn("Bundle location %s does not match with a maven 
based protocol in the feature %s".formatted(location, feature.getName()));
+            return;
+        }
+        final String groupId;
+        final String artifactId;
+        Matcher aliasMatcher = 
AUTO_DETECT_PLACEHOLDER.matcher(matcher.group(4));
+        if (!aliasMatcher.find()) {
+            getLog().warn("Bundle location %s does not match with a 
placeholder syntax in the feature %s".formatted(location, feature.getName()));
+            return;
+        }
+        if (aliasMatcher.group(2) != null && aliasMatcher.group(3) != null) {
+            groupId = aliasMatcher.group(2);
+            artifactId = aliasMatcher.group(3);
+            if (getLog().isDebugEnabled()) {
+                getLog().debug("Alias %s/%s detected for the artifact %s in 
the feature %s".formatted(groupId, artifactId, location, feature.getName()));
+            }
+        } else {
+            groupId = matcher.group(2);
+            artifactId = matcher.group(3);
+        }
+        BundleVersion version = dependencies.get("%s/%s".formatted(groupId, 
artifactId));
+        if (version == null) {
+            getLog().error("Version of the artifact %s/%s could not be 
auto-detected in the feature %s".formatted(groupId, artifactId, 
feature.getName()));
+            return;
+        }
+        if (getLog().isDebugEnabled()) {
+            getLog().debug("Version %s detected for the artifact %s/%s in the 
feature %s".formatted(version, groupId, artifactId, feature.getName()));
+        }
+        
bundle.setLocation(AUTO_DETECT_PLACEHOLDER.matcher(location).replaceAll(version.toString()));
+    }
+
+    /**
+     * Resolve the dependencies of the given root bundles. In case of 
conflicts, the highest version is kept.
+     *
+     * @param roots the root bundles from which the dependencies are resolved
+     * @return the dependencies of the given root bundles where the key is the 
group id / artifact id and the value is
+     * the version
+     */
+    private Map<String, BundleVersion> resolveDependencies(List<Bundle> roots) 
{
+        Map<String, BundleVersion> dependencies = new HashMap<>();
+        for (Bundle root : roots) {
+            putAllDependencies(dependencies, resolveDependencies(root));
+        }
+        return dependencies;
+    }
+
+    /**
+     * Put all the dependencies in the given map. In case of conflicts, the 
highest version is kept.
+     *
+     * @param all the map to fill with the dependencies
+     * @param dependencies the dependencies to put in the map
+     */
+    private void putAllDependencies(Map<String, BundleVersion> all, 
Map<String, BundleVersion> dependencies) {
+        for (Map.Entry<String, BundleVersion> entry : dependencies.entrySet()) 
{
+            all.compute(entry.getKey(), (k, v) -> v == null || 
v.compareTo(entry.getValue()) < 0 ? entry.getValue() : v);
+        }
+    }
+
+    /**
+     * Resolve the dependencies of the given root bundle. In case of 
conflicts, the highest version is kept.
+     *
+     * @param root the root bundle from which the dependencies are resolved
+     * @return the dependencies of the given root bundle where the key is the 
group id / artifact id and the value is
+     * the version
+     */
+    private Map<String, BundleVersion> resolveDependencies(Bundle root) {
+        String location = root.getLocation();
+        if (location == null) {
+            getLog().warn("Root bundle location is null");
+            return Map.of();
+        }
+        Matcher matcher = MVN_BASED_PROTOCOL.matcher(location);
+        if (!matcher.matches()) {
+            getLog().warn("Root bundle location %s is not a Maven 
location".formatted(location));
+            return Map.of();
+        }
+        List<Artifact> artifacts = resolveDependencies(matcher.group(2), 
matcher.group(3), matcher.group(4));
+        if (artifacts.isEmpty()) {
+            return Map.of();
+        }
+        Map<String, BundleVersion> dependencies = new HashMap<>();
+        for (Artifact artifact : artifacts) {
+            putArtifact(dependencies, artifact);
+        }
+        return dependencies;
+    }
+
+    /**
+     * Put the artifact in the given map. In case of conflicts, the highest 
version is kept.
+     *
+     * @param dependencies the map to fill with the artifact
+     * @param artifact the artifact to put in the map
+     */
+    private static void putArtifact(Map<String, BundleVersion> dependencies, 
Artifact artifact) {
+        dependencies.compute("%s/%s".formatted(artifact.getGroupId(), 
artifact.getArtifactId()),
+            (k, v) -> {
+                BundleVersion v2 = 
BundleVersion.parseVersion(artifact.getVersion());
+                if (v == null) {
+                    return v2;
+                }
+                return v.compareTo(v2) >= 0 ? v : v2;
+        });
+    }
+
+    /**
+     * Resolve the dependencies of the given maven coordinates.
+     *
+     * @param groupId the group id of the artifact for which the dependencies 
should be resolved
+     * @param artifactId the artifact id of the artifact for which the 
dependencies should be resolved
+     * @param version the version of the artifact for which the dependencies 
should be resolved
+     * @return the dependencies of the artifact corresponding to the given 
maven coordinates
+     */
+    private List<Artifact> resolveDependencies(String groupId, String 
artifactId, String version) {
+        if (getLog().isDebugEnabled()) {
+            getLog().debug("Resolving the dependencies of the artifact 
%s/%s/%s".formatted(groupId, artifactId, version));
+        }
+        DependencyRequest req = new DependencyRequest()
+                .setCollectRequest(new CollectRequest()
+                        .setRoot(new Dependency(new DefaultArtifact(groupId, 
artifactId, "jar", version), "runtime"))
+                        .setRepositories(this.repositories));
+        try {
+            return this.repoSystem.resolveDependencies(this.repoSession, req)
+                    .getArtifactResults()
+                    .stream()
+                    .map(ArtifactResult::getArtifact)
+                    .collect(Collectors.toList());
+        } catch (Exception e) {
+            getLog().warn("Dependencies of the artifact %s could not be 
resolved: %s".formatted(artifactId, e.getMessage()));
+            if (getLog().isDebugEnabled()) {
+                getLog().debug(e);
+            }
+        }
+        return List.of();
+    }
+
+    /**
+     * Indicates whether the given bundle contains the auto-detect version 
placeholder.
+     *
+     * @param bundle the bundle to check
+     * @return {@code true} if the given bundle contains the auto-detect 
version placeholder, {@code false} otherwise
+     */
+    private static boolean containsPlaceholder(Bundle bundle) {
+        String location = bundle.getLocation();
+        return location != null && 
location.contains(AUTO_DETECT_PLACEHOLDER_PREFIX);
+    }
+
+    /**
+     * Represents a bundle version that can be compared even if the version is 
not a valid OSGi version.
+     */
+    private record BundleVersion(String originalVersion, Version version) 
implements Comparable<BundleVersion> {
+
+        static BundleVersion parseVersion(String version) {
+            try {
+                return new BundleVersion(version, 
Version.parseVersion(version));
+            } catch (IllegalArgumentException e) {
+                // The version is not a valid OSGi version
+                return new BundleVersion(version, null);
+            }
+        }
+
+        @Override
+        public int compareTo(BundleVersion other) {
+            if (this.version == null || other.version == null) {
+                return this.originalVersion.compareTo(other.originalVersion);
+            }
+            return this.version.compareTo(other.version);
+        }
+
+        @Override
+        public String toString() {
+            return originalVersion;
+        }
+    }
+}
diff --git 
a/tooling/camel-karaf-feature-maven-plugin/src/main/java/org/apache/camel/karaf/feature/maven/WrappedBundle.java
 
b/tooling/camel-karaf-feature-maven-plugin/src/main/java/org/apache/camel/karaf/feature/maven/WrappedBundle.java
index efa33007..3c4f9934 100644
--- 
a/tooling/camel-karaf-feature-maven-plugin/src/main/java/org/apache/camel/karaf/feature/maven/WrappedBundle.java
+++ 
b/tooling/camel-karaf-feature-maven-plugin/src/main/java/org/apache/camel/karaf/feature/maven/WrappedBundle.java
@@ -24,7 +24,7 @@ import org.apache.karaf.features.internal.model.Bundle;
 
 public class WrappedBundle {
 
-    private static final Pattern WRAP_PROTOCOL = 
Pattern.compile("wrap:mvn:([^/]+)/([^/]+)/([^$]+|\\$\\{[^}]+})(\\$([^=]+=[^&]+|\\$\\{[^}]+}=[^&]|\\$\\{[^}]+})(&([^=]+=[^&]+|\\$\\{[^}]+}=[^&]|\\$\\{[^}]+}))*)?");
+    private static final Pattern WRAP_PROTOCOL = 
Pattern.compile("wrap:mvn:([^/]+)/([^/]+)/([^$]+|\\$\\{[^}]+})(\\$.*)?");
 
     /**
      * The group id of the bundle
diff --git 
a/tooling/camel-karaf-maven-plugin-integration-test/src/it/configure-spi/pom.xml
 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/pom.xml
similarity index 91%
copy from 
tooling/camel-karaf-maven-plugin-integration-test/src/it/configure-spi/pom.xml
copy to 
tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/pom.xml
index dc5efed1..f42d3bc5 100644
--- 
a/tooling/camel-karaf-maven-plugin-integration-test/src/it/configure-spi/pom.xml
+++ 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/pom.xml
@@ -24,8 +24,8 @@ under the License.
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>org.apache.camel.karaf</groupId>
-    
<artifactId>camel-karaf-feature-maven-plugin-configure-spi-test</artifactId>
-    <version>1.0-SNAPSHOT</version>
+    
<artifactId>camel-karaf-feature-maven-plugin-auto-detect-version-test</artifactId>
+    <version>@project.version@</version>
     <packaging>pom</packaging>
 
     <build>
@@ -37,7 +37,7 @@ under the License.
                 <executions>
                     <execution>
                         <goals>
-                            <goal>configure-wrap-spi-provider</goal>
+                            <goal>auto-detect-version</goal>
                         </goals>
                         <configuration>
                             
<featuresFilePath>file:${project.basedir}/src/main/feature/features.xml</featuresFilePath>
diff --git 
a/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/src/main/feature/expected.xml
 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/src/main/feature/expected.xml
new file mode 100644
index 00000000..e1682538
--- /dev/null
+++ 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/src/main/feature/expected.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<features name="test-configure-spi" 
xmlns="http://karaf.apache.org/xmlns/features/v1.6.0";>
+    <feature name="no-placeholder" version="1.0.0">
+        <feature>jackson</feature>
+        <feature version="[4.1,5)">netty</feature>
+        <bundle 
dependency="true">mvn:com.datastax.oss/native-protocol/1.5.1</bundle>
+        <bundle 
dependency="true">mvn:com.typesafe/config/${typesafe-config-version}</bundle>
+    </feature>
+    <feature name="with-placeholders-but-no-root" version="1.0.0">
+        <bundle 
dependency="true">mvn:com.networknt/json-schema-validator/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.ethlo.time/itu/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.yaml/snakeyaml/${auto-detect-version}</bundle>
+    </feature>
+    <feature name="with-placeholders" version="1.0.0">
+        <bundle 
dependency="true">mvn:com.networknt/json-schema-validator/1.4.0</bundle>
+        <bundle dependency="true">mvn:com.ethlo.time/itu/1.8.0</bundle>
+        <bundle 
dependency="true">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.16.2</bundle>
+        <bundle dependency="true">mvn:org.yaml/snakeyaml/2.2</bundle>
+        <bundle 
dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jdom/2.0.6.1_1</bundle>
+        <bundle dependency="true">mvn:com.rometools/rome/2.1.0</bundle>
+        <bundle>mvn:org.apache.camel/camel-json-validator/4.6.0</bundle>
+    </feature>
+    <feature name="with-placeholders-on-wrapped-bundles" version="1.0.0">
+        <bundle 
dependency="true">wrap:mvn:com.networknt/json-schema-validator/1.4.0</bundle>
+        <bundle dependency="true">wrap:mvn:com.ethlo.time/itu/1.8.0</bundle>
+        <bundle 
dependency="true">wrap:mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.16.2$Export-Package=*;version=2.16.2</bundle>
+        <bundle dependency="true">wrap:mvn:org.yaml/snakeyaml/2.2</bundle>
+        <bundle 
dependency="true">wrap:mvn:org.apache.camel/camel-json-validator/4.6.0</bundle>
+    </feature>
+    <feature name="with-placeholders-on-non-existing-dependencies" 
version="1.0.0">
+        <bundle 
dependency="true">mvn:com.networknt.foo/json-schema-validator/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.yaml/snakeyaml-foo/${auto-detect-version}</bundle>
+        <bundle>mvn:org.apache.camel/camel-json-validator/4.6.0</bundle>
+    </feature>
+    <feature name="with-placeholders-with-multiple-versions" version="1.0.0">
+        <bundle 
dependency="true">mvn:com.networknt/json-schema-validator/1.4.0</bundle>
+        <bundle dependency="true">mvn:com.ethlo.time/itu/1.8.0</bundle>
+        <bundle 
dependency="true">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.16.2</bundle>
+        <bundle dependency="true">mvn:org.yaml/snakeyaml/2.2</bundle>
+        <bundle 
dependency="true">mvn:org.apache.camel/camel-json-validator/4.2.0</bundle>
+        <bundle 
dependency="true">mvn:org.apache.camel/camel-json-validator/4.6.0</bundle>
+        <bundle 
dependency="true">mvn:org.apache.camel/camel-json-validator/4.4.0</bundle>
+    </feature>
+</features>
diff --git 
a/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/src/main/feature/features.xml
 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/src/main/feature/features.xml
new file mode 100644
index 00000000..fcc60cbd
--- /dev/null
+++ 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/src/main/feature/features.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<features name="test-configure-spi" 
xmlns="http://karaf.apache.org/xmlns/features/v1.6.0";>
+    <feature name="no-placeholder" version="1.0.0">
+        <feature>jackson</feature>
+        <feature version="[4.1,5)">netty</feature>
+        <bundle 
dependency="true">mvn:com.datastax.oss/native-protocol/1.5.1</bundle>
+        <bundle 
dependency="true">mvn:com.typesafe/config/${typesafe-config-version}</bundle>
+    </feature>
+    <feature name="with-placeholders-but-no-root" version="1.0.0">
+        <bundle 
dependency="true">mvn:com.networknt/json-schema-validator/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.ethlo.time/itu/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.yaml/snakeyaml/${auto-detect-version}</bundle>
+    </feature>
+    <feature name="with-placeholders" version="1.0.0">
+        <bundle 
dependency="true">mvn:com.networknt/json-schema-validator/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.ethlo.time/itu/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.yaml/snakeyaml/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jdom/${auto-detect-version:alias=org.jdom/jdom2}_1</bundle>
+        <bundle dependency="true">mvn:com.rometools/rome/2.1.0</bundle>
+        <bundle>mvn:org.apache.camel/camel-json-validator/4.6.0</bundle>
+    </feature>
+    <feature name="with-placeholders-on-wrapped-bundles" version="1.0.0">
+        <bundle 
dependency="true">wrap:mvn:com.networknt/json-schema-validator/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">wrap:mvn:com.ethlo.time/itu/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">wrap:mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${auto-detect-version}$Export-Package=*;version=${auto-detect-version}</bundle>
+        <bundle 
dependency="true">wrap:mvn:org.yaml/snakeyaml/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">wrap:mvn:org.apache.camel/camel-json-validator/4.6.0</bundle>
+    </feature>
+    <feature name="with-placeholders-on-non-existing-dependencies" 
version="1.0.0">
+        <bundle 
dependency="true">mvn:com.networknt.foo/json-schema-validator/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.yaml/snakeyaml-foo/${auto-detect-version}</bundle>
+        <bundle>mvn:org.apache.camel/camel-json-validator/4.6.0</bundle>
+    </feature>
+    <feature name="with-placeholders-with-multiple-versions" version="1.0.0">
+        <bundle 
dependency="true">mvn:com.networknt/json-schema-validator/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.ethlo.time/itu/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.yaml/snakeyaml/${auto-detect-version}</bundle>
+        <bundle 
dependency="true">mvn:org.apache.camel/camel-json-validator/4.2.0</bundle>
+        <bundle 
dependency="true">mvn:org.apache.camel/camel-json-validator/4.6.0</bundle>
+        <bundle 
dependency="true">mvn:org.apache.camel/camel-json-validator/4.4.0</bundle>
+    </feature>
+</features>
diff --git 
a/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/verify.groovy
 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/verify.groovy
new file mode 100644
index 00000000..9b50f8d1
--- /dev/null
+++ 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/auto-detect-version/verify.groovy
@@ -0,0 +1,58 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.Path;
+
+Path actual = Paths.get(basedir.getAbsolutePath(), 
"target/feature/result.xml");
+
+if (!Files.exists(actual)) {
+    throw new FileNotFoundException("Could not find generated file: $actual");
+}
+
+Path expected = Paths.get(basedir.getAbsolutePath(), 
"src/main/feature/expected.xml");
+
+if (!Files.exists(actual)) {
+    throw new FileNotFoundException("Could not find expected file: $expected");
+}
+
+String actualContent = Files.readString(actual);
+String expectedContent = Files.readString(expected);
+
+if (actualContent != expectedContent) {
+    throw new Exception("Expected and actual features files are not equal");
+}
+
+Path log = Paths.get(basedir.getAbsolutePath(), "build.log");
+
+if (!Files.exists(log)) {
+    throw new FileNotFoundException("Could not find the log file: $log");
+}
+
+String logContent = Files.readString(log);
+
+if (!logContent.contains("[ERROR] No root bundles found")) {
+    throw new Exception("Could not find the expected error message in the log 
file for the feature with-placeholders-but-no-root");
+}
+
+if (!logContent.contains("[ERROR] Version of the artifact 
com.networknt.foo/json-schema-validator could not be auto-detected")
+    || !logContent.contains("[ERROR] Version of the artifact 
org.yaml/snakeyaml-foo could not be auto-detected")) {
+    throw new Exception("Could not find the expected error message in the log 
file for the feature with-placeholders-on-non-existing-dependencies");
+}
+
+return true;
\ No newline at end of file
diff --git 
a/tooling/camel-karaf-maven-plugin-integration-test/src/it/configure-spi/pom.xml
 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/configure-spi/pom.xml
index dc5efed1..615a2348 100644
--- 
a/tooling/camel-karaf-maven-plugin-integration-test/src/it/configure-spi/pom.xml
+++ 
b/tooling/camel-karaf-maven-plugin-integration-test/src/it/configure-spi/pom.xml
@@ -25,7 +25,7 @@ under the License.
 
     <groupId>org.apache.camel.karaf</groupId>
     
<artifactId>camel-karaf-feature-maven-plugin-configure-spi-test</artifactId>
-    <version>1.0-SNAPSHOT</version>
+    <version>@project.version@</version>
     <packaging>pom</packaging>
 
     <build>

Reply via email to