Add logback to Gradle Resolver to resolve SLF4J provider not found message (#1508)

diff --git a/MODULE.bazel b/MODULE.bazel
index 047da57..bf68b1a 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -34,6 +34,8 @@
 maven.install(
     name = "rules_jvm_external_deps",
     artifacts = [
+        "ch.qos.logback:logback-classic:1.5.23",
+        "com.github.jknack:handlebars:4.3.1",
         "com.google.auth:google-auth-library-credentials:1.23.0",
         "com.google.auth:google-auth-library-oauth2-http:1.23.0",
         "com.google.cloud:google-cloud-core:2.40.0",
@@ -57,19 +59,18 @@
         "org.apache.maven.resolver:maven-resolver-transport-file:%s" % _MAVEN_RESOLVER_VERSION,
         "org.apache.maven.resolver:maven-resolver-transport-http:%s" % _MAVEN_RESOLVER_VERSION,
         "org.apache.maven.resolver:maven-resolver-util:%s" % _MAVEN_RESOLVER_VERSION,
+        "org.bouncycastle:bcprov-jdk15on:1.68",
+        "org.bouncycastle:bcpg-jdk15on:1.68",
         "org.codehaus.plexus:plexus-cipher:2.1.0",
         "org.codehaus.plexus:plexus-sec-dispatcher:2.0",
         "org.codehaus.plexus:plexus-utils:3.5.1",
         "org.fusesource.jansi:jansi:2.4.1",
-        "org.slf4j:jul-to-slf4j:2.0.12",
-        "org.slf4j:log4j-over-slf4j:2.0.12",
-        "org.slf4j:slf4j-simple:2.0.12",
+        "org.gradle:gradle-tooling-api:%s" % _GRADLE_VERSION,
+        "org.slf4j:jul-to-slf4j:2.0.17",
+        "org.slf4j:log4j-over-slf4j:2.0.17",
+        "org.slf4j:slf4j-simple:2.0.17",
         "software.amazon.awssdk:s3:2.26.12",
         "software.amazon.awssdk:sdk-core:2.26.12",
-        "org.bouncycastle:bcprov-jdk15on:1.68",
-        "org.bouncycastle:bcpg-jdk15on:1.68",
-        "org.gradle:gradle-tooling-api:%s" % _GRADLE_VERSION,
-        "com.github.jknack:handlebars:4.3.1",
     ],
     fetch_sources = True,
     lock_file = "//:rules_jvm_external_deps_install.json",
diff --git a/private/dependency_tree_parser.bzl b/private/dependency_tree_parser.bzl
index 3cdc42c..0b82991 100644
--- a/private/dependency_tree_parser.bzl
+++ b/private/dependency_tree_parser.bzl
@@ -511,7 +511,7 @@
             # a jvm_import/aar_import based on information in dep_tree.
             seen_imports[target_label] = True
             if visibilities_to_override.get(target_label):
-                 visibility = "[%s]" % (",".join(["\"%s\"" % v for v in visibilities_to_override.get(target_label)]))
+                visibility = "[%s]" % (",".join(["\"%s\"" % v for v in visibilities_to_override.get(target_label)]))
             all_imports.append(
                 "alias(\n\tname = \"%s\",\n\tactual = \"%s\",\n\tvisibility = %s,)" % (target_label, labels_to_override.get(target_label), visibility),
             )
diff --git a/private/extensions/maven.bzl b/private/extensions/maven.bzl
index 1a0fb16..2edc587 100644
--- a/private/extensions/maven.bzl
+++ b/private/extensions/maven.bzl
@@ -571,7 +571,7 @@
             else:
                 current = overrides[override.name].get(override.coordinates)
                 to_use = _fail_if_different("Target of override for %s" % override.coordinates, current, value, [None])
-                
+
                 current_visibility = override_visibilities[override.name].get(override.coordinates)
                 if current_visibility == None:
                     visibility_to_use = override.visibility
diff --git a/private/rules/coursier.bzl b/private/rules/coursier.bzl
index 544c125..22b3a6a 100644
--- a/private/rules/coursier.bzl
+++ b/private/rules/coursier.bzl
@@ -1015,7 +1015,7 @@
                 if _is_verbose(repository_ctx):
                     print("Removing source artifact with no file: %s" % dep["coord"])
             else:
-              amended_deps.append(dep)
+                amended_deps.append(dep)
             continue
 
         # You'd think we could use skylib here to do the heavy lifting, but
diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/BUILD.bazel b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/BUILD.bazel
index 0974c0e..a1fc937 100644
--- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/BUILD.bazel
+++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/BUILD.bazel
@@ -51,7 +51,15 @@
         "GradleMain.java",
     ],
     main_class = "com.github.bazelbuild.rules_jvm_external.resolver.gradle.GradleMain",
+    resource_strip_prefix = "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle",
+    resources = ["logback.xml"],
     visibility = ["//visibility:public"],
+    runtime_deps = [
+        artifact(
+            "ch.qos.logback:logback-classic",
+            repository_name = "rules_jvm_external_deps",
+        ),
+    ],
     deps = [
         ":gradle",
         "//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver",
diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/logback.xml b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/logback.xml
new file mode 100644
index 0000000..149a441
--- /dev/null
+++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/logback.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+    </root>
+</configuration>
diff --git a/repositories.bzl b/repositories.bzl
index 893e200..c7025bb 100644
--- a/repositories.bzl
+++ b/repositories.bzl
@@ -125,6 +125,8 @@
     maven_install(
         name = "rules_jvm_external_deps",
         artifacts = [
+            "ch.qos.logback:logback-classic:1.5.23",
+            "com.github.jknack:handlebars:4.3.1",
             "com.google.auth:google-auth-library-credentials:1.23.0",
             "com.google.auth:google-auth-library-oauth2-http:1.23.0",
             "com.google.cloud:google-cloud-core:2.40.0",
@@ -148,19 +150,18 @@
             "org.apache.maven.resolver:maven-resolver-transport-file:%s" % _MAVEN_RESOLVER_VERSION,
             "org.apache.maven.resolver:maven-resolver-transport-http:%s" % _MAVEN_RESOLVER_VERSION,
             "org.apache.maven.resolver:maven-resolver-util:%s" % _MAVEN_RESOLVER_VERSION,
+            "org.bouncycastle:bcprov-jdk15on:1.68",
+            "org.bouncycastle:bcpg-jdk15on:1.68",
             "org.codehaus.plexus:plexus-cipher:2.1.0",
             "org.codehaus.plexus:plexus-sec-dispatcher:2.0",
             "org.codehaus.plexus:plexus-utils:3.5.1",
             "org.fusesource.jansi:jansi:2.4.1",
-            "org.slf4j:jul-to-slf4j:2.0.12",
-            "org.slf4j:log4j-over-slf4j:2.0.12",
-            "org.slf4j:slf4j-simple:2.0.12",
+            "org.gradle:gradle-tooling-api:%s" % _GRADLE_VERSION,
+            "org.slf4j:jul-to-slf4j:2.0.17",
+            "org.slf4j:log4j-over-slf4j:2.0.17",
+            "org.slf4j:slf4j-simple:2.0.17",
             "software.amazon.awssdk:s3:2.26.12",
             "software.amazon.awssdk:sdk-core:2.26.12",
-            "org.bouncycastle:bcprov-jdk15on:1.68",
-            "org.bouncycastle:bcpg-jdk15on:1.68",
-            "org.gradle:gradle-tooling-api:%s" % _GRADLE_VERSION,
-            "com.github.jknack:handlebars:4.3.1",
         ],
         maven_install_json = deps_lock_file,
         strict_visibility = True,
diff --git a/rules_jvm_external_deps_install.json b/rules_jvm_external_deps_install.json
index eab0fc0..d9ccf3d 100644
--- a/rules_jvm_external_deps_install.json
+++ b/rules_jvm_external_deps_install.json
@@ -1,7 +1,7 @@
 {
   "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
-  "__INPUT_ARTIFACTS_HASH": 1275088240,
-  "__RESOLVED_ARTIFACTS_HASH": 968256901,
+  "__INPUT_ARTIFACTS_HASH": -799797083,
+  "__RESOLVED_ARTIFACTS_HASH": 1183126929,
   "conflict_resolution": {
     "com.google.guava:guava:33.2.1-jre": "com.google.guava:guava:33.4.8-jre",
     "org.codehaus.plexus:plexus-utils:3.5.1": "org.codehaus.plexus:plexus-utils:3.6.0"
@@ -14,6 +14,20 @@
       },
       "version": "1.0"
     },
+    "ch.qos.logback:logback-classic": {
+      "shasums": {
+        "jar": "f80ed51f2621488cee4997982031a0614a9e1757ef58700c4e5d8081c0eb948f",
+        "sources": "9f00e2d6af67ffa5cb0a108d2239ca631e5ac41e9a0ba4fdc754d8a97b4ccb6f"
+      },
+      "version": "1.5.23"
+    },
+    "ch.qos.logback:logback-core": {
+      "shasums": {
+        "jar": "c07ee90df0c49d8890bfbe9844d34324f2751b81caf69cd84caddcc1f6107400",
+        "sources": "90d3c4b085ffd24fa63ebbc30186dafa6c950f75165a3ec343570bf7243a9f03"
+      },
+      "version": "1.5.23"
+    },
     "com.fasterxml.jackson.core:jackson-core": {
       "shasums": {
         "jar": "ddb26c8a1f1a84535e8213c48b35b253370434e3287b3cf15777856fc4e58ce6",
@@ -806,31 +820,31 @@
     },
     "org.slf4j:jul-to-slf4j": {
       "shasums": {
-        "jar": "84f02864cab866ffb196ed2022b1b8da682ea6fb3d4a161069429e8391ee2979",
-        "sources": "62702e12ff5af75f4125c76403ffb577b54972478e83a1ae075bc5a38db233f7"
+        "jar": "a7afcd23b9cfd1475e55c94f943b808c5922035e7e2c2a5c65a487a4106bc538",
+        "sources": "63962cb695376c541835ce130a9a734516c61628aafdb088db0241f0c9559ab2"
       },
-      "version": "2.0.12"
+      "version": "2.0.17"
     },
     "org.slf4j:log4j-over-slf4j": {
       "shasums": {
-        "jar": "6271f07eeab8f14321dcdfed8d1de9458198eaa3320174923d1ef3ace9048efa",
-        "sources": "77ff3d616f87fa07545753e3ed767f0d338a8bd4398598e43d8ce09314edcb15"
+        "jar": "cbf30eaf95357ab7babf9be123da9cc702f0fe83b23392b7a62589d60b5862d1",
+        "sources": "8979d8b96daf80abc693dd367747889f44903b74d2192976591cabc60f5f55fa"
       },
-      "version": "2.0.12"
+      "version": "2.0.17"
     },
     "org.slf4j:slf4j-api": {
       "shasums": {
-        "jar": "a79502b8abdfbd722846a27691226a4088682d6d35654f9b80e2a9ccacf7ed47",
-        "sources": "f05052e5924887edee5ba8228d210e763f85032e2b58245a37fa71e049950787"
+        "jar": "7b751d952061954d5abfed7181c1f645d336091b679891591d63329c622eb832",
+        "sources": "db0d08d8efa05ad19d174d747bd9d8e68dbb02b596812fe7b3a681656e346694"
       },
-      "version": "2.0.12"
+      "version": "2.0.17"
     },
     "org.slf4j:slf4j-simple": {
       "shasums": {
-        "jar": "4cd8f3d6236044600e7054da7c124c6d2e9f45eb43c77d4e9b093fe1095edc85",
-        "sources": "b4fca032b643ed51876cc2b3d3acc3a6526558273f6157abc4831f8aed9bea60"
+        "jar": "ddfea59ac074c6d3e24ac2c38622d2d963895e17f70b38ed4bdae4d780be6964",
+        "sources": "30b660e79419bfcebd678e75bdfe3644eaf325f50253a68395d93634da5953df"
       },
-      "version": "2.0.12"
+      "version": "2.0.17"
     },
     "org.threeten:threetenbp": {
       "shasums": {
@@ -1044,6 +1058,10 @@
     }
   },
   "dependencies": {
+    "ch.qos.logback:logback-classic": [
+      "ch.qos.logback:logback-core",
+      "org.slf4j:slf4j-api"
+    ],
     "com.github.jknack:handlebars": [
       "org.slf4j:slf4j-api"
     ],
@@ -1628,6 +1646,78 @@
       "org.aopalliance.aop",
       "org.aopalliance.intercept"
     ],
+    "ch.qos.logback:logback-classic": [
+      "ch.qos.logback.classic",
+      "ch.qos.logback.classic.boolex",
+      "ch.qos.logback.classic.encoder",
+      "ch.qos.logback.classic.filter",
+      "ch.qos.logback.classic.helpers",
+      "ch.qos.logback.classic.html",
+      "ch.qos.logback.classic.joran",
+      "ch.qos.logback.classic.joran.action",
+      "ch.qos.logback.classic.joran.sanity",
+      "ch.qos.logback.classic.joran.serializedModel",
+      "ch.qos.logback.classic.jul",
+      "ch.qos.logback.classic.layout",
+      "ch.qos.logback.classic.log4j",
+      "ch.qos.logback.classic.model",
+      "ch.qos.logback.classic.model.processor",
+      "ch.qos.logback.classic.model.util",
+      "ch.qos.logback.classic.net",
+      "ch.qos.logback.classic.net.server",
+      "ch.qos.logback.classic.pattern",
+      "ch.qos.logback.classic.pattern.color",
+      "ch.qos.logback.classic.selector",
+      "ch.qos.logback.classic.selector.servlet",
+      "ch.qos.logback.classic.servlet",
+      "ch.qos.logback.classic.sift",
+      "ch.qos.logback.classic.spi",
+      "ch.qos.logback.classic.turbo",
+      "ch.qos.logback.classic.tyler",
+      "ch.qos.logback.classic.util"
+    ],
+    "ch.qos.logback:logback-core": [
+      "ch.qos.logback.core",
+      "ch.qos.logback.core.boolex",
+      "ch.qos.logback.core.encoder",
+      "ch.qos.logback.core.filter",
+      "ch.qos.logback.core.helpers",
+      "ch.qos.logback.core.hook",
+      "ch.qos.logback.core.html",
+      "ch.qos.logback.core.joran",
+      "ch.qos.logback.core.joran.action",
+      "ch.qos.logback.core.joran.conditional",
+      "ch.qos.logback.core.joran.event",
+      "ch.qos.logback.core.joran.node",
+      "ch.qos.logback.core.joran.sanity",
+      "ch.qos.logback.core.joran.spi",
+      "ch.qos.logback.core.joran.util",
+      "ch.qos.logback.core.joran.util.beans",
+      "ch.qos.logback.core.layout",
+      "ch.qos.logback.core.model",
+      "ch.qos.logback.core.model.conditional",
+      "ch.qos.logback.core.model.processor",
+      "ch.qos.logback.core.model.processor.conditional",
+      "ch.qos.logback.core.model.util",
+      "ch.qos.logback.core.net",
+      "ch.qos.logback.core.net.server",
+      "ch.qos.logback.core.net.ssl",
+      "ch.qos.logback.core.pattern",
+      "ch.qos.logback.core.pattern.color",
+      "ch.qos.logback.core.pattern.parser",
+      "ch.qos.logback.core.pattern.util",
+      "ch.qos.logback.core.property",
+      "ch.qos.logback.core.read",
+      "ch.qos.logback.core.recovery",
+      "ch.qos.logback.core.rolling",
+      "ch.qos.logback.core.rolling.helper",
+      "ch.qos.logback.core.sift",
+      "ch.qos.logback.core.spi",
+      "ch.qos.logback.core.status",
+      "ch.qos.logback.core.subst",
+      "ch.qos.logback.core.testUtil",
+      "ch.qos.logback.core.util"
+    ],
     "com.fasterxml.jackson.core:jackson-core": [
       "com.fasterxml.jackson.core",
       "com.fasterxml.jackson.core.async",
@@ -3244,6 +3334,10 @@
     "https://repo.gradle.org/gradle/libs-releases/": [
       "aopalliance:aopalliance",
       "aopalliance:aopalliance:jar:sources",
+      "ch.qos.logback:logback-classic",
+      "ch.qos.logback:logback-classic:jar:sources",
+      "ch.qos.logback:logback-core",
+      "ch.qos.logback:logback-core:jar:sources",
       "com.fasterxml.jackson.core:jackson-core",
       "com.fasterxml.jackson.core:jackson-core:jar:sources",
       "com.github.jknack:handlebars",
@@ -3541,6 +3635,10 @@
     "https://repo1.maven.org/maven2/": [
       "aopalliance:aopalliance",
       "aopalliance:aopalliance:jar:sources",
+      "ch.qos.logback:logback-classic",
+      "ch.qos.logback:logback-classic:jar:sources",
+      "ch.qos.logback:logback-core",
+      "ch.qos.logback:logback-core:jar:sources",
       "com.fasterxml.jackson.core:jackson-core",
       "com.fasterxml.jackson.core:jackson-core:jar:sources",
       "com.github.jknack:handlebars",
@@ -3837,6 +3935,22 @@
     ]
   },
   "services": {
+    "ch.qos.logback:logback-classic": {
+      "jakarta.servlet.ServletContainerInitializer": [
+        "ch.qos.logback.classic.servlet.LogbackServletContainerInitializer"
+      ],
+      "org.slf4j.spi.SLF4JServiceProvider": [
+        "ch.qos.logback.classic.spi.LogbackServiceProvider"
+      ]
+    },
+    "ch.qos.logback:logback-classic:jar:sources": {
+      "jakarta.servlet.ServletContainerInitializer": [
+        "ch.qos.logback.classic.servlet.LogbackServletContainerInitializer"
+      ],
+      "org.slf4j.spi.SLF4JServiceProvider": [
+        "ch.qos.logback.classic.spi.LogbackServiceProvider"
+      ]
+    },
     "com.fasterxml.jackson.core:jackson-core": {
       "com.fasterxml.jackson.core.JsonFactory": [
         "com.fasterxml.jackson.core.JsonFactory"
@@ -4068,8 +4182,5 @@
       ]
     }
   },
-  "skipped": [
-    "com.google.guava:listenablefuture:jar:sources"
-  ],
   "version": "2"
 }
diff --git a/tests/custom_maven_install/regression_testing_gradle_install.json b/tests/custom_maven_install/regression_testing_gradle_install.json
index 3b81be2..69fbe45 100644
--- a/tests/custom_maven_install/regression_testing_gradle_install.json
+++ b/tests/custom_maven_install/regression_testing_gradle_install.json
@@ -510,8 +510,7 @@
     "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10",
     "org.jetbrains.kotlin:kotlin-stdlib:1.8.0": "org.jetbrains.kotlin:kotlin-stdlib:1.8.21",
     "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1": "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4",
-    "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4",
-    "org.jetbrains.kotlinx:kotlinx-coroutines-core:pom:1.6.1": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"
+    "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"
   },
   "dependencies": {
     "androidx.activity:activity-ktx:aar": [
diff --git a/tests/integration/java_export/BUILD b/tests/integration/java_export/BUILD
index f5aa49f..c5f224b 100644
--- a/tests/integration/java_export/BUILD
+++ b/tests/integration/java_export/BUILD
@@ -1,5 +1,5 @@
 load("@aspect_bazel_lib//lib:diff_test.bzl", "diff_test")
-load("@rules_java//java:defs.bzl", "java_library", "java_binary")
+load("@rules_java//java:defs.bzl", "java_binary", "java_library")
 load("//:defs.bzl", "artifact", "java_export", "maven_export")
 load("//private/rules:maven_project_jar.bzl", "maven_project_jar")
 
@@ -236,11 +236,14 @@
 
 java_binary(
     name = "some-java-binary",
-    srcs = ["Main.java", "Dependency.java"],
+    srcs = [
+        "Dependency.java",
+        "Main.java",
+    ],
     main_class = "com.jvm.external.jvm_export.Main",
     deps = [
         artifact("com.google.guava:guava"),
-    ]
+    ],
 )
 
 maven_export(
diff --git a/tests/integration/override_targets/BUILD b/tests/integration/override_targets/BUILD
index 04db0a7..337031d 100644
--- a/tests/integration/override_targets/BUILD
+++ b/tests/integration/override_targets/BUILD
@@ -87,7 +87,7 @@
 
 genquery(
     name = "verify_visibility_query",
-    expression = '@root_module_can_override//:com_squareup_okio_okio',
+    expression = "@root_module_can_override//:com_squareup_okio_okio",
     scope = ["@root_module_can_override//:com_squareup_okio_okio"],
 )
 
diff --git a/tests/integration/override_targets/module/MODULE.bazel b/tests/integration/override_targets/module/MODULE.bazel
index cfea61c..83e3301 100644
--- a/tests/integration/override_targets/module/MODULE.bazel
+++ b/tests/integration/override_targets/module/MODULE.bazel
@@ -5,6 +5,7 @@
 
 bazel_dep(name = "rules_jvm_external", version = "0.0.0")
 bazel_dep(name = "rules_java", version = "8.13.0")
+
 local_path_override(
     module_name = "rules_jvm_external",
     path = "../../../..",
diff --git a/tests/integration/pom_file/BUILD b/tests/integration/pom_file/BUILD
index 6c3e81c..c5629c7 100644
--- a/tests/integration/pom_file/BUILD
+++ b/tests/integration/pom_file/BUILD
@@ -1,5 +1,5 @@
-load("@rules_java//java:defs.bzl", "java_library")
 load("@aspect_bazel_lib//lib:diff_test.bzl", "diff_test")
+load("@rules_java//java:defs.bzl", "java_library")
 load("//:defs.bzl", "artifact", "java_export")
 
 java_export(