diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml b/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
index 1f8d67f..199a2d7 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
@@ -145,6 +145,20 @@
                         <goals>
                             <goal>generate-yaml-loader-support-classes</goal>
                         </goals>
+                        <configuration>
+                            <blacklistedDefinitions>
+                                <blacklistedDefinition>org.apache.camel.model.Resilience4jConfigurationDefinition</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.HystrixConfigurationDefinition</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.OnFallbackDefinition</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.InOnlyDefinition</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.InOutDefinition</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.OtherwiseDefinition</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.WhenDefinition</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.config.StreamResequencerConfig</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.config.BatchResequencerConfig</blacklistedDefinition>
+                                <blacklistedDefinition>org.apache.camel.model.loadbalancer/**</blacklistedDefinition>
+                            </blacklistedDefinitions>
+                        </configuration>
                     </execution>
                 </executions>
             </plugin>
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java
index 3982257..91d7cc5 100644
--- a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java
@@ -21,6 +21,7 @@
 import java.nio.file.Paths;
 import java.util.Comparator;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.lang.model.element.Modifier;
@@ -33,9 +34,11 @@
 import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.MethodSpec;
 import com.squareup.javapoet.TypeSpec;
+import org.apache.camel.util.AntPathMatcher;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.jboss.jandex.AnnotationInstance;
 import org.jboss.jandex.AnnotationValue;
@@ -49,6 +52,9 @@
     threadSafe = true,
     requiresProject = false)
 public class GenerateYamlLoaderSupportClasses extends GenerateYamlSupport {
+    @Parameter
+    protected List<String> blacklistedDefinitions;
+
     @Override
     public void execute() throws MojoFailureException {
         try {
@@ -195,27 +201,14 @@
                         AnnotationValue label = meta.value("label");
 
                         if (name != null && label != null) {
-                            // skip known definitions for which there is a custom
-                            // implementation
-                            switch (i.name().toString()) {
-                                case "org.apache.camel.model.Resilience4jConfigurationDefinition":
-                                case "org.apache.camel.model.HystrixConfigurationDefinition":
-                                case "org.apache.camel.model.config.StreamResequencerConfig":
-                                case "org.apache.camel.model.config.BatchResequencerConfig":
-                                case "org.apache.camel.model.OnFallbackDefinition":
-                                case "org.apache.camel.model.InOnlyDefinition":
-                                case "org.apache.camel.model.InOutDefinition":
-                                case "org.apache.camel.model.OtherwiseDefinition":
-                                case "org.apache.camel.model.WhenDefinition":
-                                    return;
-                                default:
-                                    break;
-                            }
-                            switch (i.name().prefix().toString()) {
-                                case "org.apache.camel.model.loadbalancer":
-                                    return;
-                                default:
-                                    break;
+
+                            if (blacklistedDefinitions != null) {
+                                for (String blacklistedDefinition: blacklistedDefinitions) {
+                                    if (AntPathMatcher.INSTANCE.match(blacklistedDefinition.replace('.', '/'), i.name().toString('/'))) {
+                                        getLog().debug("Skipping definition: " + i.name().toString());
+                                        return;
+                                    }
+                                }
                             }
 
                             Set<String> labels = Set.of(label.asString().split(",", -1));
