You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/03/26 12:04:50 UTC

[camel-karaf] branch master updated (d681523 -> 2931b2a)

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

davsclaus pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel-karaf.git.


    from d681523  Upgrade Nitrite to version 3.4.1
     new 9504c17  Polished
     new 2931b2a  Catalog for Karaf

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 catalog/camel-catalog-provider-karaf/pom.xml       |  58 +--
 .../catalog/karaf/KarafRuntimeProviderTest.java    |  19 +
 components/camel-osgi-activator/pom.xml            |   2 +-
 .../services/org/apache/camel/other.properties     |   2 +-
 .../pom.xml                                        |   2 +-
 .../camel/karaf/maven/PrepareCatalogKarafMojo.java | 433 ++++-----------------
 6 files changed, 124 insertions(+), 392 deletions(-)


[camel-karaf] 01/02: Polished

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9504c17eb4e76ca61c1abb710c86ece0c7544beb
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 26 12:06:50 2020 +0100

    Polished
---
 components/camel-osgi-activator/pom.xml                    | 2 +-
 tooling/camel-catalog-generator-karaf-maven-plugin/pom.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/components/camel-osgi-activator/pom.xml b/components/camel-osgi-activator/pom.xml
index 393205a..e2c173d 100644
--- a/components/camel-osgi-activator/pom.xml
+++ b/components/camel-osgi-activator/pom.xml
@@ -31,7 +31,7 @@
     <artifactId>camel-osgi-activator</artifactId>
     <packaging>jar</packaging>
 
-    <name>Camel :: OSGi Activator</name>
+    <name>Camel Karaf :: OSGi Activator</name>
     <description>Camel OSGi Activator for running Camel routes from other bundles</description>
 
     <properties>
diff --git a/tooling/camel-catalog-generator-karaf-maven-plugin/pom.xml b/tooling/camel-catalog-generator-karaf-maven-plugin/pom.xml
index 6aeb123..02ff267 100644
--- a/tooling/camel-catalog-generator-karaf-maven-plugin/pom.xml
+++ b/tooling/camel-catalog-generator-karaf-maven-plugin/pom.xml
@@ -29,7 +29,7 @@
 
     <artifactId>camel-catalog-generator-karaf-maven-plugin</artifactId>
     <packaging>maven-plugin</packaging>
-    <name>Camel Karaf Tooling :: Catalog Generator Maven Plugin</name>
+    <name>Camel Karaf :: Tooling :: Catalog Generator Maven Plugin</name>
 
     <properties>
         <maven-version>3.6.3</maven-version>


[camel-karaf] 02/02: Catalog for Karaf

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2931b2a987ed06b5d5b1742af44a3e79251aa5a4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 26 13:04:36 2020 +0100

    Catalog for Karaf
---
 catalog/camel-catalog-provider-karaf/pom.xml       |  58 +--
 .../catalog/karaf/KarafRuntimeProviderTest.java    |  19 +
 .../services/org/apache/camel/other.properties     |   2 +-
 .../camel/karaf/maven/PrepareCatalogKarafMojo.java | 433 ++++-----------------
 4 files changed, 122 insertions(+), 390 deletions(-)

diff --git a/catalog/camel-catalog-provider-karaf/pom.xml b/catalog/camel-catalog-provider-karaf/pom.xml
index 3dceb24..e5d9ecc 100644
--- a/catalog/camel-catalog-provider-karaf/pom.xml
+++ b/catalog/camel-catalog-provider-karaf/pom.xml
@@ -17,7 +17,8 @@
     limitations under the License.
 
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -77,34 +78,33 @@
                 <artifactId>camel-bundle-plugin</artifactId>
             </plugin>
 
