protected Set resolveDependencies()

in dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java [381:555]


    protected Set<String> resolveDependencies(File settings, File profile) throws Exception {
        Set<String> answer = new TreeSet<>((o1, o2) -> {
            // favour org.apache.camel first
            boolean c1 = o1.contains("org.apache.camel:");
            boolean c2 = o2.contains("org.apache.camel:");
            if (c1 && !c2) {
                return -1;
            } else if (!c1 && c2) {
                return 1;
            }
            return o1.compareTo(o2);
        });

        if (kameletsVersion == null) {
            kameletsVersion = VersionHelper.extractKameletsVersion();
        }

        // custom dependencies
        for (String d : dependencies) {
            answer.add(normalizeDependency(d));
        }

        List<String> lines = RuntimeUtil.loadPropertiesLines(settings);

        // check if we use custom and/or official ASF kamelets
        List<String> officialKamelets = KameletCatalogHelper.findKameletNames(kameletsVersion);
        boolean kamelets = false;
        boolean asfKamelets = false;
        for (String line : lines) {
            if (line.startsWith("kamelet=")) {
                kamelets = true;
                String name = StringHelper.after(line, "kamelet=");
                if (officialKamelets.contains(name)) {
                    asfKamelets = true;
                    break;
                }
            }
        }
        // any other custom kamelets that are loaded via routes
        kamelets |= lines.stream()
                .anyMatch(l -> (l.startsWith("camel.main.routesIncludePattern=") && l.contains(".kamelet.yaml"))
                        || l.startsWith("camel.component.kamelet.location=") && l.contains(".kamelet.yaml"));
        for (String line : lines) {
            if (line.startsWith("dependency=")) {
                String v = StringHelper.after(line, "dependency=");
                // skip endpointdsl as its already included, and core-languages and java-joor as
                // we let quarkus compile
                boolean skip = v == null || v.contains("org.apache.camel:camel-core-languages")
                        || v.contains("org.apache.camel:camel-java-joor-dsl")
                        || v.contains("camel-endpointdsl")
                        || !(kamelets) && v.contains("org.apache.camel:camel-kamelet");
                if (!skip) {
                    answer.add(v);
                }
                if (kamelets && v != null && v.contains("org.apache.camel:camel-kamelet")) {
                    // kamelets need yaml-dsl
                    answer.add("camel:yaml-dsl");
                    if (asfKamelets) {
                        // include JARs for official ASF kamelets
                        answer.add("org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
                        if (VersionHelper.compare(camelVersion, "4.10.0") < 0) {
                            answer.add("org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
                        }
                    }
                }
            } else if (line.startsWith("camel.jbang.dependencies=")) {
                String deps = StringHelper.after(line, "camel.jbang.dependencies=");
                if (!deps.isEmpty()) {
                    for (String d : deps.split(",")) {
                        answer.add(d.trim());
                        if (kamelets && d.contains("org.apache.camel:camel-kamelet")) {
                            // kamelets need yaml-dsl
                            answer.add("camel:yaml-dsl");
                            if (asfKamelets) {
                                // include JARs for official ASF kamelets
                                answer.add("org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
                                if (VersionHelper.compare(camelVersion, "4.10.0") < 0) {
                                    answer.add("org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
                                }
                            }
                        }
                    }
                }
            } else if (line.startsWith("camel.jbang.classpathFiles")) {
                String deps = StringHelper.after(line, "camel.jbang.classpathFiles=");
                if (!deps.isEmpty()) {
                    for (String d : deps.split(",")) {
                        // special to include local JARs in export lib folder
                        if (d.endsWith(".jar")) {
                            answer.add("lib:" + d.trim());
                        }
                    }
                }
            } else if (line.startsWith("camel.main.routesIncludePattern=")) {
                String routes = StringHelper.after(line, "camel.main.routesIncludePattern=");
                if (!routes.isEmpty()) {
                    for (String r : routes.split(",")) {
                        String ext = FileUtil.onlyExt(r, true);
                        if (ext != null) {
                            // java is moved into src/main/java and compiled during build
                            // for the other DSLs we need to add dependencies
                            if ("xml".equals(ext)) {
                                answer.add("mvn:org.apache.camel:camel-xml-io-dsl");
                            } else if ("yaml".equals(ext)) {
                                answer.add("mvn:org.apache.camel:camel-yaml-dsl");
                                // is it a kamelet?
                                ext = FileUtil.onlyExt(r, false);
                                if ("kamelet.yaml".equals(ext)) {
                                    answer.add("camel:kamelet");
                                    if (asfKamelets) {
                                        // include JARs for official ASF kamelets
                                        answer.add("mvn:org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
                                        if (VersionHelper.compare(camelVersion, "4.10.0") < 0) {
                                            answer.add("mvn:org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            } else if (kamelets && line.startsWith("camel.component.kamelet.location=")) {
                // kamelets need yaml-dsl
                answer.add("camel:kamelet");
                answer.add("camel:yaml-dsl");
                if (asfKamelets) {
                    // include JARs for official ASF kamelets
                    answer.add("mvn:org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
                    if (VersionHelper.compare(camelVersion, "4.10.0") < 0) {
                        answer.add("mvn:org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
                    }
                }
            } else if (line.startsWith("modeline=")) {
                answer.add("camel:dsl-modeline");
            }
        }

        // include custom dependencies defined in profile
        if (profile != null && profile.exists()) {
            Properties prop = new CamelCaseOrderedProperties();
            RuntimeUtil.loadProperties(prop, profile);
            for (String d : RuntimeUtil.getDependenciesAsArray(prop)) {
                answer.add(d.trim());
            }
            // automatic add needed dependencies when dev-console is enabled
            if ("true".equalsIgnoreCase(prop.getProperty("camel.main.devConsoleEnabled"))
                    || "true".equalsIgnoreCase(prop.getProperty("camel.server.devConsoleEnabled"))) {
                answer.add("camel:console");
                answer.add("camel:management");
            }
            // automatic add needed dependencies when main server enabled plugins
            if ("true".equalsIgnoreCase(prop.getProperty("camel.server.jolokiaEnabled"))) {
                answer.add("camel:platform-http-jolokia");
            }
            if ("true".equalsIgnoreCase(prop.getProperty("camel.server.metricsEnabled"))) {
                answer.add("camel:micrometer-prometheus");
            }
        }

        // remove duplicate versions (keep first)
        Map<String, String> versions = new HashMap<>();
        Set<String> toBeRemoved = new HashSet<>();
        for (String line : answer) {
            MavenGav gav = MavenGav.parseGav(line);
            String ga = gav.getGroupId() + ":" + gav.getArtifactId();
            if (!versions.containsKey(ga)) {
                versions.put(ga, gav.getVersion());
            } else {
                toBeRemoved.add(line);
            }
        }
        answer.removeAll(toBeRemoved);

        return answer;
    }