Using recursive BOM check from boot2 branch
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ea6747b4 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ea6747b4 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ea6747b4 Branch: refs/heads/master Commit: ea6747b4e0a1423aa3d370f23dc37a4fdba3d639 Parents: f75d805 Author: Nicola Ferraro <ni.ferr...@gmail.com> Authored: Mon Sep 25 11:40:09 2017 +0200 Committer: Nicola Ferraro <ni.ferr...@gmail.com> Committed: Mon Sep 25 14:55:58 2017 +0200 ---------------------------------------------------------------------- .../maven/bom/generator/BomGeneratorMojo.java | 33 ++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/ea6747b4/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java ---------------------------------------------------------------------- diff --git a/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java b/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java index 9bfcb2a..3f47f15 100644 --- a/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java +++ b/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java @@ -385,21 +385,50 @@ public class BomGeneratorMojo extends AbstractMojo { } private Set<String> getProvidedDependencyManagement(String groupId, String artifactId, String version) throws Exception { + return getProvidedDependencyManagement(groupId, artifactId, version, new TreeSet<>()); + } + + private Set<String> getProvidedDependencyManagement(String groupId, String artifactId, String version, Set<String> gaChecked) throws Exception { + String ga = groupId + ":" + artifactId; + gaChecked.add(ga); Artifact bom = resolveArtifact(groupId, artifactId, version, "pom"); MavenProject bomProject = loadExternalProjectPom(bom.getFile()); Set<String> provided = new HashSet<>(); if (bomProject.getDependencyManagement() != null && bomProject.getDependencyManagement().getDependencies() != null) { for (Dependency dep : bomProject.getDependencyManagement().getDependencies()) { - provided.add(comparisonKey(dep)); + if ("pom".equals(dep.getType()) && "import".equals(dep.getScope())) { + String subGa = dep.getGroupId() + ":" + dep.getArtifactId(); + if (!gaChecked.contains(subGa)) { + Set<String> sub = getProvidedDependencyManagement(dep.getGroupId(), dep.getArtifactId(), resolveVersion(bomProject, dep.getVersion()), gaChecked); + provided.addAll(sub); + } + } else { + provided.add(comparisonKey(dep)); + } } } return provided; } + private String resolveVersion(MavenProject project, String version) { + if (version.contains("${")) { + int start = version.indexOf("${"); + int end = version.indexOf("}"); + if (end > start) { + String prop = version.substring(start + 2, end); + String resolved = project.getProperties().getProperty(prop); + if (resolved != null) { + version = version.substring(0, start) + resolved + version.substring(end + 1); + } + } + } + return version; + } + private String comparisonKey(Dependency dependency) { - return dependency.getGroupId() + ":" + dependency.getArtifactId(); + return dependency.getGroupId() + ":" + dependency.getArtifactId() + ":" + (dependency.getType() != null ? dependency.getType() : "jar"); } private Artifact resolveArtifact(String groupId, String artifactId, String version, String type) throws Exception {