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;
}