You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2022/08/17 06:20:32 UTC

[camel-quarkus] branch main updated: Fix route inclusion / exclusion filtering

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

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


The following commit(s) were added to refs/heads/main by this push:
     new 7d0e3808ff Fix route inclusion / exclusion filtering
7d0e3808ff is described below

commit 7d0e3808ffbf4c0e48655f0ac4a041050c24abc4
Author: James Netherton <ja...@gmail.com>
AuthorDate: Tue Aug 16 07:35:04 2022 +0100

    Fix route inclusion / exclusion filtering
    
    Fixes #3993
---
 .../quarkus/core/deployment/CamelProcessor.java    | 31 ++++++++++++--
 .../core/deployment/main/CamelMainProcessor.java   |  8 +++-
 ...inRoutesExcludeFilterCombinedPropertyTest.java} | 35 +++++++++-------
 ....java => CamelMainRoutesExcludeFilterTest.java} | 47 +++++++++++++++------
 ...inRoutesIncludeFilterCombinedPropertyTest.java} | 36 +++++++++-------
 ....java => CamelMainRoutesIncludeFilterTest.java} | 49 ++++++++++++++++------
 .../camel/quarkus/core/RegistryRoutesLoaders.java  |  9 ++++
 .../camel/quarkus/main/CamelMainRecorder.java      |  9 +++-
 .../quarkus/main/CamelMainRoutesCollector.java     | 27 +++++++++++-
 9 files changed, 190 insertions(+), 61 deletions(-)

diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
index 188e1982e8..ab57746e1f 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
@@ -23,6 +23,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.function.Predicate;
@@ -76,6 +77,8 @@ import org.apache.camel.quarkus.core.deployment.util.PathFilter;
 import org.apache.camel.quarkus.core.util.FileUtils;
 import org.apache.camel.spi.TypeConverterLoader;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.eclipse.microprofile.config.Config;
+import org.eclipse.microprofile.config.ConfigProvider;
 import org.jboss.jandex.AnnotationTarget;
 import org.jboss.jandex.ClassInfo;
 import org.jboss.jandex.DotName;
