You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2019/02/25 12:47:00 UTC

[camel-k-runtime] branch master updated: Support for camel 3.x #11

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

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git


The following commit(s) were added to refs/heads/master by this push:
     new d3fc05a  Support for camel 3.x #11
     new 023d3c8  Merge pull request #16 from lburgazzoli/github-11-camel-3
d3fc05a is described below

commit d3fc05aa508a109fb859eb6412bcdae2527d4543
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Mon Feb 25 01:18:07 2019 +0100

    Support for camel 3.x #11
---
 .travis.yml                                        |   4 +-
 Jenkinsfile                                        |  10 +-
 .../pom.xml                                        |  19 +-
 .../camel/k/adapter/DefaultAsyncProducer.java      |  25 ++
 .../apache/camel/k/adapter/DefaultComponent.java   |  28 +++
 .../apache/camel/k/adapter/DefaultEndpoint.java    |  27 +++
 .../java/org/apache/camel/k/adapter/Exchanges.java |  30 +++
 .../org/apache/camel/k/adapter/Introspection.java  |  43 ++++
 .../org/apache/camel/k/adapter/Processors.java     |  33 +--
 .../java/org/apache/camel/k/adapter/Resources.java |  33 +--
 .../java/org/apache/camel/k/adapter/Services.java  |  47 ++++
 .../pom.xml                                        |  19 +-
 .../camel/k/adapter/DefaultAsyncProducer.java      |  25 ++
 .../apache/camel/k/adapter/DefaultComponent.java   |  28 +++
 .../apache/camel/k/adapter/DefaultEndpoint.java    |  27 +++
 .../java/org/apache/camel/k/adapter/Exchanges.java |  30 +++
 .../org/apache/camel/k/adapter/Introspection.java  |  47 ++++
 .../org/apache/camel/k/adapter/Processors.java     |  33 +--
 .../java/org/apache/camel/k/adapter/Resources.java |  33 +--
 .../java/org/apache/camel/k/adapter/Services.java  |  48 ++++
 camel-k-maven-plugin/pom.xml                       |   1 +
 .../camel/k/tooling/maven/GenerateCatalogMojo.java |   2 +-
 .../maven/processors/CatalogProcessor_2_x.java     |   1 +
 ...rocessor_2_x.java => CatalogProcessor_3_x.java} |  24 +-
 ...he.camel.k.tooling.maven.model.CatalogProcessor |   1 +
 camel-k-runtime-core/pom.xml                       |  48 +++-
 .../src/main/java/org/apache/camel/k/Runtime.java  |   5 -
 .../org/apache/camel/k/listener/RoutesDumper.java  |   5 +-
 .../org/apache/camel/k/support/RuntimeSupport.java |   4 +-
 .../org/apache/camel/k/support/URIResolver.java    |   4 +-
 camel-k-runtime-groovy/pom.xml                     |  48 +++-
 .../k/groovy/dsl/ComponentConfiguration.groovy     |  10 +-
 .../org/apache/camel/k/groovy/LoaderTest.groovy    |   4 +-
 .../k/groovy/dsl/extension/LogExtensionTest.groovy |   4 +-
 camel-k-runtime-jvm/pom.xml                        |  51 +++-
 .../camel/k/jvm/loader/JavaSourceLoader.java       |  13 +-
 .../camel/k/jvm/RoutesLoadersCommonTest.java       |   1 +
 .../org/apache/camel/k/jvm/RoutesLoadersTest.java  |   4 +
 .../java/org/apache/camel/k/jvm/RuntimeTest.java   |  11 +-
 camel-k-runtime-kotlin/pom.xml                     |  53 ++++-
 .../kotlin/org/apache/camel/k/kotlin/LoaderTest.kt |   4 +-
 .../apache/camel/k/kotlin/dsl/IntegrationTest.kt   |  21 +-
 .../camel/k/kotlin/extension/LogExtensionTest.kt   |   4 +-
 camel-k-runtime-spring-boot/pom.xml                |  42 +++-
 camel-k-runtime-yaml/pom.xml                       |  54 ++++-
 .../org/apache/camel/k/yaml/RoutesLoaderTest.java  |   5 +-
 camel-knative-http/pom.xml                         |  47 +++-
 .../knative/http/KnativeHttpComponent.java         |   4 +-
 camel-knative/pom.xml                              |  57 ++++-
 .../apache/camel/component/knative/Knative.java    |   1 -
 .../camel/component/knative/KnativeComponent.java  |   6 +-
 .../component/knative/KnativeConfiguration.java    |   2 -
 .../camel/component/knative/KnativeEndpoint.java   |  10 +-
 .../component/knative/KnativeEnvironment.java      |   4 +-
 .../camel/component/knative/KnativeProducer.java   |  18 +-
 pom.xml                                            | 263 ++++++++++++++-------
 56 files changed, 1098 insertions(+), 327 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 1f77f5a..6d79b9e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,4 +18,6 @@
 #
 language: java
 