-                    <!-- unpack sources which are needed for the scheme generator -->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-dependency-plugin</artifactId>
-                        <version>3.1.2</version>
-                        <executions>
-                            <execution>
-                                <id>process-sources</id>
-                                <phase>process-resources</phase>
-                                <goals>
-                                    <goal>unpack</goal>
-                                </goals>
-                                <configuration>
-                                    <artifactItems>
-                                        <artifactItem>
-                                            <groupId>org.apache.camel</groupId>
-                                            <artifactId>camel-catalog</artifactId>
-                                            <version>${project.version}</version>
-                                            <type>jar</type>
-                                            <overWrite>true</overWrite>
-                                            <outputDirectory>target/classes/camel-catalog</outputDirectory>
-                                        </artifactItem>
-                                    </artifactItems>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-
+            <!-- unpack sources which are needed for the scheme generator -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>3.1.2</version>
+                <executions>
+                    <execution>
+                        <id>process-sources</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>unpack</goal>
+                        </goals>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>org.apache.camel</groupId>
+                                    <artifactId>camel-catalog</artifactId>
+                                    <version>${project.version}</version>
+                                    <type>jar</type>
+                                    <overWrite>true</overWrite>
+                                    <outputDirectory>target/sources/camel-catalog</outputDirectory>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
 
             <!-- generate and include all components in the catalog -->
             <plugin>
diff --git a/catalog/camel-catalog-provider-karaf/src/test/java/org/apache/camel/catalog/karaf/KarafRuntimeProviderTest.java b/catalog/camel-catalog-provider-karaf/src/test/java/org/apache/camel/catalog/karaf/KarafRuntimeProviderTest.java
index 6280cdc..e4dfc34 100644
--- a/catalog/camel-catalog-provider-karaf/src/test/java/org/apache/camel/catalog/karaf/KarafRuntimeProviderTest.java
+++ b/catalog/camel-catalog-provider-karaf/src/test/java/org/apache/camel/catalog/karaf/KarafRuntimeProviderTest.java
@@ -62,7 +62,26 @@ public class KarafRuntimeProviderTest {
         assertNotNull(names);
         assertFalse(names.isEmpty());
 
+        // core components
+        assertTrue(names.contains("direct"));
+        assertTrue(names.contains("seda"));
+        assertTrue(names.contains("vm"));
+        assertTrue(names.contains("log"));
+        assertTrue(names.contains("mock"));
+        assertTrue(names.contains("bean"));
+
+        // regular components
+        assertTrue(names.contains("ahc"));
+        assertTrue(names.contains("aws-s3"));
         assertTrue(names.contains("ftp"));
+        assertTrue(names.contains("http"));
+        assertTrue(names.contains("jetty"));
+        assertTrue(names.contains("zookeeper"));
+
+        // hbase is not in karaf
+        assertFalse(names.contains("hbase"));
+
+        // pax is from camel-karaf
         assertTrue(names.contains("paxlogging"));
     }
 
diff --git a/components/camel-osgi-activator/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-osgi-activator/src/generated/resources/META-INF/services/org/apache/camel/other.properties
index 9138f8a..66edb5b 100644
--- a/components/camel-osgi-activator/src/generated/resources/META-INF/services/org/apache/camel/other.properties
+++ b/components/camel-osgi-activator/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -3,5 +3,5 @@ name=osgi-activator
 groupId=org.apache.camel.karaf
 artifactId=camel-osgi-activator
 version=3.2.0-SNAPSHOT
-projectName=Camel :: OSGi Activator
+projectName=Camel Karaf :: OSGi Activator
 projectDescription=Camel OSGi Activator for running Camel routes from other bundles
diff --git a/tooling/camel-catalog-generator-karaf-maven-plugin/src/main/java/org/apache/camel/karaf/maven/PrepareCatalogKarafMojo.java b/tooling/camel-catalog-generator-karaf-maven-plugin/src/main/java/org/apache/camel/karaf/maven/PrepareCatalogKarafMojo.java
index 94d0792..cc0cf34 100644
--- a/tooling/camel-catalog-generator-karaf-maven-plugin/src/main/java/org/apache/camel/karaf/maven/PrepareCatalogKarafMojo.java
+++ b/tooling/camel-catalog-generator-karaf-maven-plugin/src/main/java/org/apache/camel/karaf/maven/PrepareCatalogKarafMojo.java
@@ -17,7 +17,6 @@
 package org.apache.camel.karaf.maven;
 
 import java.io.File;