@@ -354,7 +357,7 @@ class CamelProcessor {
     @BuildStep(onlyIf = { CamelConfigFlags.RoutesDiscoveryEnabled.class })
     public List<CamelRoutesBuilderClassBuildItem> discoverRoutesBuilderClassNames(
             CombinedIndexBuildItem combinedIndex,
-            CamelConfig config,
+            CamelConfig camelConfig,
             List<RoutesBuilderClassExcludeBuildItem> routesBuilderClassExcludes) {
 
         final IndexView index = combinedIndex.getIndex();
@@ -364,13 +367,35 @@ class CamelProcessor {
         allKnownImplementors.addAll(index.getAllKnownSubclasses(ROUTE_BUILDER_TYPE));
         allKnownImplementors.addAll(index.getAllKnownSubclasses(ADVICE_WITH_ROUTE_BUILDER_TYPE));
 
+        Config config = ConfigProvider.getConfig();
+        Optional<List<String>> camelMainRoutesExclude = config.getOptionalValues("camel.main.javaRoutesExcludePattern",
+                String.class);
+        Optional<List<String>> camelMainRoutesInclude = config.getOptionalValues("camel.main.javaRoutesIncludePattern",
+                String.class);
+
+        camelMainRoutesExclude.ifPresent(excludes -> {
+            if (camelConfig.routesDiscovery.excludePatterns.isPresent()) {
+                camelConfig.routesDiscovery.excludePatterns.get().addAll(excludes);
+            } else {
+                camelConfig.routesDiscovery.excludePatterns = Optional.of(excludes);
+            }
+        });
+
+        camelMainRoutesInclude.ifPresent(includes -> {
+            if (camelConfig.routesDiscovery.includePatterns.isPresent()) {
+                camelConfig.routesDiscovery.includePatterns.get().addAll(includes);
+            } else {
+                camelConfig.routesDiscovery.includePatterns = Optional.of(includes);
+            }
+        });
+
         final Predicate<DotName> pathFilter = new PathFilter.Builder()
                 .exclude(
                         routesBuilderClassExcludes.stream()
                                 .map(RoutesBuilderClassExcludeBuildItem::getPattern)
                                 .collect(Collectors.toList()))
-                .exclude(config.routesDiscovery.excludePatterns)
-                .include(config.routesDiscovery.includePatterns)
+                .exclude(camelConfig.routesDiscovery.excludePatterns)
+                .include(camelConfig.routesDiscovery.includePatterns)
                 .build().asDotNamePredicate();
 
         return allKnownImplementors
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
index 55be294e50..395043bbbd 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
@@ -36,6 +36,7 @@ import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.QuarkusMain;
 import org.apache.camel.CamelContext;
+import org.apache.camel.main.RoutesCollector;
 import org.apache.camel.quarkus.core.CamelConfig;
 import org.apache.camel.quarkus.core.CamelRecorder;
 import org.apache.camel.quarkus.core.CamelRuntime;
@@ -78,9 +79,12 @@ public class CamelMainProcessor {
     @Record(value = ExecutionTime.STATIC_INIT, optional = true)
     public CamelRoutesCollectorBuildItem routesCollector(
             CamelMainRecorder recorder,
-            CamelRoutesLoaderBuildItems.Registry registryRoutesLoader) {
+            CamelRoutesLoaderBuildItems.Registry registryRoutesLoader,
+            CamelConfig config) {
 
-        return new CamelRoutesCollectorBuildItem(recorder.newRoutesCollector(registryRoutesLoader.getLoader()));
+        RuntimeValue<RoutesCollector> routesCollector = recorder.newRoutesCollector(registryRoutesLoader.getLoader(),
+                config.routesDiscovery.excludePatterns, config.routesDiscovery.includePatterns);
+        return new CamelRoutesCollectorBuildItem(routesCollector);
     }
 
     /**
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterCombinedPropertyTest.java
similarity index 72%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterCombinedPropertyTest.java
index 8568a1ac83..9b5583d5b8 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterCombinedPropertyTest.java
@@ -19,13 +19,15 @@ package org.apache.camel.quarkus.core.deployment.main;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.util.List;
 import java.util.Properties;
 
 import javax.inject.Inject;
 
 import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.quarkus.main.CamelMain;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -33,16 +35,17 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class CamelMainRoutesFilterTest {
+public class CamelMainRoutesExcludeFilterCombinedPropertyTest {
     @RegisterExtension
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
                     .addAsResource(applicationProperties(), "application.properties"));
 
     @Inject
-    CamelMain main;
+    CamelContext context;
 
     public static Asset applicationProperties() {
         Writer writer = new StringWriter();
@@ -50,7 +53,8 @@ public class CamelMainRoutesFilterTest {
         Properties props = new Properties();
         props.setProperty("quarkus.banner.enabled", "false");
         props.setProperty("quarkus.camel.routes-discovery.enabled", "true");
-        props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered");
+        props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*FilteredA");
+        props.setProperty("camel.main.javaRoutesExcludePattern", "**/*FilteredB");
 
         try {
             props.store(writer, "");
@@ -63,13 +67,9 @@ public class CamelMainRoutesFilterTest {
 
     @Test
     public void testRoutesFilter() {
-        assertThat(main.configure().getRoutesBuilders())
-                .hasSize(1)
-                .first().isInstanceOf(MyRoute.class);
-
-        assertThat(main.getCamelContext().getRoutes())
-                .hasSize(1)
-                .first().hasFieldOrPropertyWithValue("id", "my-route");
+        List<Route> routes = context.getRoutes();
+        assertEquals(1, routes.size());
+        assertNotNull(context.getRoute("my-route"));
     }
 
     public static class MyRoute extends RouteBuilder {
@@ -79,10 +79,17 @@ public class CamelMainRoutesFilterTest {
         }
     }
 
-    public static class MyRouteFiltered extends RouteBuilder {
+    public static class MyRouteFilteredA extends RouteBuilder {
+        @Override
+        public void configure() throws Exception {
+            from("direct:filtered-a").routeId("my-route-filtered-a").to("log:filtered-a");
+        }
+    }
+
+    public static class MyRouteFilteredB extends RouteBuilder {
         @Override
         public void configure() throws Exception {
-            from("direct:filtered").routeId("my-route-filtered").to("log:filtered");
+            from("direct:filtered-b").routeId("my-route-filtered-b").to("log:filtered-b");
         }
     }
 }
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterTest.java
similarity index 67%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterTest.java
index 8568a1ac83..6b932dc5e7 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesExcludeFilterTest.java
@@ -19,13 +19,17 @@ package org.apache.camel.quarkus.core.deployment.main;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.util.List;
 import java.util.Properties;
 
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
 import javax.inject.Inject;
 
 import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.quarkus.main.CamelMain;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -33,16 +37,17 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class CamelMainRoutesFilterTest {
+public class CamelMainRoutesExcludeFilterTest {
     @RegisterExtension
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
                     .addAsResource(applicationProperties(), "application.properties"));
 
     @Inject
-    CamelMain main;
+    CamelContext context;
 
     public static Asset applicationProperties() {
         Writer writer = new StringWriter();
@@ -50,7 +55,7 @@ public class CamelMainRoutesFilterTest {
         Properties props = new Properties();
         props.setProperty("quarkus.banner.enabled", "false");
         props.setProperty("quarkus.camel.routes-discovery.enabled", "true");
-        props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered");
+        props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered,**/*Bean,**/*Producer");
 
         try {
             props.store(writer, "");
@@ -63,13 +68,9 @@ public class CamelMainRoutesFilterTest {
 
     @Test
     public void testRoutesFilter() {
-        assertThat(main.configure().getRoutesBuilders())
-                .hasSize(1)
-                .first().isInstanceOf(MyRoute.class);
-
-        assertThat(main.getCamelContext().getRoutes())
-                .hasSize(1)
-                .first().hasFieldOrPropertyWithValue("id", "my-route");
+        List<Route> routes = context.getRoutes();
+        assertEquals(1, routes.size());
+        assertNotNull(context.getRoute("my-route"));
     }
 
     public static class MyRoute extends RouteBuilder {
@@ -85,4 +86,26 @@ public class CamelMainRoutesFilterTest {
             from("direct:filtered").routeId("my-route-filtered").to("log:filtered");
         }
     }
+
+    @ApplicationScoped
+    public static class MyRouteBean extends RouteBuilder {
+        @Override
+        public void configure() throws Exception {
+            from("direct:filteredBean").routeId("my-route-filteredBean").to("log:filteredBean");
+        }
+    }
+
+    @ApplicationScoped
+    public static class RouteBuilderProducer {
+        @Produces
+        @ApplicationScoped
+        public RouteBuilder producedRouteBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    from("direct:produced").routeId("my-route-produced").to("log:produced");
+                }
+            };
+        }
+    }
 }
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterCombinedPropertyTest.java
similarity index 69%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterCombinedPropertyTest.java
index 8568a1ac83..264b0f4c70 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterCombinedPropertyTest.java
@@ -19,13 +19,15 @@ package org.apache.camel.quarkus.core.deployment.main;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.util.List;
 import java.util.Properties;
 
 import javax.inject.Inject;
 
 import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.quarkus.main.CamelMain;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -33,16 +35,17 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class CamelMainRoutesFilterTest {
+public class CamelMainRoutesIncludeFilterCombinedPropertyTest {
     @RegisterExtension
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
                     .addAsResource(applicationProperties(), "application.properties"));
 
     @Inject
-    CamelMain main;
+    CamelContext context;
 
     public static Asset applicationProperties() {
         Writer writer = new StringWriter();
@@ -50,7 +53,8 @@ public class CamelMainRoutesFilterTest {
         Properties props = new Properties();
         props.setProperty("quarkus.banner.enabled", "false");
         props.setProperty("quarkus.camel.routes-discovery.enabled", "true");
-        props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered");
+        props.setProperty("quarkus.camel.routes-discovery.include-patterns", "**/*FilteredA");
+        props.setProperty("camel.main.javaRoutesIncludePattern", "**/*FilteredB");
 
         try {
             props.store(writer, "");
@@ -63,13 +67,10 @@ public class CamelMainRoutesFilterTest {
 
     @Test
     public void testRoutesFilter() {
-        assertThat(main.configure().getRoutesBuilders())
-                .hasSize(1)
-                .first().isInstanceOf(MyRoute.class);
-
-        assertThat(main.getCamelContext().getRoutes())
-                .hasSize(1)
-                .first().hasFieldOrPropertyWithValue("id", "my-route");
+        List<Route> routes = context.getRoutes();
+        assertEquals(2, routes.size());
+        assertNotNull(context.getRoute("my-route-filtered-a"));
+        assertNotNull(context.getRoute("my-route-filtered-b"));
     }
 
     public static class MyRoute extends RouteBuilder {
@@ -79,10 +80,17 @@ public class CamelMainRoutesFilterTest {
         }
     }
 
-    public static class MyRouteFiltered extends RouteBuilder {
+    public static class MyRouteFilteredA extends RouteBuilder {
+        @Override
+        public void configure() throws Exception {
+            from("direct:filtered-a").routeId("my-route-filtered-a").to("log:filtered-a");
+        }
+    }
+
+    public static class MyRouteFilteredB extends RouteBuilder {
         @Override
         public void configure() throws Exception {
-            from("direct:filtered").routeId("my-route-filtered").to("log:filtered");
+            from("direct:filtered-b").routeId("my-route-filtered-b").to("log:filtered-b");
         }
     }
 }
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterTest.java
similarity index 64%
rename from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
rename to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterTest.java
index 8568a1ac83..849d09289b 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesFilterTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainRoutesIncludeFilterTest.java
@@ -19,13 +19,17 @@ package org.apache.camel.quarkus.core.deployment.main;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.util.List;
 import java.util.Properties;
 
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
 import javax.inject.Inject;
 
 import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.quarkus.main.CamelMain;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -33,16 +37,17 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class CamelMainRoutesFilterTest {
+public class CamelMainRoutesIncludeFilterTest {
     @RegisterExtension
     static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
                     .addAsResource(applicationProperties(), "application.properties"));
 
     @Inject
-    CamelMain main;
+    CamelContext context;
 
     public static Asset applicationProperties() {
         Writer writer = new StringWriter();
@@ -50,7 +55,7 @@ public class CamelMainRoutesFilterTest {
         Properties props = new Properties();
         props.setProperty("quarkus.banner.enabled", "false");
         props.setProperty("quarkus.camel.routes-discovery.enabled", "true");
-        props.setProperty("quarkus.camel.routes-discovery.exclude-patterns", "**/*Filtered");
+        props.setProperty("quarkus.camel.routes-discovery.include-patterns", "**/*Filtered");
 
         try {
             props.store(writer, "");
@@ -63,13 +68,11 @@ public class CamelMainRoutesFilterTest {
 
     @Test
     public void testRoutesFilter() {
-        assertThat(main.configure().getRoutesBuilders())
-                .hasSize(1)
-                .first().isInstanceOf(MyRoute.class);
-
-        assertThat(main.getCamelContext().getRoutes())
-                .hasSize(1)
-                .first().hasFieldOrPropertyWithValue("id", "my-route");
+        List<Route> routes = context.getRoutes();
+        assertEquals(3, routes.size());
+        assertNotNull(context.getRoute("my-route-filtered"));
+        assertNotNull(context.getRoute("my-route-filteredBean"));
+        assertNotNull(context.getRoute("my-route-filteredProduced"));
     }
 
     public static class MyRoute extends RouteBuilder {
@@ -85,4 +88,26 @@ public class CamelMainRoutesFilterTest {
             from("direct:filtered").routeId("my-route-filtered").to("log:filtered");
         }
     }
+
+    @ApplicationScoped
+    public static class MyRouteBeanFiltered extends RouteBuilder {
+        @Override
+        public void configure() throws Exception {
+            from("direct:filteredBean").routeId("my-route-filteredBean").to("log:filteredBean");
+        }
+    }
+
+    @ApplicationScoped
+    public static class RouteBuilderProducerFiltered {
+        @Produces
+        @ApplicationScoped
+        public RouteBuilder producedRouteBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    from("direct:produced").routeId("my-route-filteredProduced").to("log:produced");
+                }
+            };
+        }
+    }
 }
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java
index b70c73d5e1..f211459b9e 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java
@@ -88,6 +88,15 @@ public final class RegistryRoutesLoaders {
                 boolean abs = Modifier.isAbstract(routesBuilder.getClass().getModifiers());
                 if (!abs) {
                     String name = routesBuilder.getClass().getName();
+
+                    // make it possible to exclude classes with RouteBuilder producer methods
+                    if (name.contains("_ProducerMethod")) {
+                        name = name.substring(0, name.indexOf("_ProducerMethod"));
+                    }
+
+                    // strip out extraneous naming generated by Quarkus ArC
+                    name = name.replace("_ClientProxy", "");
+
                     // make name as path so we can use ant path matcher
                     name = name.replace('.', '/');
 
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
index 55e765102d..0e3b223a68 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
@@ -17,6 +17,7 @@
 package org.apache.camel.quarkus.main;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
 import io.quarkus.arc.runtime.BeanContainer;
@@ -69,8 +70,12 @@ public class CamelMainRecorder {
         main.getValue().addMainListener(listener.getValue());
     }
 
-    public RuntimeValue<RoutesCollector> newRoutesCollector(RuntimeValue<RegistryRoutesLoader> registryRoutesLoader) {
-        return new RuntimeValue<>(new CamelMainRoutesCollector(registryRoutesLoader.getValue()));
+    public RuntimeValue<RoutesCollector> newRoutesCollector(
+            RuntimeValue<RegistryRoutesLoader> registryRoutesLoader,
+            Optional<List<String>> excludePatterns,
+            Optional<List<String>> includePatterns) {
+        return new RuntimeValue<>(
+                new CamelMainRoutesCollector(registryRoutesLoader.getValue(), excludePatterns, includePatterns));
     }
 
     public void customizeContext(RuntimeValue<CamelMain> main, List<RuntimeValue<CamelContextCustomizer>> contextCustomizers) {
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java
index 8595f531d0..44d86a0f8a 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java
@@ -17,6 +17,7 @@
 package org.apache.camel.quarkus.main;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
@@ -25,9 +26,16 @@ import org.apache.camel.quarkus.core.RegistryRoutesLoader;
 
 public class CamelMainRoutesCollector extends DefaultRoutesCollector {
     private final RegistryRoutesLoader registryRoutesLoader;
+    private final Optional<List<String>> excludePatterns;
+    private final Optional<List<String>> includePatterns;
 
-    public CamelMainRoutesCollector(RegistryRoutesLoader registryRoutesLoader) {
+    public CamelMainRoutesCollector(
+            RegistryRoutesLoader registryRoutesLoader,
+            Optional<List<String>> excludePatterns,
+            Optional<List<String>> includePatterns) {
         this.registryRoutesLoader = registryRoutesLoader;
+        this.excludePatterns = excludePatterns;
+        this.includePatterns = includePatterns;
     }
 
     public RegistryRoutesLoader getRegistryRoutesLoader() {
@@ -40,6 +48,21 @@ public class CamelMainRoutesCollector extends DefaultRoutesCollector {
             String excludePattern,
             String includePattern) {
 
-        return registryRoutesLoader.collectRoutesFromRegistry(camelContext, excludePattern, includePattern);
+        /**
+         * The incoming excludePattern & includePattern are ignored since they are provided from camel-main via:
+         *
+         * camel.main.javaRoutesExcludePattern
+         * camel.main.javaRoutesIncludePattern
+         *
+         * The values for those properties are combined with the quarkus.camel.routes-discovery equivalents at build time.
+         */
+        return registryRoutesLoader.collectRoutesFromRegistry(
+                camelContext,
+                getPatternString(excludePatterns),
+                getPatternString(includePatterns));
+    }
+
+    private String getPatternString(Optional<List<String>> camelQuarkusPatterns) {
+        return camelQuarkusPatterns.map(patterns -> String.join(",", patterns)).orElse(null);
     }
 }