-script: ./mvnw test
+script:
+  - ./mvnw test -Dcamel2
+  - ./mvnw test -Dcamel3
diff --git a/Jenkinsfile b/Jenkinsfile
index 81ce795..1c57e46 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -42,9 +42,15 @@ pipeline {
 
     stages {
 
-        stage('Test & Install') {
+        stage('Test Vs Camel 2.x & Install') {
             steps {
-                sh "./mvnw $MAVEN_PARAMS clean install -f pom.xml"
+                sh "./mvnw $MAVEN_PARAMS clean install -Dcamel2 -f pom.xml"
+            }
+        }
+
+        stage('Test Vs Camel 3.x & Install') {
+            steps {
+                sh "./mvnw $MAVEN_PARAMS clean install -Dcamel3 -f pom.xml"
             }
         }
 
diff --git a/camel-k-runtime-core/pom.xml b/camel-k-adapter-camel-2/pom.xml
similarity index 81%
copy from camel-k-runtime-core/pom.xml
copy to camel-k-adapter-camel-2/pom.xml
index 6f704df..eb91332 100644
--- a/camel-k-runtime-core/pom.xml
+++ b/camel-k-adapter-camel-2/pom.xml
@@ -25,7 +25,7 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-runtime-core</artifactId>
+    <artifactId>camel-k-adapter-camel-2</artifactId>
 
     <dependencies>
 
@@ -38,23 +38,9 @@
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core</artifactId>
+            <version>${camel2.version}</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>${slf4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>${commons-lang.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>${commons-io.version}</version>
-        </dependency>
 
         <!-- ****************************** -->
         <!--                                -->
@@ -74,7 +60,6 @@
             <version>${junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
diff --git a/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultAsyncProducer.java b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultAsyncProducer.java
new file mode 100644
index 0000000..4e3f500
--- /dev/null
+++ b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultAsyncProducer.java
@@ -0,0 +1,25 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import org.apache.camel.Endpoint;
+
+public abstract class DefaultAsyncProducer extends org.apache.camel.impl.DefaultAsyncProducer {
+    public DefaultAsyncProducer(Endpoint endpoint) {
+        super(endpoint);
+    }
+}
diff --git a/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultComponent.java b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultComponent.java
new file mode 100644
index 0000000..01a0f60
--- /dev/null
+++ b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultComponent.java
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import org.apache.camel.CamelContext;
+
+public abstract class DefaultComponent extends org.apache.camel.impl.DefaultComponent {
+    public DefaultComponent() {
+    }
+
+    public DefaultComponent(CamelContext context) {
+        super(context);
+    }
+}
diff --git a/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultEndpoint.java b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultEndpoint.java
new file mode 100644
index 0000000..bd998e0
--- /dev/null
+++ b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/DefaultEndpoint.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import org.apache.camel.Component;
+
+public abstract class DefaultEndpoint extends org.apache.camel.impl.DefaultEndpoint {
+    public DefaultEndpoint() {
+    }
+    public DefaultEndpoint(String endpointUri, Component component) {
+        super(endpointUri, component);
+    }
+}
diff --git a/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Exchanges.java b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Exchanges.java
new file mode 100644
index 0000000..8d6de5e
--- /dev/null
+++ b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Exchanges.java
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultExchange;
+
+public final class Exchanges {
+    protected Exchanges() {
+    }
+
+    public final static Exchange newDefaultExchange(CamelContext context) {
+        return new DefaultExchange(context);
+    }
+}
diff --git a/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Introspection.java b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Introspection.java
new file mode 100644
index 0000000..e08b1f6
--- /dev/null
+++ b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Introspection.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import java.util.Map;
+
+import org.apache.camel.TypeConverter;
+import org.apache.camel.util.IntrospectionSupport;
+
+public final class Introspection {
+    private Introspection() {
+    }
+
+    public static boolean setProperties(TypeConverter typeConverter, Object target, Map<String, Object> properties) throws Exception {
+        return IntrospectionSupport.setProperties(typeConverter, target, properties);
+    }
+
+    public static boolean setProperty(Object target, String name, Object value) throws Exception {
+        return IntrospectionSupport.setProperty(target, name, value, false);
+    }
+
+    public static boolean setProperty(Object target, String name, Object value, boolean builderPattern) throws Exception {
+        return IntrospectionSupport.setProperty(target, name, value, builderPattern);
+    }
+
+    public static boolean getProperties(Object target, Map<String, Object> properties, String optionPrefix, boolean includeNull) {
+        return IntrospectionSupport.getProperties(target, properties, optionPrefix, includeNull);
+    }
+}
diff --git a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Processors.java
similarity index 50%
copy from camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
copy to camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Processors.java
index fee6475..24c580e 100644
--- a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
+++ b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Processors.java
@@ -3,7 +3,7 @@
  * 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 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
@@ -14,30 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.groovy.dsl.extension
+package org.apache.camel.k.adapter;
 
-import org.apache.camel.component.log.LogComponent
-import org.apache.camel.impl.DefaultCamelContext
-import org.apache.camel.impl.DefaultExchange
-import spock.lang.Specification
+import org.apache.camel.AsyncProcessor;
+import org.apache.camel.Processor;
+import org.apache.camel.util.AsyncProcessorConverterHelper;
 
-class LogExtensionTest extends Specification {
-
-    def "invoke extension method - formatter"()  {
-        given:
-        def ctx = new DefaultCamelContext()
-
-        when:
-        def log = new LogComponent()
-        log.formatter {
-            "body: $it.in.body"
-        }
-
-        def ex = new DefaultExchange(ctx)
-        ex.in.body = 'hello'
-        def result = log.exchangeFormatter.format(ex)
+public final class Processors {
+    private Processors() {
+    }
 
-        then:
-        result == 'body: hello'
+    public static AsyncProcessor convertToAsync(Processor processor) {
+        return AsyncProcessorConverterHelper.convert(processor);
     }
 }
diff --git a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Resources.java
similarity index 50%
copy from camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
copy to camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Resources.java
index fee6475..ba034d4 100644
--- a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
+++ b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Resources.java
@@ -3,7 +3,7 @@
  * 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 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
@@ -14,30 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.groovy.dsl.extension
+package org.apache.camel.k.adapter;
 
-import org.apache.camel.component.log.LogComponent
-import org.apache.camel.impl.DefaultCamelContext
-import org.apache.camel.impl.DefaultExchange
-import spock.lang.Specification
+import java.io.IOException;
+import java.io.InputStream;
 
-class LogExtensionTest extends Specification {
+import org.apache.camel.CamelContext;
+import org.apache.camel.util.ResourceHelper;
 
-    def "invoke extension method - formatter"()  {
-        given:
-        def ctx = new DefaultCamelContext()
-
-        when:
-        def log = new LogComponent()
-        log.formatter {
-            "body: $it.in.body"
-        }
-
-        def ex = new DefaultExchange(ctx)
-        ex.in.body = 'hello'
-        def result = log.exchangeFormatter.format(ex)
+public final class Resources {
+    private Resources() {
+    }
 
-        then:
-        result == 'body: hello'
+    public static InputStream resolveResourceAsInputStream(CamelContext camelContext, String uri) throws IOException {
+        return ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, uri);
     }
 }
diff --git a/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Services.java b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Services.java
new file mode 100644
index 0000000..560021f
--- /dev/null
+++ b/camel-k-adapter-camel-2/src/main/java/org/apache/camel/k/adapter/Services.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import java.util.Arrays;
+
+import org.apache.camel.util.ServiceHelper;
+
+public final class Services {
+    private Services() {
+
+    }
+
+    public static void start(Object... services) throws Exception {
+        ServiceHelper.startServices(services);
+    }
+
+    public static void stop(Object... services) throws Exception {
+        ServiceHelper.stopServices(services);
+    }
+
+    public static void suspend(Object... services) throws Exception {
+        ServiceHelper.suspendServices(Arrays.asList(services));
+    }
+
+    public static void resume(Object... services) throws Exception {
+        ServiceHelper.resumeService(Arrays.asList(services));
+    }
+
+    public static void shutdown(Object... services) throws Exception {
+        ServiceHelper.stopAndShutdownServices(Arrays.asList(services));
+    }
+}
diff --git a/camel-k-runtime-core/pom.xml b/camel-k-adapter-camel-3/pom.xml
similarity index 81%
copy from camel-k-runtime-core/pom.xml
copy to camel-k-adapter-camel-3/pom.xml
index 6f704df..0477802 100644
--- a/camel-k-runtime-core/pom.xml
+++ b/camel-k-adapter-camel-3/pom.xml
@@ -25,7 +25,7 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-runtime-core</artifactId>
+    <artifactId>camel-k-adapter-camel-3</artifactId>
 
     <dependencies>
 
@@ -38,23 +38,9 @@
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core</artifactId>
+            <version>${camel3.version}</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>${slf4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>${commons-lang.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>${commons-io.version}</version>
-        </dependency>
 
         <!-- ****************************** -->
         <!--                                -->
@@ -74,7 +60,6 @@
             <version>${junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
diff --git a/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultAsyncProducer.java b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultAsyncProducer.java
new file mode 100644
index 0000000..5fe22b0
--- /dev/null
+++ b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultAsyncProducer.java
@@ -0,0 +1,25 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import org.apache.camel.Endpoint;
+
+public abstract class DefaultAsyncProducer extends org.apache.camel.support.DefaultAsyncProducer {
+    public DefaultAsyncProducer(Endpoint endpoint) {
+        super(endpoint);
+    }
+}
diff --git a/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultComponent.java b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultComponent.java
new file mode 100644
index 0000000..a9f746f
--- /dev/null
+++ b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultComponent.java
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import org.apache.camel.CamelContext;
+
+public abstract class DefaultComponent extends org.apache.camel.support.DefaultComponent {
+    public DefaultComponent() {
+    }
+
+    public DefaultComponent(CamelContext context) {
+        super(context);
+    }
+}
diff --git a/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultEndpoint.java b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultEndpoint.java
new file mode 100644
index 0000000..db38454
--- /dev/null
+++ b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/DefaultEndpoint.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import org.apache.camel.Component;
+
+public abstract class DefaultEndpoint extends org.apache.camel.support.DefaultEndpoint {
+    public DefaultEndpoint() {
+    }
+    public DefaultEndpoint(String endpointUri, Component component) {
+        super(endpointUri, component);
+    }
+}
diff --git a/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Exchanges.java b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Exchanges.java
new file mode 100644
index 0000000..4e56962
--- /dev/null
+++ b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Exchanges.java
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.support.DefaultExchange;
+
+public final class Exchanges  {
+    protected Exchanges() {
+    }
+
+    public final static Exchange newDefaultExchange(CamelContext context) {
+        return new DefaultExchange(context);
+    }
+}
diff --git a/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Introspection.java b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Introspection.java
new file mode 100644
index 0000000..2afca13
--- /dev/null
+++ b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Introspection.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.TypeConverter;
+import org.apache.camel.support.IntrospectionSupport;
+
+public final class Introspection {
+    private Introspection() {
+    }
+
+    public static boolean setProperties(TypeConverter typeConverter, Object target, Map<String, Object> properties) throws Exception {
+        return IntrospectionSupport.setProperties(typeConverter, target, properties);
+    }
+
+    public static boolean setProperty(Object target, String name, Object value) throws Exception {
+        return IntrospectionSupport.setProperty(target, name, value, false);
+    }
+
+    public static boolean setProperty(Object target, String name, Object value, boolean builderPattern) throws Exception {
+        return IntrospectionSupport.setProperty(target, name, value, builderPattern);
+    }
+
+    public static Map<String, Object> getProperties(Object target, String optionPrefix, boolean includeNull) {
+        Map<String, Object> properties = new HashMap<>();
+        IntrospectionSupport.getProperties(target, properties, optionPrefix, includeNull);
+
+        return properties;
+    }
+}
diff --git a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Processors.java
similarity index 50%
copy from camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
copy to camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Processors.java
index fee6475..585dfa4 100644
--- a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
+++ b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Processors.java
@@ -3,7 +3,7 @@
  * 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 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
@@ -14,30 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.groovy.dsl.extension
+package org.apache.camel.k.adapter;
 
-import org.apache.camel.component.log.LogComponent
-import org.apache.camel.impl.DefaultCamelContext
-import org.apache.camel.impl.DefaultExchange
-import spock.lang.Specification
+import org.apache.camel.AsyncProcessor;
+import org.apache.camel.Processor;
+import org.apache.camel.support.AsyncProcessorConverterHelper;
 
-class LogExtensionTest extends Specification {
-
-    def "invoke extension method - formatter"()  {
-        given:
-        def ctx = new DefaultCamelContext()
-
-        when:
-        def log = new LogComponent()
-        log.formatter {
-            "body: $it.in.body"
-        }
-
-        def ex = new DefaultExchange(ctx)
-        ex.in.body = 'hello'
-        def result = log.exchangeFormatter.format(ex)
+public final class Processors {
+    private Processors() {
+    }
 
-        then:
-        result == 'body: hello'
+    public static AsyncProcessor convertToAsync(Processor processor) {
+        return AsyncProcessorConverterHelper.convert(processor);
     }
 }
diff --git a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Resources.java
similarity index 50%
copy from camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
copy to camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Resources.java
index fee6475..eb74616 100644
--- a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
+++ b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Resources.java
@@ -3,7 +3,7 @@
  * 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 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
@@ -14,30 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.groovy.dsl.extension
+package org.apache.camel.k.adapter;
 
-import org.apache.camel.component.log.LogComponent
-import org.apache.camel.impl.DefaultCamelContext
-import org.apache.camel.impl.DefaultExchange
-import spock.lang.Specification
+import java.io.IOException;
+import java.io.InputStream;
 
-class LogExtensionTest extends Specification {
+import org.apache.camel.CamelContext;
+import org.apache.camel.support.ResourceHelper;
 
-    def "invoke extension method - formatter"()  {
-        given:
-        def ctx = new DefaultCamelContext()
-
-        when:
-        def log = new LogComponent()
-        log.formatter {
-            "body: $it.in.body"
-        }
-
-        def ex = new DefaultExchange(ctx)
-        ex.in.body = 'hello'
-        def result = log.exchangeFormatter.format(ex)
+public final class Resources {
+    private Resources() {
+    }
 
-        then:
-        result == 'body: hello'
+    public static InputStream resolveResourceAsInputStream(CamelContext camelContext, String uri) throws IOException {
+        return ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, uri);
     }
 }
diff --git a/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Services.java b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Services.java
new file mode 100644
index 0000000..fbf07f5
--- /dev/null
+++ b/camel-k-adapter-camel-3/src/main/java/org/apache/camel/k/adapter/Services.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.adapter;
+
+
+import java.util.Arrays;
+
+import org.apache.camel.support.service.ServiceHelper;
+
+public final class Services {
+    private Services() {
+
+    }
+
+    public static void start(Object... services) throws Exception {
+        ServiceHelper.startService(services);
+    }
+
+    public static void stop(Object... services) throws Exception {
+        ServiceHelper.stopService(services);
+    }
+
+    public static void suspend(Object... services) throws Exception {
+        ServiceHelper.suspendServices(Arrays.asList(services));
+    }
+
+    public static void resume(Object... services) throws Exception {
+        ServiceHelper.resumeService(Arrays.asList(services));
+    }
+
+    public static void shutdown(Object... services) throws Exception {
+        ServiceHelper.stopAndShutdownServices(Arrays.asList(services));
+    }
+}
diff --git a/camel-k-maven-plugin/pom.xml b/camel-k-maven-plugin/pom.xml
index a6ad36e..61a8fc8 100644
--- a/camel-k-maven-plugin/pom.xml
+++ b/camel-k-maven-plugin/pom.xml
@@ -87,6 +87,7 @@
     <dependency>
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-catalog</artifactId>
+      <version>${camel.version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
diff --git a/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java b/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
index d6abd9c..1b5a2ba 100644
--- a/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
+++ b/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java
@@ -128,7 +128,7 @@ public class GenerateCatalogMojo extends AbstractMojo {
             try (Writer writer = Files.newBufferedWriter(output, StandardCharsets.UTF_8)) {
                 CamelCatalog cr = new CamelCatalog.Builder()
                     .metadata(new ObjectMeta.Builder()
-                        .name("camel-catalog-" + catalog.getCatalogVersion())
+                        .name("camel-catalog-" + catalog.getCatalogVersion().toLowerCase())
                         .putLabels("app", "camel-k")
                         .putLabels("camel.apache.org/catalog.version", catalog.getCatalogVersion())
                         .putLabels("camel.apache.org/catalog.loader.version", catalog.getLoadedVersion())
diff --git a/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_2_x.java b/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_2_x.java
index 12a82ae..a48f819 100644
--- a/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_2_x.java
+++ b/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_2_x.java
@@ -93,6 +93,7 @@ public class CatalogProcessor_2_x implements CatalogProcessor {
             artifact.setGroupId("org.apache.camel.k");
             artifact.setArtifactId("camel-k-runtime-jvm");
             artifact.addDependency("org.apache.camel", "camel-core");
+            artifact.addDependency("org.apache.camel.k", "camel-k-adapter-camel-2");
 
             artifacts.put(artifact.getArtifactId(), artifact);
         }
diff --git a/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_2_x.java b/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_3_x.java
similarity index 90%
copy from camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_2_x.java
copy to camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_3_x.java
index 12a82ae..94fd552 100644
--- a/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_2_x.java
+++ b/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor_3_x.java
@@ -21,13 +21,12 @@ import java.util.List;
 import java.util.Map;
 
 import com.vdurmont.semver4j.Semver;
-
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.k.tooling.maven.model.CamelArtifact;
 import org.apache.camel.k.tooling.maven.model.CatalogProcessor;
 import org.apache.maven.project.MavenProject;
 
-public class CatalogProcessor_2_x implements CatalogProcessor {
+public class CatalogProcessor_3_x implements CatalogProcessor {
     private static final List<String> KNOWN_HTTP_URIS = Arrays.asList(
         "ahc",
         "ahc-ws",
@@ -76,7 +75,7 @@ public class CatalogProcessor_2_x implements CatalogProcessor {
 
     @Override
     public boolean accepts(CamelCatalog catalog) {
-        return new Semver(catalog.getCatalogVersion(), Semver.SemverType.IVY).satisfies("[2.18,3]");
+        return new Semver(catalog.getCatalogVersion(), Semver.SemverType.IVY).withClearedSuffixAndBuild().satisfies("[3,4]");
     }
 
     @Override
@@ -92,7 +91,9 @@ public class CatalogProcessor_2_x implements CatalogProcessor {
             CamelArtifact artifact = new CamelArtifact();
             artifact.setGroupId("org.apache.camel.k");
             artifact.setArtifactId("camel-k-runtime-jvm");
+            artifact.setVersion(project.getVersion());
             artifact.addDependency("org.apache.camel", "camel-core");
+            artifact.addDependency("org.apache.camel.k", "camel-k-adapter-camel-3");
 
             artifacts.put(artifact.getArtifactId(), artifact);
         }
@@ -107,6 +108,7 @@ public class CatalogProcessor_2_x implements CatalogProcessor {
             CamelArtifact artifact = new CamelArtifact();
             artifact.setGroupId("org.apache.camel.k");
             artifact.setArtifactId("camel-k-runtime-groovy");
+            artifact.setVersion(project.getVersion());
             artifact.addDependency("org.apache.camel", "camel-groovy");
 
             artifacts.put(artifact.getArtifactId(), artifact);
@@ -122,20 +124,7 @@ public class CatalogProcessor_2_x implements CatalogProcessor {
             CamelArtifact artifact = new CamelArtifact();
             artifact.setGroupId("org.apache.camel.k");
             artifact.setArtifactId("camel-k-runtime-kotlin");
-
-            artifacts.put(artifact.getArtifactId(), artifact);
-        }
-
-        // ************************
-        //
-        // camel-k-runtime-yaml
-        //
-        // ************************
-
-        {
-            CamelArtifact artifact = new CamelArtifact();
-            artifact.setGroupId("org.apache.camel.k");
-            artifact.setArtifactId("camel-k-runtime-yaml");
+            artifact.setVersion(project.getVersion());
 
             artifacts.put(artifact.getArtifactId(), artifact);
         }
@@ -150,6 +139,7 @@ public class CatalogProcessor_2_x implements CatalogProcessor {
             CamelArtifact artifact = new CamelArtifact();
             artifact.setGroupId("org.apache.camel.k");
             artifact.setArtifactId("camel-knative");
+            artifact.setVersion(project.getVersion());
             artifact.createScheme("knative").setHttp(true);
             artifact.addDependency("org.apache.camel", "camel-netty4-http");
 
diff --git a/camel-k-maven-plugin/src/main/resources/META-INF/services/org.apache.camel.k.tooling.maven.model.CatalogProcessor b/camel-k-maven-plugin/src/main/resources/META-INF/services/org.apache.camel.k.tooling.maven.model.CatalogProcessor
index 1531453..5a778d4 100644
--- a/camel-k-maven-plugin/src/main/resources/META-INF/services/org.apache.camel.k.tooling.maven.model.CatalogProcessor
+++ b/camel-k-maven-plugin/src/main/resources/META-INF/services/org.apache.camel.k.tooling.maven.model.CatalogProcessor
@@ -1 +1,2 @@
 org.apache.camel.k.tooling.maven.processors.CatalogProcessor_2_x
+org.apache.camel.k.tooling.maven.processors.CatalogProcessor_3_x
diff --git a/camel-k-runtime-core/pom.xml b/camel-k-runtime-core/pom.xml
index 6f704df..3eb913b 100644
--- a/camel-k-runtime-core/pom.xml
+++ b/camel-k-runtime-core/pom.xml
@@ -36,15 +36,17 @@
         <!-- ****************************** -->
 
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
             <version>${slf4j.version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
@@ -74,7 +76,6 @@
             <version>${junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
@@ -83,4 +84,39 @@
         </dependency>
     </dependencies>
 
+    <profiles>
+        <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-3</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-2</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
index 31fbbe5..d21e829 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
@@ -21,8 +21,6 @@ import java.util.Properties;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.properties.PropertiesComponent;
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.function.ThrowingConsumer;
 
 public interface Runtime {
     /**
@@ -58,19 +56,16 @@ public interface Runtime {
         void bind(String name, Object bean);
 
         @SuppressWarnings("deprecation")
-        @Override
         default public Object lookup(String name) {
             return lookupByName(name);
         }
 
         @SuppressWarnings("deprecation")
-        @Override
         default public <T> T lookup(String name, Class<T> type) {
             return lookupByNameAndType(name, type);
         }
 
         @SuppressWarnings("deprecation")
-        @Override
         default public <T> Map<String, T> lookupByType(Class<T> type) {
             return findByTypeWithName(type);
         }
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RoutesDumper.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RoutesDumper.java
index 379fc7f..7f0eec6 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RoutesDumper.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RoutesDumper.java
@@ -20,6 +20,7 @@ import javax.xml.bind.JAXBException;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.k.Runtime;
+import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
@@ -38,10 +39,10 @@ public class RoutesDumper extends AbstractPhaseListener {
         CamelContext context = runtime.getContext();
 
         RoutesDefinition routes = new RoutesDefinition();
-        routes.setRoutes(context.getRouteDefinitions());
+        routes.setRoutes(context.adapt(ModelCamelContext.class).getRouteDefinitions());
 
         RestsDefinition rests = new RestsDefinition();
-        rests.setRests(context.getRestDefinitions());
+        rests.setRests(context.adapt(ModelCamelContext.class).getRestDefinitions());
 
         try {
             if (LOGGER.isDebugEnabled() && !routes.getRoutes().isEmpty()) {
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
index ce41289..170d115 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
@@ -37,9 +37,9 @@ import org.apache.camel.k.ContextCustomizer;
 import org.apache.camel.k.RoutesLoader;
 import org.apache.camel.k.Runtime;
 import org.apache.camel.k.Source;
+import org.apache.camel.k.adapter.Introspection;
 import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.RestConfiguration;
-import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.io.FilenameUtils;
 
@@ -118,7 +118,7 @@ public final class RuntimeSupport {
                     final Object val = entry.getValue();
 
                     try {
-                        if (IntrospectionSupport.setProperty(target, key, val, false)) {
+                        if (Introspection.setProperty(target, key, val)) {
                             count.incrementAndGet();
                         }
                     } catch (Exception ex) {
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/URIResolver.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/URIResolver.java
index 3b20602..3352840 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/URIResolver.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/URIResolver.java
@@ -26,7 +26,7 @@ import java.util.zip.GZIPInputStream;
 import org.apache.camel.CamelContext;
 import org.apache.camel.k.Constants;
 import org.apache.camel.k.Source;
-import org.apache.camel.util.ResourceHelper;
+import org.apache.camel.k.adapter.Resources;
 import org.apache.camel.util.StringHelper;
 
 
@@ -46,7 +46,7 @@ public class URIResolver {
             // Using platform encoding on purpose
             is = new ByteArrayInputStream(content.getBytes());
         } else {
-            is = ResourceHelper.resolveMandatoryResourceAsInputStream(ctx, source.getLocation());
+            is = Resources.resolveResourceAsInputStream(ctx, source.getLocation());
         }
 
         return source.isCompressed() ? new GZIPInputStream(Base64.getDecoder().wrap(is)) : is;
diff --git a/camel-k-runtime-groovy/pom.xml b/camel-k-runtime-groovy/pom.xml
index 389d7b1..24f9485 100644
--- a/camel-k-runtime-groovy/pom.xml
+++ b/camel-k-runtime-groovy/pom.xml
@@ -31,13 +31,14 @@
         <dependency>
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-runtime-jvm</artifactId>
-            <version>${project.version}</version>
         </dependency>
+
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core</artifactId>
             <scope>provided</scope>
         </dependency>
+
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-groovy</artifactId>
@@ -49,6 +50,7 @@
             </exclusions>
             <scope>provided</scope>
         </dependency>
+
         <dependency>
             <groupId>org.codehaus.groovy</groupId>
             <artifactId>groovy</artifactId>
@@ -62,14 +64,12 @@
         <!--                                -->
         <!-- ****************************** -->
 
-
         <dependency>
             <groupId>org.codehaus.groovy</groupId>
             <artifactId>groovy-test</artifactId>
             <version>${groovy.version}</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.spockframework</groupId>
             <artifactId>spock-core</artifactId>
@@ -82,7 +82,6 @@
                 </exclusion>
             </exclusions>
         </dependency>
-
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
@@ -114,4 +113,45 @@
         </plugins>
     </build>
 
+    <profiles>
+        <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-3</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <!-- test -->
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>camel-properties</artifactId>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-2</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/camel-k-runtime-groovy/src/main/groovy/org/apache/camel/k/groovy/dsl/ComponentConfiguration.groovy b/camel-k-runtime-groovy/src/main/groovy/org/apache/camel/k/groovy/dsl/ComponentConfiguration.groovy
index 2454e72..bfc080d 100644
--- a/camel-k-runtime-groovy/src/main/groovy/org/apache/camel/k/groovy/dsl/ComponentConfiguration.groovy
+++ b/camel-k-runtime-groovy/src/main/groovy/org/apache/camel/k/groovy/dsl/ComponentConfiguration.groovy
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.k.groovy.dsl
 
-import org.apache.camel.util.IntrospectionSupport
+import org.apache.camel.k.adapter.Introspection
 
 class ComponentConfiguration {
     private final org.apache.camel.Component component
@@ -47,21 +47,19 @@ class ComponentConfiguration {
             }
         }
 
-        if (!IntrospectionSupport.setProperty(component, name, value, true)) {
+        if (!Introspection.setProperty(component, name, value, true)) {
             throw new MissingMethodException(name, this.component.class, args as Object[])
         }
     }
 
     def propertyMissing(String name, value) {
-        if (!IntrospectionSupport.setProperty(component, name, value, true)) {
+        if (!Introspection.setProperty(component, name, value, true)) {
             throw new MissingMethodException(name, this.component.class, value)
         }
     }
 
     def propertyMissing(String name) {
-        def properties = [:]
-
-        IntrospectionSupport.getProperties(component, properties, null, false)
+        def properties = Introspection.getProperties(component, properties, null, false)
 
         return properties[name]
     }
diff --git a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/LoaderTest.groovy b/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/LoaderTest.groovy
index 72fe2db..13b5f24 100644
--- a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/LoaderTest.groovy
+++ b/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/LoaderTest.groovy
@@ -27,16 +27,18 @@ class LoaderTest extends Specification {
 
     def "load route from classpath"() {
         given:
+            def context = new DefaultCamelContext()
             def source = Source.create("classpath:routes.groovy")
 
         when:
-            def loader = RuntimeSupport.loaderFor(new DefaultCamelContext(), source)
+            def loader = RuntimeSupport.loaderFor(context, source)
             def builder = loader.load(new InMemoryRegistry(), source)
 
         then:
             loader instanceof GroovyRoutesLoader
             builder != null
 
+            builder.setContext(context)
             builder.configure()
 
             def routes = builder.routeCollection.routes
diff --git a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy b/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
index fee6475..8dd39e0 100644
--- a/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
+++ b/camel-k-runtime-groovy/src/test/groovy/org/apache/camel/k/groovy/dsl/extension/LogExtensionTest.groovy
@@ -18,7 +18,7 @@ package org.apache.camel.k.groovy.dsl.extension
 
 import org.apache.camel.component.log.LogComponent
 import org.apache.camel.impl.DefaultCamelContext
-import org.apache.camel.impl.DefaultExchange
+import org.apache.camel.k.adapter.Exchanges
 import spock.lang.Specification
 
 class LogExtensionTest extends Specification {
@@ -33,7 +33,7 @@ class LogExtensionTest extends Specification {
             "body: $it.in.body"
         }
 
-        def ex = new DefaultExchange(ctx)
+        def ex = Exchanges.newDefaultExchange(ctx)
         ex.in.body = 'hello'
         def result = log.exchangeFormatter.format(ex)
 
diff --git a/camel-k-runtime-jvm/pom.xml b/camel-k-runtime-jvm/pom.xml
index 4cbaedf..5dfd3dc 100644
--- a/camel-k-runtime-jvm/pom.xml
+++ b/camel-k-runtime-jvm/pom.xml
@@ -36,15 +36,16 @@
         <!-- ****************************** -->
 
         <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-runtime-core</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-runtime-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
+
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-core</artifactId>
@@ -126,4 +127,44 @@
         </plugins>
     </build>
 
+    <profiles>
+        <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- test -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-3</artifactId>
+                    <scope>test</scope>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>camel-properties</artifactId>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- test -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-2</artifactId>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/camel-k-runtime-jvm/src/main/java/org/apache/camel/k/jvm/loader/JavaSourceLoader.java b/camel-k-runtime-jvm/src/main/java/org/apache/camel/k/jvm/loader/JavaSourceLoader.java
index 6d67166..6e201bf 100644
--- a/camel-k-runtime-jvm/src/main/java/org/apache/camel/k/jvm/loader/JavaSourceLoader.java
+++ b/camel-k-runtime-jvm/src/main/java/org/apache/camel/k/jvm/loader/JavaSourceLoader.java
@@ -59,11 +59,13 @@ public class JavaSourceLoader implements RoutesLoader {
                     // create the builder
                     RoutesBuilder builder = compiled.create().get();
 
-                    // Wrap routes builder
-                    includeRoutes(builder);
-
                     if (builder instanceof RouteBuilder) {
-                        Map<String, RestConfigurationDefinition> configurations = ((RouteBuilder) builder).getRestConfigurations();
+                        RouteBuilder rb = ((RouteBuilder) builder);
+
+                        rb.setContext(context);
+                        rb.configure();
+
+                        Map<String, RestConfigurationDefinition> configurations = rb.getRestConfigurations();
 
                         //
                         // TODO: RouteBuilder.getRestConfigurations() should not
@@ -83,6 +85,9 @@ public class JavaSourceLoader implements RoutesLoader {
                                 context.addRestConfiguration(conf);
                             }
                         }
+
+                        setRouteCollection(rb.getRouteCollection());
+                        setRestCollection(rb.getRestCollection());
                     }
                 }
             }
diff --git a/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersCommonTest.java b/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersCommonTest.java
index f4c4f4a..fb2a8a0 100644
--- a/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersCommonTest.java
+++ b/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersCommonTest.java
@@ -48,6 +48,7 @@ public class RoutesLoadersCommonTest {
         assertThat(loader).isInstanceOf(type);
         assertThat(builder).isNotNull();
 
+        builder.setContext(new DefaultCamelContext());
         builder.configure();
 
         List<RouteDefinition> routes = builder.getRouteCollection().getRoutes();
diff --git a/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersTest.java b/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersTest.java
index e5a0b22..bc44345 100644
--- a/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersTest.java
+++ b/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RoutesLoadersTest.java
@@ -54,6 +54,8 @@ public class RoutesLoadersTest {
 
     @Test
     public void testLoadJavaWithNestedClass() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+
         Source source = Source.create("classpath:MyRoutesWithNestedClass.java");
         RoutesLoader loader = RuntimeSupport.loaderFor(new DefaultCamelContext(), source);
         RouteBuilder builder = loader.load(new InMemoryRegistry(), source);
@@ -61,6 +63,7 @@ public class RoutesLoadersTest {
         assertThat(loader).isInstanceOf(JavaSourceLoader.class);
         assertThat(builder).isNotNull();
 
+        builder.setContext(context);
         builder.configure();
 
         List<RouteDefinition> routes = builder.getRouteCollection().getRoutes();
@@ -74,6 +77,7 @@ public class RoutesLoadersTest {
     @Test
     public void testLoadJavaWithRestConfiguration() throws Exception {
         CamelContext context = new DefaultCamelContext();
+
         Source source = Source.create("classpath:MyRoutesWithRestConfiguration.java");
         RoutesLoader loader = RuntimeSupport.loaderFor(new DefaultCamelContext(), source);
         RouteBuilder builder = loader.load(new InMemoryRegistry(), source);
diff --git a/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RuntimeTest.java b/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RuntimeTest.java
index b86bbb9..0070e98 100644
--- a/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RuntimeTest.java
+++ b/camel-k-runtime-jvm/src/test/java/org/apache/camel/k/jvm/RuntimeTest.java
@@ -23,12 +23,13 @@ import java.util.List;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Route;
 import org.apache.camel.k.Runtime;
+import org.apache.camel.k.adapter.Resources;
 import org.apache.camel.k.listener.ContextConfigurer;
 import org.apache.camel.k.listener.ContextLifecycleConfigurer;
 import org.apache.camel.k.listener.RoutesConfigurer;
 import org.apache.camel.k.support.PlatformStreamHandler;
+import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.ResourceHelper;
 import org.apache.commons.io.IOUtils;
 import org.junit.jupiter.api.Test;
 
@@ -72,8 +73,8 @@ public class RuntimeTest {
             runtime.addListener(Runtime.Phase.Started, r -> {
                 CamelContext context = r.getContext();
 
-                assertThat(context.getRouteDefinitions()).isNotEmpty();
-                assertThat(context.getRestDefinitions()).isNotEmpty();
+                assertThat(context.adapt(ModelCamelContext.class).getRouteDefinitions()).isNotEmpty();
+                assertThat(context.adapt(ModelCamelContext.class).getRestDefinitions()).isNotEmpty();
 
                 runtime.stop();
             });
@@ -91,13 +92,13 @@ public class RuntimeTest {
 
         CamelContext context = new ApplicationRuntime().getContext();
 
-        try (InputStream is = ResourceHelper.resolveMandatoryResourceAsInputStream(context, "platform:my-resource.txt")) {
+        try (InputStream is = Resources.resolveResourceAsInputStream(context, "platform:my-resource.txt")) {
             String content = IOUtils.toString(is, Charset.defaultCharset());
 
             assertThat(content).isEqualTo("value from file resource");
         }
 
-        try (InputStream is = ResourceHelper.resolveMandatoryResourceAsInputStream(context, "platform:my-other-resource.txt")) {
+        try (InputStream is = Resources.resolveResourceAsInputStream(context, "platform:my-other-resource.txt")) {
             String content = IOUtils.toString(is, Charset.defaultCharset());
 
             assertThat(content).isEqualTo("value from env");
diff --git a/camel-k-runtime-kotlin/pom.xml b/camel-k-runtime-kotlin/pom.xml
index 6d4bfc8..fcab33e 100644
--- a/camel-k-runtime-kotlin/pom.xml
+++ b/camel-k-runtime-kotlin/pom.xml
@@ -29,15 +29,16 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-runtime-jvm</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-runtime-jvm</artifactId>
-            <version>${project.version}</version>
-        </dependency>
+
         <dependency>
             <groupId>org.jetbrains.kotlin</groupId>
             <artifactId>kotlin-stdlib-jdk8</artifactId>
@@ -77,7 +78,6 @@
             <version>${junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
@@ -120,4 +120,45 @@
         </plugins>
     </build>
 
+    <profiles>
+        <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-3</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <!-- test -->
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>camel-properties</artifactId>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-2</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/LoaderTest.kt b/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/LoaderTest.kt
index 8b09000..c31af21 100644
--- a/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/LoaderTest.kt
+++ b/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/LoaderTest.kt
@@ -29,13 +29,15 @@ class LoaderTest {
 
     @Test
     fun `load route from classpath`() {
+        var context = DefaultCamelContext()
         var source = Source.create("classpath:routes.kts")
-        val loader = RuntimeSupport.loaderFor(DefaultCamelContext(), source)
+        val loader = RuntimeSupport.loaderFor(context, source)
         val builder = loader.load(InMemoryRegistry(), source)
 
         assertThat(loader).isInstanceOf(KotlinRoutesLoader::class.java)
         assertThat(builder).isNotNull
 
+        builder.context = context
         builder.configure()
 
         val routes = builder.routeCollection.routes
diff --git a/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/dsl/IntegrationTest.kt b/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/dsl/IntegrationTest.kt
index ca1f73c..9022b3c 100644
--- a/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/dsl/IntegrationTest.kt
+++ b/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/dsl/IntegrationTest.kt
@@ -1,3 +1,19 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.camel.k.kotlin.dsl
 
 import org.apache.camel.Processor
@@ -6,6 +22,7 @@ import org.apache.camel.component.seda.SedaComponent
 import org.apache.camel.k.Runtime
 import org.apache.camel.k.jvm.ApplicationRuntime
 import org.apache.camel.k.listener.RoutesConfigurer
+import org.apache.camel.model.ModelCamelContext
 import org.apache.camel.spi.ExchangeFormatter
 import org.assertj.core.api.Assertions.assertThat
 import org.junit.jupiter.api.Test
@@ -24,8 +41,8 @@ class IntegrationTest {
         assertThat(runtime.context.restConfiguration.port).isEqualTo(9192)
         assertThat(runtime.context.getRestConfiguration("undertow", false).host).isEqualTo("my-undertow-host")
         assertThat(runtime.context.getRestConfiguration("undertow", false).port).isEqualTo(9193)
-        assertThat(runtime.context.restDefinitions.size).isEqualTo(1)
-        assertThat(runtime.context.restDefinitions[0].path).isEqualTo("/my/path")
+        assertThat(runtime.context.adapt(ModelCamelContext::class.java).restDefinitions.size).isEqualTo(1)
+        assertThat(runtime.context.adapt(ModelCamelContext::class.java).restDefinitions[0].path).isEqualTo("/my/path")
     }
 
     @Test
diff --git a/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/extension/LogExtensionTest.kt b/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/extension/LogExtensionTest.kt
index 9d9a328..0d5a281 100644
--- a/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/extension/LogExtensionTest.kt
+++ b/camel-k-runtime-kotlin/src/test/kotlin/org/apache/camel/k/kotlin/extension/LogExtensionTest.kt
@@ -2,7 +2,7 @@ package org.apache.camel.k.kotlin.extension
 
 import org.apache.camel.component.log.LogComponent
 import org.apache.camel.impl.DefaultCamelContext
-import org.apache.camel.impl.DefaultExchange
+import org.apache.camel.k.adapter.Exchanges
 import org.assertj.core.api.Assertions.assertThat
 import org.junit.jupiter.api.Test
 
@@ -16,7 +16,7 @@ class LogExtensionTest {
             e -> "body: " + e.getIn().body
         }
 
-        var ex = DefaultExchange(ctx)
+        var ex = Exchanges.newDefaultExchange(ctx)
         ex.getIn().body = "hello"
 
         assertThat(log.exchangeFormatter.format(ex)).isEqualTo("body: hello")
diff --git a/camel-k-runtime-spring-boot/pom.xml b/camel-k-runtime-spring-boot/pom.xml
index 70bb80b..1435109 100644
--- a/camel-k-runtime-spring-boot/pom.xml
+++ b/camel-k-runtime-spring-boot/pom.xml
@@ -42,7 +42,6 @@
         <dependency>
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-runtime-jvm</artifactId>
-            <version>${project.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.apache.logging.log4j</groupId>
@@ -134,4 +133,45 @@
             </plugin>
         </plugins>
     </build>
+
+    <profiles>
+        <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-3</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <!-- test -->
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>camel-properties</artifactId>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-2</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
 </project>
diff --git a/camel-k-runtime-yaml/pom.xml b/camel-k-runtime-yaml/pom.xml
index dac0cef..d528f0a 100644
--- a/camel-k-runtime-yaml/pom.xml
+++ b/camel-k-runtime-yaml/pom.xml
@@ -36,15 +36,15 @@
         <!-- ****************************** -->
 
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core</artifactId>
-            <scope>provided</scope>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-runtime-core</artifactId>
         </dependency>
+
         <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-runtime-jvm</artifactId>
-            <version>${project.version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
         </dependency>
+
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
@@ -74,7 +74,6 @@
             <version>${junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
@@ -83,4 +82,45 @@
         </dependency>
     </dependencies>
 
+    <profiles>
+        <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-3</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <!-- test -->
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>camel-properties</artifactId>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-2</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/camel-k-runtime-yaml/src/test/java/org/apache/camel/k/yaml/RoutesLoaderTest.java b/camel-k-runtime-yaml/src/test/java/org/apache/camel/k/yaml/RoutesLoaderTest.java
index 1035306..2c77ad9 100644
--- a/camel-k-runtime-yaml/src/test/java/org/apache/camel/k/yaml/RoutesLoaderTest.java
+++ b/camel-k-runtime-yaml/src/test/java/org/apache/camel/k/yaml/RoutesLoaderTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.k.yaml;
 
 import java.util.List;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.k.RoutesLoader;
@@ -34,13 +35,15 @@ public class RoutesLoaderTest {
 
     @Test
     public void testLoadYamlFlow() throws Exception {
+        CamelContext context = new DefaultCamelContext();
         Source source = Source.create("classpath:routes.flow");
-        RoutesLoader loader = RuntimeSupport.loaderFor(new DefaultCamelContext(), source);
+        RoutesLoader loader = RuntimeSupport.loaderFor(context, source);
         RouteBuilder builder = loader.load(new InMemoryRegistry(), source);
 
         assertThat(loader).isInstanceOf(YamlFlowLoader.class);
         assertThat(builder).isNotNull();
 
+        builder.setContext(context);
         builder.configure();
 
         List<RouteDefinition> routes = builder.getRouteCollection().getRoutes();
diff --git a/camel-knative-http/pom.xml b/camel-knative-http/pom.xml
index b0a955e..9188acc 100644
--- a/camel-knative-http/pom.xml
+++ b/camel-knative-http/pom.xml
@@ -82,7 +82,6 @@
             <version>${junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
@@ -105,4 +104,50 @@
 
     </dependencies>
 
+    <profiles>
+        <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-3</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>spi-annotations</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <!-- test -->
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>camel-properties</artifactId>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-2</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpComponent.java b/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpComponent.java
index 7287122..f639e68 100644
--- a/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpComponent.java
+++ b/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpComponent.java
@@ -39,9 +39,9 @@ import org.apache.camel.component.netty4.http.NettyHttpComponent;
 import org.apache.camel.component.netty4.http.NettyHttpConsumer;
 import org.apache.camel.component.netty4.http.handlers.HttpServerChannelHandler;
 import org.apache.camel.http.common.CamelServlet;
+import org.apache.camel.k.adapter.Services;
 import org.apache.camel.support.RestConsumerContextPathMatcher;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.ServiceHelper;
 import org.apache.camel.util.URISupport;
 import org.apache.camel.util.UnsafeUriCharactersEncoder;
 import org.slf4j.Logger;
@@ -63,7 +63,7 @@ public class KnativeHttpComponent extends NettyHttpComponent {
     protected void doStop() throws Exception {
         super.doStop();
 
-        ServiceHelper.stopService(handlers.values());
+        Services.start(handlers.values());
         handlers.clear();
     }
 
diff --git a/camel-knative/pom.xml b/camel-knative/pom.xml
index f845ac6..7e51b29 100644
--- a/camel-knative/pom.xml
+++ b/camel-knative/pom.xml
@@ -42,6 +42,11 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-knative-http</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core</artifactId>
             <scope>provided</scope>
@@ -51,11 +56,6 @@
             <artifactId>camel-netty4-http</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-knative-http</artifactId>
-            <version>${project.version}</version>
-        </dependency>
 
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -114,7 +114,6 @@
             <version>${junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
@@ -137,4 +136,50 @@
 
     </dependencies>
 
+    <profiles>
+        <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-3</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>spi-annotations</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <!-- test -->
+                <dependency>
+                    <groupId>org.apache.camel</groupId>
+                    <artifactId>camel-properties</artifactId>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencies>
+                <!-- runtime -->
+                <dependency>
+                    <groupId>org.apache.camel.k</groupId>
+                    <artifactId>camel-k-adapter-camel-2</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/camel-knative/src/main/java/org/apache/camel/component/knative/Knative.java b/camel-knative/src/main/java/org/apache/camel/component/knative/Knative.java
index ce701ef..4ea19d4 100644
--- a/camel-knative/src/main/java/org/apache/camel/component/knative/Knative.java
+++ b/camel-knative/src/main/java/org/apache/camel/component/knative/Knative.java
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
 public final class Knative {
     public static final ObjectMapper MAPPER = new ObjectMapper().registerModule(new Jdk8Module());
 
-
     public static final String HTTP_COMPONENT = "knative-http";
     public static final String KNATIVE_PROTOCOL = "knative.protocol";
     public static final String KNATIVE_TYPE = "knative.type";
diff --git a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeComponent.java b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
index 60b7835..19f9dff 100644
--- a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
+++ b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
@@ -20,8 +20,8 @@ import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
-import org.apache.camel.impl.DefaultComponent;
-import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.k.adapter.DefaultComponent;
+import org.apache.camel.k.adapter.Introspection;
 import org.apache.camel.util.StringHelper;
 
 public class KnativeComponent extends DefaultComponent {
@@ -101,7 +101,7 @@ public class KnativeComponent extends DefaultComponent {
         final KnativeConfiguration conf = getKnativeConfiguration();
 
         // set properties from the endpoint uri
-        IntrospectionSupport.setProperties(getCamelContext().getTypeConverter(), conf, parameters);
+        Introspection.setProperties(getCamelContext().getTypeConverter(), conf, parameters);
 
         return new KnativeEndpoint(uri, this, Knative.Type.valueOf(type), target, conf);
     }
diff --git a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeConfiguration.java b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeConfiguration.java
index 967f7dd..9d8a022 100644
--- a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeConfiguration.java
+++ b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeConfiguration.java
@@ -17,12 +17,10 @@
 package org.apache.camel.component.knative;
 
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 
 public class KnativeConfiguration implements Cloneable {
     @UriParam
-    @Metadata(required = "true")
     private KnativeEnvironment environment;
 
     @UriParam(defaultValue = "false")
diff --git a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
index cceb218..32752d9 100644
--- a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
+++ b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
@@ -27,14 +27,14 @@ import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.cloud.ServiceDefinition;
 import org.apache.camel.component.knative.ce.CloudEventsProcessors;
-import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.k.adapter.DefaultEndpoint;
+import org.apache.camel.k.adapter.Services;
 import org.apache.camel.processor.Pipeline;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.ServiceHelper;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.URISupport;
 
@@ -47,11 +47,9 @@ import org.apache.camel.util.URISupport;
     label = "cloud,eventing")
 public class KnativeEndpoint extends DefaultEndpoint implements DelegateEndpoint {
     @UriPath(description = "The Knative type")
-    @Metadata(required = "true")
     private final Knative.Type type;
 
     @UriPath(description = "The Knative name")
-    @Metadata(required = "true")
     private final String name;
 
     @UriParam
@@ -83,12 +81,12 @@ public class KnativeEndpoint extends DefaultEndpoint implements DelegateEndpoint
     @Override
     protected void doStart() throws Exception {
         super.doStart();
-        ServiceHelper.startService(endpoint);
+        Services.start(endpoint);
     }
 
     @Override
     protected void doStop() throws Exception {
-        ServiceHelper.stopService(endpoint);
+        Services.stop(endpoint);
         super.doStop();
     }
 
diff --git a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEnvironment.java b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEnvironment.java
index efef0ca..52ca039 100644
--- a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEnvironment.java
+++ b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEnvironment.java
@@ -34,8 +34,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceDefinition;
 import org.apache.camel.impl.cloud.DefaultServiceDefinition;
+import org.apache.camel.k.adapter.Resources;
 import org.apache.camel.util.CollectionHelper;
-import org.apache.camel.util.ResourceHelper;
 import org.apache.camel.util.StringHelper;
 
 /*
@@ -133,7 +133,7 @@ public class KnativeEnvironment {
     }
 
     public static KnativeEnvironment mandatoryLoadFromResource(CamelContext context, String path) throws Exception {
-        try (InputStream is = ResourceHelper.resolveMandatoryResourceAsInputStream(context, path)) {
+        try (InputStream is = Resources.resolveResourceAsInputStream(context, path)) {
 
             //
             // read the knative environment from a file formatted as json, i.e. :
diff --git a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeProducer.java b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
index 740455f..3e3aee4 100644
--- a/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
+++ b/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
@@ -24,10 +24,10 @@ import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.impl.DefaultAsyncProducer;
+import org.apache.camel.k.adapter.DefaultAsyncProducer;
+import org.apache.camel.k.adapter.Processors;
+import org.apache.camel.k.adapter.Services;
 import org.apache.camel.processor.Pipeline;
-import org.apache.camel.util.AsyncProcessorConverterHelper;
-import org.apache.camel.util.ServiceHelper;
 import org.apache.commons.collections4.CollectionUtils;
 
 public class KnativeProducer extends DefaultAsyncProducer {
@@ -43,7 +43,7 @@ public class KnativeProducer extends DefaultAsyncProducer {
 
         Processor pipeline = Pipeline.newInstance(endpoint.getCamelContext(), elements);
 
-        this.processor = AsyncProcessorConverterHelper.convert(pipeline);
+        this.processor = Processors.convertToAsync(pipeline);
     }
 
     @Override
@@ -53,27 +53,27 @@ public class KnativeProducer extends DefaultAsyncProducer {
 
     @Override
     protected void doStart() throws Exception {
-        ServiceHelper.startServices(processor);
+        Services.start(processor);
     }
 
     @Override
     protected void doStop() throws Exception {
-        ServiceHelper.stopServices(processor);
+        Services.start(processor);
     }
 
     @Override
     protected void doSuspend() throws Exception {
-        ServiceHelper.suspendService(processor);
+        Services.suspend(processor);
     }
 
     @Override
     protected void doResume() throws Exception {
-        ServiceHelper.resumeService(processor);
+        Services.resume(processor);
     }
 
     @Override
     protected void doShutdown() throws Exception {
-        ServiceHelper.stopAndShutdownServices(processor);
+        Services.shutdown(processor);
     }
 
 }
diff --git a/pom.xml b/pom.xml
index f8d7405..b0038a5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,7 +35,9 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
-        <camel.version>2.23.1</camel.version>
+        <camel2.version>2.23.1</camel2.version>
+        <camel3.version>3.0.0-M1</camel3.version>
+        <camel.version>${camel2.version}</camel.version>
         <catalog.version>${camel.version}</catalog.version>
         <junit.version>4.12</junit.version>
         <junit-jupiter.version>5.4.0</junit-jupiter.version>
@@ -87,18 +89,6 @@
         <tag>HEAD</tag>
     </scm>
 
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.apache.camel</groupId>
-                <artifactId>camel-bom</artifactId>
-                <version>${camel.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
     <build>
         <pluginManagement>
             <plugins>
@@ -132,6 +122,8 @@
     </build>
 
     <modules>
+        <module>camel-k-adapter-camel-3</module>
+        <module>camel-k-adapter-camel-2</module>
         <module>camel-k-maven-plugin</module>
         <module>camel-k-runtime-core</module>
         <module>camel-k-runtime-jvm</module>
@@ -172,8 +164,107 @@
         </pluginRepository>
     </pluginRepositories>
 
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-adapter-camel-3</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-adapter-camel-2</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-runtime-core</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-runtime-jvm</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-runtime-groovy</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-runtime-kotlin</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-runtime-yaml</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-runtime-spring-boot</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-runtime-spring-boot-layout</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-knative</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-knative-http</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <profiles>
         <profile>
+            <id>camel3</id>
+            <activation>
+                <property>
+                    <name>camel3</name>
+                </property>
+            </activation>
+            <dependencyManagement>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.camel</groupId>
+                        <artifactId>camel-bom</artifactId>
+                        <version>${camel3.version}</version>
+                        <type>pom</type>
+                        <scope>import</scope>
+                    </dependency>
+                </dependencies>
+            </dependencyManagement>
+        </profile>
+        <profile>
+            <id>camel2</id>
+            <activation>
+                <property>
+                    <name>!camel3</name>
+                </property>
+            </activation>
+            <dependencyManagement>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.camel</groupId>
+                        <artifactId>camel-bom</artifactId>
+                        <version>${camel2.version}</version>
+                        <type>pom</type>
+                        <scope>import</scope>
+                    </dependency>
+                </dependencies>
+            </dependencyManagement>
+        </profile>
+
+        <profile>
             <id>deps</id>
             <activation>
                 <activeByDefault>false</activeByDefault>
@@ -240,78 +331,78 @@
                 </plugins>
              </build>
         </profile>
-<profile>
-       <id>release</id>
-       <activation>
-        <property>
-          <name>release</name>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <!-- We want to deploy the artifact to a staging location for perusal -->
-          <plugin>
-            <inherited>true</inherited>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-deploy-plugin</artifactId>
-            <configuration>
-              <updateReleaseInfo>true</updateReleaseInfo>
-            </configuration>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-source-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-sources</id>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-javadoc-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-javadocs</id>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-              </execution>
-            </executions>
-            <configuration>
-              <additionalOptions>${javadoc.opts}</additionalOptions>
-            </configuration>
-          </plugin>
-          <!-- We want to sign the artifact, the POM, and all attached artifacts -->
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-gpg-plugin</artifactId>
-            <configuration>
-              <passphrase>${gpg.passphrase}</passphrase>
-              <useAgent>${gpg.useagent}</useAgent>
-            </configuration>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>sign</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>doclint-java8-disable</id>
-      <activation>
-        <jdk>[1.8,)</jdk>
-      </activation>
-      <properties>
-        <javadoc.opts>-Xdoclint:none</javadoc.opts>
-      </properties>
-    </profile>
+        <profile>
+            <id>release</id>
+            <activation>
+                <property>
+                <name>release</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                <!-- We want to deploy the artifact to a staging location for perusal -->
+                <plugin>
+                    <inherited>true</inherited>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-deploy-plugin</artifactId>
+                    <configuration>
+                    <updateReleaseInfo>true</updateReleaseInfo>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-source-plugin</artifactId>
+                    <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <goals>
+                        <goal>jar</goal>
+                        </goals>
+                    </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                        <goal>jar</goal>
+                        </goals>
+                    </execution>
+                    </executions>
+                    <configuration>
+                    <additionalOptions>${javadoc.opts}</additionalOptions>
+                    </configuration>
+                </plugin>
+                <!-- We want to sign the artifact, the POM, and all attached artifacts -->
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-gpg-plugin</artifactId>
+                    <configuration>
+                    <passphrase>${gpg.passphrase}</passphrase>
+                    <useAgent>${gpg.useagent}</useAgent>
+                    </configuration>
+                    <executions>
+                    <execution>
+                        <goals>
+                        <goal>sign</goal>
+                        </goals>
+                    </execution>
+                    </executions>
+                </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>doclint-java8-disable</id>
+            <activation>
+                <jdk>[1.8,)</jdk>
+            </activation>
+            <properties>
+                <javadoc.opts>-Xdoclint:none</javadoc.opts>
+            </properties>
+        </profile>
     </profiles>
 </project>