-import java.io.FileFilter;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -52,8 +51,6 @@ import org.apache.maven.project.MavenProjectHelper;
 @Mojo(name = "prepare-catalog-karaf", threadSafe = true)
 public class PrepareCatalogKarafMojo extends AbstractMojo {
 
-    // TODO: move to camel-karaf and rework this catalog maven plugin
-
     /**
      * The maven project.
      */
@@ -91,22 +88,28 @@ public class PrepareCatalogKarafMojo extends AbstractMojo {
     protected File featuresDir;
 
     /**
-     * The components directory where all the Apache Camel components are
+     * The components directory where all the Apache Camel components are from the camel-catalog
      */
-    @Parameter(defaultValue = "${project.build.directory}/../../../components")
+    @Parameter(defaultValue = "${project.build.directory}/sources/camel-catalog/org/apache/camel/catalog/components")
     protected File componentsDir;
 
     /**
-     * The camel-core directory
+     * The dataformats directory where all the Apache Camel components are from the camel-catalog
+     */
+    @Parameter(defaultValue = "${project.build.directory}/sources/camel-catalog/org/apache/camel/catalog/dataformats")
+    protected File dataformatsDir;
+
+    /**
+     * The languages directory where all the Apache Camel components are from the camel-catalog
      */
-    @Parameter(defaultValue = "${project.build.directory}/../../../core/camel-core-engine")
-    protected File coreDir;
+    @Parameter(defaultValue = "${project.build.directory}/sources/camel-catalog/org/apache/camel/catalog/languages")
+    protected File languagessDir;
 
     /**
-     * The camel-base directory
+     * The languages directory where all the Apache Camel components are from the camel-catalog
      */
-    @Parameter(defaultValue = "${project.build.directory}/../../../core/camel-base")
-    protected File baseDir;
+    @Parameter(defaultValue = "${project.build.directory}/sources/camel-catalog/org/apache/camel/catalog/others")
+    protected File otherssDir;
 
     /**
      * Maven ProjectHelper.
@@ -118,384 +121,98 @@ public class PrepareCatalogKarafMojo extends AbstractMojo {
      * Execute goal.
      *
      * @throws MojoExecutionException execution of the main class or one of the
-     *             threads it generated failed.
-     * @throws MojoFailureException something bad happened...
+     *                                threads it generated failed.
+     * @throws MojoFailureException   something bad happened...
      */
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         Set<String> features = findKarafFeatures();
-        executeComponents(features);
-        executeDataFormats(features);
-        executeLanguages(features);
-        executeOthers(features);
+        executeFeatures(features);
     }
 
-    protected void executeComponents(Set<String> features) throws MojoExecutionException, MojoFailureException {
-        getLog().info("Copying all Camel component json descriptors");
-
+    protected void executeFeatures(Set<String> features) throws MojoExecutionException, MojoFailureException {
         // lets use sorted set/maps
         Set<File> jsonFiles = new TreeSet<>();
-        Set<File> componentFiles = new TreeSet<>();
 
-        // find all json files in components and camel-core
         if (componentsDir != null && componentsDir.isDirectory()) {
-            File[] components = componentsDir.listFiles();
-            if (components != null) {
-                for (File dir : components) {
-                    if (dir.isDirectory() && !"target".equals(dir.getName())) {
-                        File target = new File(dir, "target/classes");
-
-                        // the directory must be in the list of known features
-                        if (!features.contains(dir.getName())) {
-                            continue;
-                        }
-
-                        // special for some components which is in a sub dir
-                        if ("camel-as2".equals(dir.getName())) {
-                            target = new File(dir, "camel-as2-component/target/classes");
-                        } else if ("camel-box".equals(dir.getName())) {
-                            target = new File(dir, "camel-box-component/target/classes");
-                        } else if ("camel-salesforce".equals(dir.getName())) {
-                            target = new File(dir, "camel-salesforce-component/target/classes");
-                        } else if ("camel-servicenow".equals(dir.getName())) {
-                            target = new File(dir, "camel-servicenow-component/target/classes");
-                        } else {
-                            // this module must be active with a source folder
-                            File src = new File(dir, "src");
-                            boolean active = src.isDirectory() && src.exists();
-                            if (!active) {
-                                continue;
-                            }
-                        }
-
-                        findComponentFilesRecursive(target, jsonFiles, componentFiles, new CamelComponentsFileFilter());
+            File[] files = componentsDir.listFiles();
+            if (files != null) {
+                for (File file : files) {
+                    String name = stripExt(file);
+                    if (features.contains("camel-" + name) || isCoreComponent(name)) {
+                        jsonFiles.add(file);
                     }
                 }
             }
         }
-        if (coreDir != null && coreDir.isDirectory()) {
-            File target = new File(coreDir, "target/classes");
-            findComponentFilesRecursive(target, jsonFiles, componentFiles, new CamelComponentsFileFilter());
+        if (!jsonFiles.isEmpty()) {
+            Path outDir = componentsOutDir.toPath();
+            copyFiles(outDir, jsonFiles);
+            generateJsonList(outDir, "../components.properties");
+            getLog().info("Copying " + jsonFiles.size() + " Camel component json descriptors");
         }
 
-        getLog().info("Found " + componentFiles.size() + " component.properties files");
-        getLog().info("Found " + jsonFiles.size() + " component json files");
-
-        // copy json files
-        Path outDir = componentsOutDir.toPath();
-        copyFiles(outDir, jsonFiles);
-        generateJsonList(outDir, "../components.properties");
-    }
-
-    protected void executeDataFormats(Set<String> features) throws MojoExecutionException, MojoFailureException {
-        getLog().info("Copying all Camel dataformat json descriptors");
-
-        // lets use sorted set/maps
-        Set<File> jsonFiles = new TreeSet<>();
-        Set<File> dataFormatFiles = new TreeSet<>();
-
-        // find all data formats from the components directory
-        if (componentsDir != null && componentsDir.isDirectory()) {
-            File[] dataFormats = componentsDir.listFiles();
-            if (dataFormats != null) {
-                for (File dir : dataFormats) {
-                    if (dir.isDirectory() && !"target".equals(dir.getName())) {
-                        // the directory must be in the list of known features
-                        if (!features.contains(dir.getName())) {
-                            continue;
-                        }
-
-                        // this module must be active with a source folder
-                        File src = new File(dir, "src");
-                        boolean active = src.isDirectory() && src.exists();
-                        if (!active) {
-                            continue;
-                        }
-
-                        File target = new File(dir, "target/classes");
-                        findDataFormatFilesRecursive(target, jsonFiles, dataFormatFiles, new CamelDataFormatsFileFilter());
-                    }
+        jsonFiles.clear();
+        if (dataformatsDir != null && dataformatsDir.isDirectory()) {
+            File[] files = dataformatsDir.listFiles();
+            if (files != null) {
+                for (File file : files) {
+                    // all dataformats are supported on karaf
+                    jsonFiles.add(file);
                 }
             }
         }
-        if (coreDir != null && coreDir.isDirectory()) {
-            File target = new File(coreDir, "target/classes");
-            findDataFormatFilesRecursive(target, jsonFiles, dataFormatFiles, new CamelDataFormatsFileFilter());
-        }
-
-        getLog().info("Found " + dataFormatFiles.size() + " dataformat.properties files");
-        getLog().info("Found " + jsonFiles.size() + " dataformat json files");
-
-        // copy json files
-        if (dataFormatFiles.size() != 0) {
-        Path outDir = dataFormatsOutDir.toPath();
-        copyFiles(outDir, jsonFiles);
-        generateJsonList(outDir, "../dataformats.properties");
+        if (!jsonFiles.isEmpty()) {
+            Path outDir = dataFormatsOutDir.toPath();
+            copyFiles(outDir, jsonFiles);
+            generateJsonList(outDir, "../dataformats.properties");
+            getLog().info("Copying " + jsonFiles.size() + " Camel dataformat json descriptors");
         }
-    }
-
-    protected void executeLanguages(Set<String> features) throws MojoExecutionException, MojoFailureException {
-        getLog().info("Copying all Camel language json descriptors");
-
-        // lets use sorted set/maps
-        Set<File> jsonFiles = new TreeSet<>();
-        Set<File> languageFiles = new TreeSet<>();
-
-        // find all languages from the components directory
-        if (componentsDir != null && componentsDir.isDirectory()) {
-            File[] languages = componentsDir.listFiles();
-            if (languages != null) {
-                for (File dir : languages) {
-                    // the directory must be in the list of known features (or
-                    // known languages)
-                    if (!features.contains(dir.getName()) && !dir.getName().equals("camel-bean") && !dir.getName().equals("camel-xpath")) {
-                        continue;
-                    }
-
-                    // this module must be active with a source folder
-                    File src = new File(dir, "src");
-                    boolean active = src.isDirectory() && src.exists();
-                    if (!active) {
-                        continue;
-                    }
 
-                    if (dir.isDirectory() && !"target".equals(dir.getName())) {
-                        File target = new File(dir, "target/classes");
-                        findLanguageFilesRecursive(target, jsonFiles, languageFiles, new CamelLanguagesFileFilter());
-                    }
+        jsonFiles.clear();
+        if (languagessDir != null && languagessDir.isDirectory()) {
+            File[] files = languagessDir.listFiles();
+            if (files != null) {
+                for (File file : files) {
+                    // all languages are supported on karaf
+                    jsonFiles.add(file);
                 }
             }
         }
-        if (baseDir != null && baseDir.isDirectory()) {
-            File target = new File(baseDir, "target/classes");
-            findLanguageFilesRecursive(target, jsonFiles, languageFiles, new CamelLanguagesFileFilter());
-            // also look in camel-xml-jaxp
-            target = new File(baseDir, "../camel-xml-jaxp/target/classes");
-            findLanguageFilesRecursive(target, jsonFiles, languageFiles, new CamelLanguagesFileFilter());
-        }
-
-        getLog().info("Found " + languageFiles.size() + " language.properties files");
-        getLog().info("Found " + jsonFiles.size() + " language json files");
-
-        if (languageFiles.size() != 0) {
-        // copy json files
-        Path outDir = languagesOutDir.toPath();
-        copyFiles(outDir, jsonFiles);
-        generateJsonList(outDir, "../languages.properties");
+        if (!jsonFiles.isEmpty()) {
+            Path outDir = languagesOutDir.toPath();
+            copyFiles(outDir, jsonFiles);
+            generateJsonList(outDir, "../languages.properties");
+            getLog().info("Copying " + jsonFiles.size() + " Camel language json descriptors");
         }
-    }
-
-    protected void executeOthers(Set<String> features) throws MojoExecutionException, MojoFailureException {
-        getLog().info("Copying all Camel other json descriptors");
-
-        // lets use sorted set/maps
-        Set<File> jsonFiles = new TreeSet<>();
-        Set<File> otherFiles = new TreeSet<>();
-
-        // find all languages from the components directory
-        if (componentsDir != null && componentsDir.isDirectory()) {
-            File[] others = componentsDir.listFiles();
-            if (others != null) {
-                for (File dir : others) {
-                    // the directory must be in the list of known features
-                    if (!features.contains(dir.getName())) {
-                        continue;
-                    }
 
-                    // skip these special cases
-                    boolean special = "camel-core-osgi".equals(dir.getName()) || "camel-core-xml".equals(dir.getName()) || "camel-http-base".equals(dir.getName())
-                                      || "camel-http-common".equals(dir.getName()) || "camel-jetty-common".equals(dir.getName());
-                    boolean special2 = "camel-as2".equals(dir.getName()) || "camel-box".equals(dir.getName()) || "camel-olingo2".equals(dir.getName())
-                                       || "camel-olingo4".equals(dir.getName()) || "camel-servicenow".equals(dir.getName()) || "camel-salesforce".equals(dir.getName());
-                    boolean special3 = "camel-debezium-common".equals(dir.getName());
-                    if (special || special2 || special3) {
-                        continue;
+        jsonFiles.clear();
+        if (otherssDir != null && otherssDir.isDirectory()) {
+            File[] files = otherssDir.listFiles();
+            if (files != null) {
+                for (File file : files) {
+                    if (features.contains("camel-" + stripExt(file))) {
+                        jsonFiles.add(file);
                     }
-
-                    // this module must be active with a source folder
-                    File src = new File(dir, "src");
-                    boolean active = src.isDirectory() && src.exists();
-                    if (!active) {
-                        continue;
-                    }
-
-                    if (dir.isDirectory() && !"target".equals(dir.getName())) {
-                        File target = new File(dir, "target/classes");
-                        findOtherFilesRecursive(target, jsonFiles, otherFiles, new CamelOthersFileFilter());
-                    }
-                }
-            }
-        }
-        getLog().info("Found " + otherFiles.size() + " other.properties files");
-        getLog().info("Found " + jsonFiles.size() + " other json files");
-
-        // copy json files
-        Path outDir = othersOutDir.toPath();
-        copyFiles(outDir, jsonFiles);
-        generateJsonList(outDir, "../others.properties");
-    }
-
-    private void findComponentFilesRecursive(File dir, Set<File> found, Set<File> components, FileFilter filter) {
-        File[] files = dir.listFiles(filter);
-        if (files != null) {
-            for (File file : files) {
-                // skip files in root dirs as Camel does not store information
-                // there but others may do
-                boolean rootDir = "classes".equals(dir.getName()) || "META-INF".equals(dir.getName());
-                boolean jsonFile = !rootDir && file.isFile() && file.getName().endsWith(PackageHelper.JSON_SUFIX);
-                boolean componentFile = !rootDir && file.isFile() && file.getName().equals("component.properties");
-                if (jsonFile) {
-                    found.add(file);
-                } else if (componentFile) {
-                    components.add(file);
-                } else if (file.isDirectory()) {
-                    findComponentFilesRecursive(file, found, components, filter);
-                }
-            }
-        }
-    }
-
-    private void findDataFormatFilesRecursive(File dir, Set<File> found, Set<File> dataFormats, FileFilter filter) {
-        File[] files = dir.listFiles(filter);
-        if (files != null) {
-            for (File file : files) {
-                // skip files in root dirs as Camel does not store information
-                // there but others may do
-                boolean rootDir = "classes".equals(dir.getName()) || "META-INF".equals(dir.getName());
-                boolean jsonFile = !rootDir && file.isFile() && file.getName().endsWith(PackageHelper.JSON_SUFIX);
-                boolean dataFormatFile = !rootDir && file.isFile() && file.getName().equals("dataformat.properties");
-                if (jsonFile) {
-                    found.add(file);
-                } else if (dataFormatFile) {
-                    dataFormats.add(file);
-                } else if (file.isDirectory()) {
-                    findDataFormatFilesRecursive(file, found, dataFormats, filter);
-                }
-            }
-        }
-    }
-
-    private void findLanguageFilesRecursive(File dir, Set<File> found, Set<File> languages, FileFilter filter) {
-        File[] files = dir.listFiles(filter);
-        if (files != null) {
-            for (File file : files) {
-                // skip files in root dirs as Camel does not store information
-                // there but others may do
-                boolean rootDir = "classes".equals(dir.getName()) || "META-INF".equals(dir.getName());
-                boolean jsonFile = !rootDir && file.isFile() && file.getName().endsWith(PackageHelper.JSON_SUFIX);
-                boolean languageFile = !rootDir && file.isFile() && file.getName().equals("language.properties");
-                if (jsonFile) {
-                    found.add(file);
-                } else if (languageFile) {
-                    languages.add(file);
-                } else if (file.isDirectory()) {
-                    findLanguageFilesRecursive(file, found, languages, filter);
-                }
-            }
-        }
-    }
-
-    private void findOtherFilesRecursive(File dir, Set<File> found, Set<File> others, FileFilter filter) {
-        File[] files = dir.listFiles(filter);
-        if (files != null) {
-            for (File file : files) {
-                // skip files in root dirs as Camel does not store information
-                // there but others may do
-                boolean rootDir = "classes".equals(dir.getName()) || "META-INF".equals(dir.getName());
-                boolean jsonFile = rootDir && file.isFile() && file.getName().endsWith(PackageHelper.JSON_SUFIX);
-                boolean otherFile = !rootDir && file.isFile() && file.getName().equals("other.properties");
-                if (jsonFile) {
-                    found.add(file);
-                } else if (otherFile) {
-                    others.add(file);
-                } else if (file.isDirectory()) {
-                    findOtherFilesRecursive(file, found, others, filter);
-                }
-            }
-        }
-    }
-
-    private static class CamelComponentsFileFilter implements FileFilter {
-
-        @Override
-        public boolean accept(File pathname) {
-            if (pathname.isDirectory() && pathname.getName().equals("model")) {
-                // do not check the camel-core model packages as there is no
-                // components there
-                return false;
-            }
-            if (pathname.isFile() && pathname.getName().endsWith(PackageHelper.JSON_SUFIX)) {
-                // must be a components json file
-                try {
-                    String json = PackageHelper.loadText(pathname);
-                    return "component".equals(PackageHelper.getSchemaKind(json));
-                } catch (IOException e) {
-                    // ignore
                 }
             }
-            return pathname.isDirectory() || (pathname.isFile() && pathname.getName().equals("component.properties"));
         }
-    }
-
-    private static class CamelDataFormatsFileFilter implements FileFilter {
-
-        @Override
-        public boolean accept(File pathname) {
-            if (pathname.isDirectory() && pathname.getName().equals("model")) {
-                // do not check the camel-core model packages as there is no
-                // components there
-                return false;
-            }
-            if (pathname.isFile() && pathname.getName().endsWith(PackageHelper.JSON_SUFIX)) {
-                // must be a dataformat json file
-                try {
-                    String json = PackageHelper.loadText(pathname);
-                    return "dataformat".equals(PackageHelper.getSchemaKind(json));
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-            return pathname.isDirectory() || (pathname.isFile() && pathname.getName().equals("dataformat.properties"));
+        if (!jsonFiles.isEmpty()) {
+            Path outDir = othersOutDir.toPath();
+            copyFiles(outDir, jsonFiles);
+            generateJsonList(outDir, "../others.properties");
+            getLog().info("Copying " + jsonFiles.size() + " Camel other json descriptors");
         }
     }
 
-    private static class CamelLanguagesFileFilter implements FileFilter {
-
-        @Override
-        public boolean accept(File pathname) {
-            if (pathname.isDirectory() && pathname.getName().equals("model")) {
-                // do not check the camel-core model packages as there is no
-                // components there
-                return false;
-            }
-            if (pathname.isFile() && pathname.getName().endsWith(PackageHelper.JSON_SUFIX)) {
-                // must be a language json file
-                try {
-                    String json = PackageHelper.loadText(pathname);
-                    return "language".equals(PackageHelper.getSchemaKind(json));
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-            return pathname.isDirectory() || (pathname.isFile() && pathname.getName().equals("language.properties"));
-        }
+    private static boolean isCoreComponent(String name) {
+        return ("bean,browse,controlbus,dataformat,dataset,direct,directvm,file,language,log,mock,ref"
+                + ",rest,saga,scheduler,seda,stub,timer,validator,vm,xpath,xslt").contains(name);
     }
 
-    private static class CamelOthersFileFilter implements FileFilter {
-
-        @Override
-        public boolean accept(File pathname) {
-            if (pathname.isFile() && pathname.getName().endsWith(PackageHelper.JSON_SUFIX)) {
-                // must be a language json file
-                try {
-                    String json = PackageHelper.loadText(pathname);
-                    return "other".equals(PackageHelper.getSchemaKind(json));
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-            return pathname.isDirectory() || (pathname.isFile() && pathname.getName().equals("other.properties"));
-        }
+    private static String stripExt(File file) {
+        String name = file.getName();
+        return name.substring(0, name.indexOf("."));
     }
 
     public static void copyFiles(Path outDir, Collection<File> files) throws MojoFailureException {
@@ -513,8 +230,8 @@ public class PrepareCatalogKarafMojo extends AbstractMojo {
         Path all = outDir.resolve(outFile);
         try {
             Set<String> answer = Files.list(outDir).filter(p -> p.getFileName().toString().endsWith(PackageHelper.JSON_SUFIX)).map(p -> p.getFileName().toString())
-                // strip out .json from the name
-                .map(n -> n.substring(0, n.length() - PackageHelper.JSON_SUFIX.length())).sorted().collect(LinkedHashSet::new, LinkedHashSet::add, LinkedHashSet::addAll);
+                    // strip out .json from the name
+                    .map(n -> n.substring(0, n.length() - PackageHelper.JSON_SUFIX.length())).sorted().collect(LinkedHashSet::new, LinkedHashSet::add, LinkedHashSet::addAll);
             String data = String.join("\n", answer) + "\n";
             FileUtil.updateFile(all, data);
             return answer;
@@ -523,10 +240,6 @@ public class PrepareCatalogKarafMojo extends AbstractMojo {
         }
     }
 
-    public static void copyFile(File from, File to) throws IOException {
-        FileUtil.updateFile(from.toPath(), to.toPath());
-    }
-
     private Set<String> findKarafFeatures() throws MojoExecutionException, MojoFailureException {
         // load features.xml file and parse it