maven_rules.bzl: Fix maven coordinates order mismatch 

Classifier should be provided in the form:

  "groupId:artifactId:version[:packaging][:classifier]"

because that's what maven-dependency-plugin expects and not in the form:

  "groupId:artifactId[:packaging][:classifier]:version"

as documented here: [1]. Also it was missed to reflect the classifier in
the output artifact name.

TEST PLAN:

WORKSPACE:

  load("//tools:maven_rules.bzl", "maven_jar",
     "maven_dependency_plugin")
  maven_dependency_plugin()
  maven_jar(
    name = "jetty_server_sources",
    artifact = "org.eclipse.jetty:jetty-server:9.3.11.v20160721:jar:sources",
    sha1 = "b23cac190808baed928260b2c9beca3b1ed232b4",
  )

BUILD:

  java_library(
    name = "jetty-server-sources",
    exports = ["@jetty_server_sources//jar"],
  )

  $ bazel build :jetty-server-sources
  [...]
  Target //:jetty-server-sources up-to-date:
  bazel-bin/libjetty-server-sources.jar

[1] https://maven.apache.org/pom.html#Maven_Coordinates

Fixes #2049.

--
Change-Id: I3297fb3676324cc6b4bb6ff6b2b6e18ce33f633c
Reviewed-on: https://cr.bazel.build/7213
PiperOrigin-RevId: 144972944
MOS_MIGRATED_REVID=144972944
diff --git a/src/test/shell/bazel/maven_skylark_test.sh b/src/test/shell/bazel/maven_skylark_test.sh
index 32538db..3b5a496 100755
--- a/src/test/shell/bazel/maven_skylark_test.sh
+++ b/src/test/shell/bazel/maven_skylark_test.sh
@@ -102,6 +102,30 @@
   expect_log "Tra-la!"
 }
 
+function test_maven_jar_with_classifier_skylark() {
+  setup_zoo
+  version="1.21"
+  packaging = "jar"
+  classifier = "sources"
+  serve_artifact com.example.carnivore carnivore $version $packaging $classifier
+  setup_local_maven_settings_xml "http://localhost:$fileserver_port"
+
+  cat > WORKSPACE <<EOF
+load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_jar")
+maven_jar(
+    name = 'bar_sources',
+    artifact = "com.example.foo:bar:$version:jar:sources",
+    sha1 = '$sha1',
+    settings = '//:$local_maven_settings_xml',
+)
+
+bind(name = 'baz_sources', actual = '@bar_sources//jar')
+EOF
+
+  bazel run //zoo:ball-pit >& $TEST_log || fail "Expected run to succeed"
+  expect_log "Tra-la!"
+}
+
 function setup_android_binary() {
   mkdir -p java/com/app
   cat > java/com/app/BUILD <<EOF
diff --git a/src/test/shell/bazel/remote_helpers.sh b/src/test/shell/bazel/remote_helpers.sh
index b4c4940..ab8dbd5 100755
--- a/src/test/shell/bazel/remote_helpers.sh
+++ b/src/test/shell/bazel/remote_helpers.sh
@@ -159,6 +159,9 @@
   local artifact_id=$2
   local version=$3
   local packaging=${4:-jar}
+  # TODO(davido): This is unused for now.
+  # Finalize the implementation once the underlying tests are fixed.
+  local classifier=${5:-jar}
   if [ $packaging == "aar" ]; then
     make_test_aar
     local artifact=$test_aar
diff --git a/tools/build_defs/repo/maven_rules.bzl b/tools/build_defs/repo/maven_rules.bzl
index 90b1e37..9a15166 100644
--- a/tools/build_defs/repo/maven_rules.bzl
+++ b/tools/build_defs/repo/maven_rules.bzl
@@ -24,7 +24,10 @@
 # 3) maven_dependency_plugin()
 #    This rule downloads the maven-dependency-plugin used internally
 #    for testing and the implementation for the fetching of artifacts.
-
+#
+# Maven coordinates are expected to be in this form:
+# groupId:artifactId:version[:packaging][:classifier]
+#
 # Installation requirements prior to using this rule:
 # 1) Maven binary: `mvn`
 # 2) Maven plugin: `maven-dependency-plugin:2.10`
@@ -78,9 +81,9 @@
     # downloads the correct artifact.
     fully_qualified_name = "%s:%s" % (fully_qualified_name, packaging)
   elif len(parts) == 4:
-    group_id, artifact_id, packaging, version = parts
+    group_id, artifact_id, version, packaging = parts
   elif len(parts) == 5:
-    group_id, artifact_id, packaging, classifier, version = parts
+    group_id, artifact_id, version, packaging, classifier = parts
   else:
     fail("Invalid fully qualified name for artifact: %s" % fully_qualified_name)
 
@@ -102,9 +105,11 @@
   """Creates a struct that contains the paths to create the cache WORKSPACE"""
 
   # e.g. guava-18.0.jar
-  artifact_filename = "%s-%s.%s" % (coordinates.artifact_id,
-                                    coordinates.version,
-                                    coordinates.packaging)
+  artifact_filename = "%s-%s" % (coordinates.artifact_id,
+                                 coordinates.version)
+  if coordinates.classifier:
+    artifact_filename += "-" + coordinates.classifier
+  artifact_filename += "." + coordinates.packaging
   sha1_filename = "%s.sha1" % artifact_filename
 
   # e.g. com/google/guava/guava/18.0