[resolver] Ensure gradle resolver rewrites known extensions when required (#1474)
diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/BUILD b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/BUILD index 0e95144..2b8deea 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/BUILD +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/BUILD
@@ -14,5 +14,17 @@ "com.google.guava:guava", repository_name = "rules_jvm_external_deps", ), + artifact( + "org.apache.maven:maven-core", + repository_name = "rules_jvm_external_deps", + ), + artifact( + "org.apache.maven:maven-resolver-provider", + repository_name = "rules_jvm_external_deps", + ), + artifact( + "org.apache.maven.resolver:maven-resolver-api", + repository_name = "rules_jvm_external_deps", + ), ], )
diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/MavenPackagingMappings.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/PackagingMappings.java similarity index 96% rename from private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/MavenPackagingMappings.java rename to private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/PackagingMappings.java index 6d85afd..cab89a4 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/MavenPackagingMappings.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/PackagingMappings.java
@@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.github.bazelbuild.rules_jvm_external.resolver.maven; +package com.github.bazelbuild.rules_jvm_external.resolver; import java.util.Map; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; import org.eclipse.aether.artifact.ArtifactType; import org.eclipse.aether.artifact.ArtifactTypeRegistry; -public class MavenPackagingMappings { +public class PackagingMappings { // A set of known packaging types that are not already handled by the type registry that do not // also default to `jar`
diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/BUILD.bazel b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/BUILD.bazel index b0b4fec..7b5f396 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/BUILD.bazel +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/BUILD.bazel
@@ -10,13 +10,14 @@ "//tests:__subpackages__", ], deps = [ + "//private/tools/java/com/github/bazelbuild/rules_jvm_external", + "//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver", + "//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models", + "@gradle", artifact( "org.gradle:gradle-tooling-api", repository_name = "rules_jvm_external_deps", ), - "//private/tools/java/com/github/bazelbuild/rules_jvm_external", - "//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models", - "@gradle", ], )
diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java index caae8aa..024fd58 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java
@@ -14,6 +14,8 @@ package com.github.bazelbuild.rules_jvm_external.resolver.gradle.plugin; +import static com.github.bazelbuild.rules_jvm_external.resolver.PackagingMappings.mapPackagingToExtension; + import com.github.bazelbuild.rules_jvm_external.Coordinates; import com.github.bazelbuild.rules_jvm_external.resolver.gradle.models.GradleDependency; import com.github.bazelbuild.rules_jvm_external.resolver.gradle.models.GradleDependencyImpl; @@ -462,7 +464,8 @@ GradleResolvedArtifact resolvedArtifact = new GradleResolvedArtifactImpl(); resolvedArtifact.setFile(artifact.getFile()); resolvedArtifact.setClassifier(extractClassifier(artifact.getFile(), identifier)); - resolvedArtifact.setExtension(Files.getFileExtension(artifact.getFile().getName())); + String fileExtension = Files.getFileExtension(artifact.getFile().getName()); + resolvedArtifact.setExtension(mapPackagingToExtension(fileExtension)); Coordinates coordinates = new Coordinates( @@ -551,7 +554,8 @@ GradleResolvedArtifact resolvedArtifact = new GradleResolvedArtifactImpl(); resolvedArtifact.setFile(artifact.getFile()); if (artifact.getFile() != null) { - resolvedArtifact.setExtension(PomUtil.extractPackagingFromPom(artifact.getFile())); + String packaging = PomUtil.extractPackagingFromPom(artifact.getFile()); + resolvedArtifact.setExtension(mapPackagingToExtension(packaging)); } resolvedDependency.addArtifact(resolvedArtifact); }
diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/CoordinateGatheringListener.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/CoordinateGatheringListener.java index dd2f6f7..5b51eec 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/CoordinateGatheringListener.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/CoordinateGatheringListener.java
@@ -14,7 +14,7 @@ package com.github.bazelbuild.rules_jvm_external.resolver.maven; -import static com.github.bazelbuild.rules_jvm_external.resolver.maven.MavenPackagingMappings.mapPackagingToExtension; +import static com.github.bazelbuild.rules_jvm_external.resolver.PackagingMappings.mapPackagingToExtension; import com.github.bazelbuild.rules_jvm_external.Coordinates; import java.io.BufferedInputStream;
diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/MavenCoordinates.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/MavenCoordinates.java index 93a860a..9fe7279 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/MavenCoordinates.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven/MavenCoordinates.java
@@ -14,8 +14,8 @@ package com.github.bazelbuild.rules_jvm_external.resolver.maven; -import static com.github.bazelbuild.rules_jvm_external.resolver.maven.MavenPackagingMappings.mapPackagingToExtension; -import static com.github.bazelbuild.rules_jvm_external.resolver.maven.MavenPackagingMappings.mapPackingToClassifier; +import static com.github.bazelbuild.rules_jvm_external.resolver.PackagingMappings.mapPackagingToExtension; +import static com.github.bazelbuild.rules_jvm_external.resolver.PackagingMappings.mapPackingToClassifier; import com.github.bazelbuild.rules_jvm_external.Coordinates; import org.eclipse.aether.artifact.Artifact;
diff --git a/tests/com/github/bazelbuild/rules_jvm_external/resolver/ResolverTestBase.java b/tests/com/github/bazelbuild/rules_jvm_external/resolver/ResolverTestBase.java index c45a23f..6981d58 100644 --- a/tests/com/github/bazelbuild/rules_jvm_external/resolver/ResolverTestBase.java +++ b/tests/com/github/bazelbuild/rules_jvm_external/resolver/ResolverTestBase.java
@@ -309,6 +309,24 @@ } @Test + public void bundlePackagingShouldBeRewrittenToJar() throws IOException { + Coordinates coords = new Coordinates("com.example:bundle-artifact:2.0.1"); + Model model = createModel(coords); + model.setPackaging("bundle"); + + // Create a jar file in the repo, but the POM declares packaging as "bundle" + Coordinates jarCoords = new Coordinates("com.example:bundle-artifact:jar:2.0.1"); + Path repo = MavenRepo.create().add(jarCoords).writePomFile(model).getPath(); + + Graph<Coordinates> resolved = + resolver.resolve(prepareRequestFor(repo.toUri(), coords)).getResolution(); + assertEquals(1, resolved.nodes().size()); + + Coordinates resolvedCoords = resolved.nodes().iterator().next(); + assertEquals("jar", resolvedCoords.getExtension()); + } + + @Test public void shouldResolveAndDownloadItemIdentifiedByClassifierFromArgsFile() throws IOException { Map<String, Object> args = Map.of(