diff --git a/manager/resolver/maven/src/main/java/org/jboss/forge/furnace/manager/maven/addon/MavenAddonDependencyResolver.java b/manager/resolver/maven/src/main/java/org/jboss/forge/furnace/manager/maven/addon/MavenAddonDependencyResolver.java index 4124427f..ed7fe109 100644 --- a/manager/resolver/maven/src/main/java/org/jboss/forge/furnace/manager/maven/addon/MavenAddonDependencyResolver.java +++ b/manager/resolver/maven/src/main/java/org/jboss/forge/furnace/manager/maven/addon/MavenAddonDependencyResolver.java @@ -156,27 +156,29 @@ public String resolveAPIVersion(AddonId addonId) Settings settings = container.getSettings(); DefaultRepositorySystemSession session = container.setupRepoSession(system, settings); List repositories = MavenRepositories.getRemoteRepositories(container, settings); - // Furnace API is in provided scope. - session.setDependencySelector(new ScopeDependencySelector(Arrays.asList("provided", "compile"), null)); String mavenCoords = toMavenCoords(addonId); Artifact queryArtifact = new DefaultArtifact(mavenCoords); - CollectRequest collectRequest = new CollectRequest(new Dependency(queryArtifact, null), repositories); + + session.setDependencySelector(new ScopeDependencySelector(Arrays.asList("provided", "compile"), Arrays + .asList("test"))); + + CollectRequest request = new CollectRequest(new Dependency(queryArtifact, null), repositories); CollectResult result; try { - result = system.collectDependencies(session, collectRequest); + result = system.collectDependencies(session, request); } catch (DependencyCollectionException e) { throw new RuntimeException(e); } - String apiVersion = findVersion(result.getRoot(), FURNACE_API_GROUP_ID, FURNACE_API_ARTIFACT_ID); + String apiVersion = findVersion(result.getRoot().getChildren(), FURNACE_API_GROUP_ID, FURNACE_API_ARTIFACT_ID); return apiVersion; } - private String findVersion(DependencyNode node, String groupId, String artifactId) + private String findVersion(List dependencies, String groupId, String artifactId) { - for (DependencyNode child : node.getChildren()) + for (DependencyNode child : dependencies) { Artifact childArtifact = child.getArtifact(); @@ -185,6 +187,14 @@ private String findVersion(DependencyNode node, String groupId, String artifactI { return childArtifact.getBaseVersion(); } + else + { + String version = findVersion(child.getChildren(), groupId, artifactId); + if (version != null) + { + return version; + } + } } return null; } diff --git a/manager/resolver/maven/src/test/java/org/jboss/forge/furnace/manager/AddonManagerDependencyResolutionTest.java b/manager/resolver/maven/src/test/java/org/jboss/forge/furnace/manager/AddonManagerDependencyResolutionTest.java index 4b0e4287..d0580a14 100644 --- a/manager/resolver/maven/src/test/java/org/jboss/forge/furnace/manager/AddonManagerDependencyResolutionTest.java +++ b/manager/resolver/maven/src/test/java/org/jboss/forge/furnace/manager/AddonManagerDependencyResolutionTest.java @@ -143,4 +143,12 @@ public void testResolveAPIVersion() throws Exception Assert.assertEquals("2.0.0.Beta3", apiVersion); } + @Test + public void testResolveIndirectAPIVersion() throws Exception + { + AddonId sut = AddonId.from("test:furnace_api_indirect_dep", "1.0.0.Final"); + String apiVersion = resolver.resolveAPIVersion(sut); + Assert.assertEquals("2.0.0.Beta3", apiVersion); + } + } diff --git a/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final-forge-addon.jar b/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final-forge-addon.jar new file mode 100644 index 00000000..f3dc26bb Binary files /dev/null and b/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final-forge-addon.jar differ diff --git a/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final.jar b/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final.jar new file mode 100644 index 00000000..f3dc26bb Binary files /dev/null and b/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final.jar differ diff --git a/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final.pom b/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final.pom new file mode 100644 index 00000000..1cf3a3aa --- /dev/null +++ b/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/1.0.0.Final/furnace_api_indirect_dep-1.0.0.Final.pom @@ -0,0 +1,43 @@ + + 4.0.0 + test + furnace_api_indirect_dep + 1.0.0.Final + Forge - Example Addon + + + test + no_dep + 1.0.0.Final + forge-addon + + + test + furnace_api_dep + 1.0.0.Final + forge-addon + provided + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + create-forge-addon + package + + jar + + false + + forge-addon + + + + + + + diff --git a/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/maven-metadata.xml b/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/maven-metadata.xml new file mode 100644 index 00000000..34edab17 --- /dev/null +++ b/manager/resolver/maven/src/test/resources/repository/test/furnace_api_indirect_dep/maven-metadata.xml @@ -0,0 +1,13 @@ + + + test + furnace_api_indirect_dep + + 1.0.0.Final + 1.0.0.Final + + 1.0.0.Final + + 20130310152137 + +