[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(