diff --git a/examples/gazelle/src/test/com/example/gazelle/BUILD.bazel b/examples/gazelle/src/test/com/example/gazelle/BUILD.bazel index e40a7f31..de2a3798 100644 --- a/examples/gazelle/src/test/com/example/gazelle/BUILD.bazel +++ b/examples/gazelle/src/test/com/example/gazelle/BUILD.bazel @@ -13,3 +13,15 @@ diff_test( file1 = ":generated_targets", file2 = ":expected-query-output", ) + +java_test_suite( + name = "gazelle", + srcs = ["ExampleTest.java"], + runner = "junit5", + runtime_deps = [ + "@maven//:org_junit_jupiter_junit_jupiter_engine", + "@maven//:org_junit_platform_junit_platform_launcher", + "@maven//:org_junit_platform_junit_platform_reporting", + ], + deps = ["@maven//:org_junit_jupiter_junit_jupiter_api"], +) diff --git a/java/gazelle/BUILD.bazel b/java/gazelle/BUILD.bazel index 440d6b2a..e909f757 100644 --- a/java/gazelle/BUILD.bazel +++ b/java/gazelle/BUILD.bazel @@ -54,6 +54,7 @@ go_test( embed = [":gazelle"], deps = [ "//java/gazelle/javaconfig", + "//java/gazelle/private/maven", "//java/gazelle/private/sorted_set", "//java/gazelle/private/types", "@bazel_gazelle//config", diff --git a/java/gazelle/configure.go b/java/gazelle/configure.go index 86ee699d..eeef6b8a 100644 --- a/java/gazelle/configure.go +++ b/java/gazelle/configure.go @@ -9,7 +9,6 @@ import ( "github.com/bazel-contrib/rules_jvm/java/gazelle/javaconfig" "github.com/bazel-contrib/rules_jvm/java/gazelle/private/javaparser" - "github.com/bazel-contrib/rules_jvm/java/gazelle/private/maven" "github.com/bazel-contrib/rules_jvm/java/gazelle/private/types" "github.com/bazelbuild/bazel-gazelle/config" "github.com/bazelbuild/bazel-gazelle/rule" @@ -246,17 +245,6 @@ func (jc *Configurer) Configure(c *config.Config, rel string, f *rule.File) { } jc.lang.parser = runner } - - if jc.lang.mavenResolver == nil { - resolver, err := maven.NewResolver( - cfg.MavenInstallFile(), - jc.lang.logger, - ) - if err != nil { - jc.lang.logger.Fatal().Err(err).Msg("error creating Maven resolver") - } - jc.lang.mavenResolver = resolver - } } type annotationToAttribute map[string]map[string]bzl.Expr diff --git a/java/gazelle/lang.go b/java/gazelle/lang.go index 5567b6fe..84be2938 100644 --- a/java/gazelle/lang.go +++ b/java/gazelle/lang.go @@ -24,10 +24,10 @@ type javaLang struct { language.BaseLifecycleManager resolve.Resolver - parser *javaparser.Runner - logger zerolog.Logger - javaLogLevel string - mavenResolver maven.Resolver + parser *javaparser.Runner + logger zerolog.Logger + javaLogLevel string + mavenResolvers map[string]*maven.Resolver // javaPackageCache is used for module granularity support // Key is the path to the java package from the Bazel workspace root. @@ -70,6 +70,7 @@ func NewLanguage() language.Language { javaLogLevel: javaLevel, javaPackageCache: make(map[string]*java.Package), javaExportIndex: java_export_index.NewJavaExportIndex(languageName, logger), + mavenResolvers: make(map[string]*maven.Resolver), } l.logger = l.logger.Hook(shutdownServerOnFatalLogHook{ @@ -255,6 +256,24 @@ func (l javaLang) DoneGeneratingRules() { l.javaExportIndex.FinalizeIndex() } +func (l javaLang) MavenResolverForInstallFile(installFile string) (maven.Resolver, error) { + if resolver, exists := l.mavenResolvers[installFile]; exists { + return *resolver, nil + } + + l.logger.Debug().Msgf("Create resolver for %s", installFile) + resolver, err := maven.NewResolver( + installFile, + l.logger, + ) + if err != nil { + return nil, err + } + + l.mavenResolvers[installFile] = &resolver + return resolver, nil +} + func (l javaLang) AfterResolvingDeps(_ context.Context) { if l.hasHadErrors { l.logger.Fatal().Msg("the java extension encountered errors that will create invalid build files") diff --git a/java/gazelle/resolve.go b/java/gazelle/resolve.go index 49109832..bf5a5480 100644 --- a/java/gazelle/resolve.go +++ b/java/gazelle/resolve.go @@ -274,23 +274,27 @@ func (jr *Resolver) resolveSinglePackage(c *config.Config, pc *javaconfig.Config return l } - if l, err := jr.lang.mavenResolver.Resolve(imp, pc.ExcludedArtifacts(), pc.MavenRepositoryName()); err != nil { - var noExternal *maven.NoExternalImportsError - var multipleExternal *maven.MultipleExternalImportsError - - if errors.As(err, &noExternal) { - // do not fail, the package might be provided elsewhere - } else if errors.As(err, &multipleExternal) { - jr.lang.logger.Error().Msg("Append one of the following to BUILD.bazel:") - for _, possible := range multipleExternal.PossiblePackages { - jr.lang.logger.Error().Msgf("# gazelle:resolve java %s %s", imp.Name, possible) + if mavenResolver, err := jr.lang.MavenResolverForInstallFile(pc.MavenInstallFile()); err != nil { + jr.lang.logger.Fatal().Err(err).Msg("error creating Maven resolver") + } else { + if l, err := mavenResolver.Resolve(imp, pc.ExcludedArtifacts(), pc.MavenRepositoryName()); err != nil { + var noExternal *maven.NoExternalImportsError + var multipleExternal *maven.MultipleExternalImportsError + + if errors.As(err, &noExternal) { + // do not fail, the package might be provided elsewhere + } else if errors.As(err, &multipleExternal) { + jr.lang.logger.Error().Msg("Append one of the following to BUILD.bazel:") + for _, possible := range multipleExternal.PossiblePackages { + jr.lang.logger.Error().Msgf("# gazelle:resolve java %s %s", imp.Name, possible) + } + jr.lang.hasHadErrors = true + } else { + jr.lang.logger.Fatal().Err(err).Msg("maven resolver error") } - jr.lang.hasHadErrors = true } else { - jr.lang.logger.Fatal().Err(err).Msg("maven resolver error") + return l } - } else { - return l } if isTestRule { diff --git a/java/gazelle/resolve_test.go b/java/gazelle/resolve_test.go index a8506491..b6a9ac20 100644 --- a/java/gazelle/resolve_test.go +++ b/java/gazelle/resolve_test.go @@ -7,6 +7,7 @@ import ( "strings" "testing" + "github.com/bazel-contrib/rules_jvm/java/gazelle/private/maven" "github.com/bazel-contrib/rules_jvm/java/gazelle/private/sorted_set" "github.com/bazel-contrib/rules_jvm/java/gazelle/private/types" "github.com/bazelbuild/bazel-gazelle/config" @@ -353,7 +354,9 @@ func testConfig(t *testing.T, args ...string) (*config.Config, []language.Langua } l := NewLanguage() - l.(*javaLang).mavenResolver = &testResolver{} + // Create a wrapper that implements maven.Resolver interface + var resolver maven.Resolver = NewTestMavenResolver() + l.(*javaLang).mavenResolvers["maven_install.json"] = &resolver langs := []language.Language{ proto.NewLanguage(), @@ -393,7 +396,9 @@ func InitTestResolversAndExtensions(langs []language.Language) (mapResolver, []i for _, lang := range langs { // TODO There has to be a better way to make this generic. if jLang, ok := lang.(*javaLang); ok { - jLang.mavenResolver = NewTestMavenResolver() + // Create a wrapper that implements maven.Resolver interface + var resolver maven.Resolver = NewTestMavenResolver() + jLang.mavenResolvers["maven_install.json"] = &resolver jLang.javaExportIndex.FinalizeIndex() } diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/BUILD.in b/java/gazelle/testdata/maven_with_invalid_resolver/BUILD.in new file mode 100644 index 00000000..6bd050ce --- /dev/null +++ b/java/gazelle/testdata/maven_with_invalid_resolver/BUILD.in @@ -0,0 +1 @@ +# gazelle:java_maven_repository_name vendor_java diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/BUILD.out b/java/gazelle/testdata/maven_with_invalid_resolver/BUILD.out new file mode 100644 index 00000000..6bd050ce --- /dev/null +++ b/java/gazelle/testdata/maven_with_invalid_resolver/BUILD.out @@ -0,0 +1 @@ +# gazelle:java_maven_repository_name vendor_java diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/README.md b/java/gazelle/testdata/maven_with_invalid_resolver/README.md new file mode 100644 index 00000000..6b87a071 --- /dev/null +++ b/java/gazelle/testdata/maven_with_invalid_resolver/README.md @@ -0,0 +1,3 @@ +# Invalid Maven JSON file + +The extension exits with 1 when it is unable to parse the maven_install.json file. diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/WORKSPACE b/java/gazelle/testdata/maven_with_invalid_resolver/WORKSPACE new file mode 100644 index 00000000..f3f4fa7d --- /dev/null +++ b/java/gazelle/testdata/maven_with_invalid_resolver/WORKSPACE @@ -0,0 +1,28 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "rules_jvm_external", + sha256 = "23fe83890a77ac1a3ee143e2306ec12da4a845285b14ea13cb0df1b1e23658fe", + strip_prefix = "rules_jvm_external-4.3", + urls = ["https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/4.3.tar.gz"], +) + +load("@rules_jvm_external//:defs.bzl", "maven_install") + +maven_install( + name = "vendor_java", + artifacts = [ + "junit:junit:4.13.1", + "com.google.guava:guava:30.0-jre", + ], + fetch_sources = True, + maven_install_json = "//:maven_install.json", + repositories = [ + "http://uk.maven.org/maven2", + "https://jcenter.bintray.com/", + ], +) + +load("@maven//:defs.bzl", "pinned_maven_install") + +pinned_maven_install() diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/expectedExitCode.txt b/java/gazelle/testdata/maven_with_invalid_resolver/expectedExitCode.txt new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/java/gazelle/testdata/maven_with_invalid_resolver/expectedExitCode.txt @@ -0,0 +1 @@ +1 diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/expectedStderr.txt b/java/gazelle/testdata/maven_with_invalid_resolver/expectedStderr.txt new file mode 100644 index 00000000..a51d60cb --- /dev/null +++ b/java/gazelle/testdata/maven_with_invalid_resolver/expectedStderr.txt @@ -0,0 +1 @@ +{"level":"fatal","error":"failed to parse coordinate : invalid Maven coordinate \"invalid_dependency\" - needed at least 2 :s","message":"error creating Maven resolver"} diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/maven_install.json b/java/gazelle/testdata/maven_with_invalid_resolver/maven_install.json new file mode 100644 index 00000000..e3eb91d3 --- /dev/null +++ b/java/gazelle/testdata/maven_with_invalid_resolver/maven_install.json @@ -0,0 +1,10 @@ +{ + "dependency_tree": { + "dependencies": [ + { + "coord": "invalid_dependency" + } + ], + "version": "0.1.0" + } +} diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/src/main/java/com/example/myproject/App.java b/java/gazelle/testdata/maven_with_invalid_resolver/src/main/java/com/example/myproject/App.java new file mode 100644 index 00000000..5c55b737 --- /dev/null +++ b/java/gazelle/testdata/maven_with_invalid_resolver/src/main/java/com/example/myproject/App.java @@ -0,0 +1,16 @@ +package com.example.myproject; + +import com.google.common.primitives.Ints; + +/** This application compares two numbers, using the Ints.compare method from Guava. */ +public class App { + + public static int compare(int a, int b) { + return Ints.compare(a, b); + } + + public static void main(String... args) throws Exception { + App app = new App(); + System.out.println("Success: " + app.compare(2, 1)); + } +} diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/src/main/java/com/example/myproject/BUILD.in b/java/gazelle/testdata/maven_with_invalid_resolver/src/main/java/com/example/myproject/BUILD.in new file mode 100644 index 00000000..e69de29b diff --git a/java/gazelle/testdata/maven_with_invalid_resolver/src/main/java/com/example/myproject/BUILD.out b/java/gazelle/testdata/maven_with_invalid_resolver/src/main/java/com/example/myproject/BUILD.out new file mode 100644 index 00000000..e69de29b diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/BUILD.in b/java/gazelle/testdata/maven_with_multiple_repositories/BUILD.in new file mode 100644 index 00000000..6bd050ce --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/BUILD.in @@ -0,0 +1 @@ +# gazelle:java_maven_repository_name vendor_java diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/BUILD.out b/java/gazelle/testdata/maven_with_multiple_repositories/BUILD.out new file mode 100644 index 00000000..6bd050ce --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/BUILD.out @@ -0,0 +1 @@ +# gazelle:java_maven_repository_name vendor_java diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/README.md b/java/gazelle/testdata/maven_with_multiple_repositories/README.md new file mode 100644 index 00000000..5eb5abdc --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/README.md @@ -0,0 +1,2 @@ +Copied from +[bazelbuild/examples/java-maven](https://github.com/bazelbuild/examples/tree/b29794fb55f6714442dd86946c77f8908321a430/java-maven). diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/WORKSPACE b/java/gazelle/testdata/maven_with_multiple_repositories/WORKSPACE new file mode 100644 index 00000000..c8b8e039 --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/WORKSPACE @@ -0,0 +1,41 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "rules_jvm_external", + sha256 = "23fe83890a77ac1a3ee143e2306ec12da4a845285b14ea13cb0df1b1e23658fe", + strip_prefix = "rules_jvm_external-4.3", + urls = ["https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/4.3.tar.gz"], +) + +load("@rules_jvm_external//:defs.bzl", "maven_install") + +maven_install( + name = "vendor_java", + artifacts = [ + "com.google.guava:guava:30.0-jre", + ], + fetch_sources = True, + maven_install_json = "//:maven_install.json", + repositories = [ + "http://uk.maven.org/maven2", + "https://jcenter.bintray.com/", + ], +) + +maven_install( + name = "junit_java", + artifacts = [ + "junit:junit:4.13.1", + "com.google.guava:guava:30.0-jre", + ], + fetch_sources = True, + maven_install_json = "//:maven_install.junit.json", + repositories = [ + "http://uk.maven.org/maven2", + "https://jcenter.bintray.com/", + ], +) + +load("@maven//:defs.bzl", "pinned_maven_install") + +pinned_maven_install() diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/maven_install.json b/java/gazelle/testdata/maven_with_multiple_repositories/maven_install.json new file mode 100644 index 00000000..997c9e3c --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/maven_install.json @@ -0,0 +1,308 @@ +{ + "dependency_tree": { + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", + "__INPUT_ARTIFACTS_HASH": -98192304, + "__RESOLVED_ARTIFACTS_HASH": 1256918319, + "conflict_resolution": {}, + "dependencies": [ + { + "coord": "com.google.code.findbugs:jsr305:3.0.2", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar", + "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" + ], + "packages": [ + "javax.annotation", + "javax.annotation.concurrent", + "javax.annotation.meta" + ], + "sha256": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7", + "url": "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" + }, + { + "coord": "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar", + "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar" + ], + "packages": [], + "sha256": "1c9e85e272d0708c6a591dc74828c71603053b48cc75ae83cce56912a2aa063b", + "url": "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar" + }, + { + "coord": "com.google.errorprone:error_prone_annotations:2.3.4", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar", + "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar" + ], + "packages": [ + "com.google.errorprone.annotations", + "com.google.errorprone.annotations.concurrent" + ], + "sha256": "baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c", + "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar" + }, + { + "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar", + "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar" + ], + "packages": [], + "sha256": "0b1011d1e2ea2eab35a545cffd1cff3877f131134c8020885e8eaf60a7d72f91", + "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar" + }, + { + "coord": "com.google.guava:failureaccess:1.0.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar", + "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" + ], + "packages": [ + "com.google.common.util.concurrent.internal" + ], + "sha256": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26", + "url": "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" + }, + { + "coord": "com.google.guava:failureaccess:jar:sources:1.0.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar", + "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar" + ], + "packages": [], + "sha256": "092346eebbb1657b51aa7485a246bf602bb464cc0b0e2e1c7e7201fadce1e98f", + "url": "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar" + }, + { + "coord": "com.google.guava:guava:30.0-jre", + "dependencies": [ + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.errorprone:error_prone_annotations:2.3.4", + "com.google.guava:failureaccess:1.0.1", + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "org.checkerframework:checker-qual:3.5.0" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.errorprone:error_prone_annotations:2.3.4", + "com.google.guava:failureaccess:1.0.1", + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "org.checkerframework:checker-qual:3.5.0" + ], + "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar", + "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar" + ], + "packages": [ + "com.google.common.annotations", + "com.google.common.base", + "com.google.common.base.internal", + "com.google.common.cache", + "com.google.common.collect", + "com.google.common.escape", + "com.google.common.eventbus", + "com.google.common.graph", + "com.google.common.hash", + "com.google.common.html", + "com.google.common.io", + "com.google.common.math", + "com.google.common.net", + "com.google.common.primitives", + "com.google.common.reflect", + "com.google.common.util.concurrent", + "com.google.common.xml", + "com.google.thirdparty.publicsuffix" + ], + "sha256": "56b292df9ec29d102820c1fd7dd581cd749d5c416c7b3aeac008dbda3b984cc2", + "url": "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar" + }, + { + "coord": "com.google.guava:guava:jar:sources:30.0-jre", + "dependencies": [ + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "org.checkerframework:checker-qual:jar:sources:3.5.0" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "org.checkerframework:checker-qual:jar:sources:3.5.0" + ], + "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar", + "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar" + ], + "packages": [], + "sha256": "daa8a245663f9027ae4b84239147d3439221839155a4d93cbab280c3e657a73d", + "url": "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar" + }, + { + "coord": "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar", + "https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + ], + "packages": [], + "sha256": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99", + "url": "https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + }, + { + "coord": "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "dependencies": [], + "directDependencies": [], + "file": null + }, + { + "coord": "com.google.j2objc:j2objc-annotations:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar", + "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" + ], + "packages": [ + "com.google.j2objc.annotations" + ], + "sha256": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b", + "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" + }, + { + "coord": "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar", + "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar" + ], + "packages": [], + "sha256": "ba4df669fec153fa4cd0ef8d02c6d3ef0702b7ac4cabe080facf3b6e490bb972", + "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar" + }, + { + "coord": "org.checkerframework:checker-qual:3.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar", + "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar" + ], + "packages": [ + "org.checkerframework.checker.compilermsgs.qual", + "org.checkerframework.checker.fenum.qual", + "org.checkerframework.checker.formatter", + "org.checkerframework.checker.formatter.qual", + "org.checkerframework.checker.guieffect.qual", + "org.checkerframework.checker.i18n.qual", + "org.checkerframework.checker.i18nformatter", + "org.checkerframework.checker.i18nformatter.qual", + "org.checkerframework.checker.index.qual", + "org.checkerframework.checker.initialization.qual", + "org.checkerframework.checker.interning.qual", + "org.checkerframework.checker.lock.qual", + "org.checkerframework.checker.nullness", + "org.checkerframework.checker.nullness.qual", + "org.checkerframework.checker.optional.qual", + "org.checkerframework.checker.propkey.qual", + "org.checkerframework.checker.regex", + "org.checkerframework.checker.regex.qual", + "org.checkerframework.checker.signature.qual", + "org.checkerframework.checker.signedness", + "org.checkerframework.checker.signedness.qual", + "org.checkerframework.checker.tainting.qual", + "org.checkerframework.checker.units", + "org.checkerframework.checker.units.qual", + "org.checkerframework.common.aliasing.qual", + "org.checkerframework.common.reflection.qual", + "org.checkerframework.common.returnsreceiver.qual", + "org.checkerframework.common.subtyping.qual", + "org.checkerframework.common.util.report.qual", + "org.checkerframework.common.value.qual", + "org.checkerframework.dataflow.qual", + "org.checkerframework.framework.qual", + "org.checkerframework.framework.util" + ], + "sha256": "729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4", + "url": "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar" + }, + { + "coord": "org.checkerframework:checker-qual:jar:sources:3.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar", + "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar" + ], + "packages": [], + "sha256": "0724b40995c1b05516caa2dd9a3b2f5378f948cf20f3404f4db316af25239368", + "url": "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar" + }, + { + "coord": "org.hamcrest:hamcrest-core:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar", + "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" + ], + "packages": [ + "org.hamcrest", + "org.hamcrest.core", + "org.hamcrest.internal" + ], + "sha256": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9", + "url": "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" + }, + { + "coord": "org.hamcrest:hamcrest-core:jar:sources:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar", + "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar" + ], + "packages": [], + "sha256": "e223d2d8fbafd66057a8848cc94222d63c3cedd652cc48eddc0ab5c39c0f84df", + "url": "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar" + } + ], + "version": "0.1.0" + } +} diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/maven_install.junit.json b/java/gazelle/testdata/maven_with_multiple_repositories/maven_install.junit.json new file mode 100644 index 00000000..c1cab460 --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/maven_install.junit.json @@ -0,0 +1,375 @@ +{ + "dependency_tree": { + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", + "__INPUT_ARTIFACTS_HASH": -98192304, + "__RESOLVED_ARTIFACTS_HASH": 1256918319, + "conflict_resolution": {}, + "dependencies": [ + { + "coord": "com.google.code.findbugs:jsr305:3.0.2", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar", + "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" + ], + "packages": [ + "javax.annotation", + "javax.annotation.concurrent", + "javax.annotation.meta" + ], + "sha256": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7", + "url": "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" + }, + { + "coord": "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar", + "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar" + ], + "packages": [], + "sha256": "1c9e85e272d0708c6a591dc74828c71603053b48cc75ae83cce56912a2aa063b", + "url": "https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar" + }, + { + "coord": "com.google.errorprone:error_prone_annotations:2.3.4", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar", + "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar" + ], + "packages": [ + "com.google.errorprone.annotations", + "com.google.errorprone.annotations.concurrent" + ], + "sha256": "baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c", + "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar" + }, + { + "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar", + "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar" + ], + "packages": [], + "sha256": "0b1011d1e2ea2eab35a545cffd1cff3877f131134c8020885e8eaf60a7d72f91", + "url": "https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4-sources.jar" + }, + { + "coord": "com.google.guava:failureaccess:1.0.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar", + "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" + ], + "packages": [ + "com.google.common.util.concurrent.internal" + ], + "sha256": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26", + "url": "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" + }, + { + "coord": "com.google.guava:failureaccess:jar:sources:1.0.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar", + "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar" + ], + "packages": [], + "sha256": "092346eebbb1657b51aa7485a246bf602bb464cc0b0e2e1c7e7201fadce1e98f", + "url": "https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar" + }, + { + "coord": "com.google.guava:guava:30.0-jre", + "dependencies": [ + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.errorprone:error_prone_annotations:2.3.4", + "com.google.guava:failureaccess:1.0.1", + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "org.checkerframework:checker-qual:3.5.0" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.errorprone:error_prone_annotations:2.3.4", + "com.google.guava:failureaccess:1.0.1", + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "org.checkerframework:checker-qual:3.5.0" + ], + "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar", + "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar" + ], + "packages": [ + "com.google.common.annotations", + "com.google.common.base", + "com.google.common.base.internal", + "com.google.common.cache", + "com.google.common.collect", + "com.google.common.escape", + "com.google.common.eventbus", + "com.google.common.graph", + "com.google.common.hash", + "com.google.common.html", + "com.google.common.io", + "com.google.common.math", + "com.google.common.net", + "com.google.common.primitives", + "com.google.common.reflect", + "com.google.common.util.concurrent", + "com.google.common.xml", + "com.google.thirdparty.publicsuffix" + ], + "sha256": "56b292df9ec29d102820c1fd7dd581cd749d5c416c7b3aeac008dbda3b984cc2", + "url": "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre.jar" + }, + { + "coord": "com.google.guava:guava:jar:sources:30.0-jre", + "dependencies": [ + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "org.checkerframework:checker-qual:jar:sources:3.5.0" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.errorprone:error_prone_annotations:jar:sources:2.3.4", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "org.checkerframework:checker-qual:jar:sources:3.5.0" + ], + "file": "v1/https/jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar", + "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar" + ], + "packages": [], + "sha256": "daa8a245663f9027ae4b84239147d3439221839155a4d93cbab280c3e657a73d", + "url": "https://jcenter.bintray.com/com/google/guava/guava/30.0-jre/guava-30.0-jre-sources.jar" + }, + { + "coord": "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar", + "https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + ], + "packages": [], + "sha256": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99", + "url": "https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + }, + { + "coord": "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "dependencies": [], + "directDependencies": [], + "file": null + }, + { + "coord": "com.google.j2objc:j2objc-annotations:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar", + "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" + ], + "packages": [ + "com.google.j2objc.annotations" + ], + "sha256": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b", + "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" + }, + { + "coord": "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar", + "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar" + ], + "packages": [], + "sha256": "ba4df669fec153fa4cd0ef8d02c6d3ef0702b7ac4cabe080facf3b6e490bb972", + "url": "https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar" + }, + { + "coord": "junit:junit:4.13.1", + "dependencies": [ + "org.hamcrest:hamcrest-core:1.3" + ], + "directDependencies": [ + "org.hamcrest:hamcrest-core:1.3" + ], + "file": "v1/https/jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/junit/junit/4.13.1/junit-4.13.1.jar", + "https://jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1.jar" + ], + "packages": [ + "junit.extensions", + "junit.framework", + "junit.runner", + "junit.textui", + "org.junit", + "org.junit.experimental", + "org.junit.experimental.categories", + "org.junit.experimental.max", + "org.junit.experimental.results", + "org.junit.experimental.runners", + "org.junit.experimental.theories", + "org.junit.experimental.theories.internal", + "org.junit.experimental.theories.suppliers", + "org.junit.function", + "org.junit.internal", + "org.junit.internal.builders", + "org.junit.internal.management", + "org.junit.internal.matchers", + "org.junit.internal.requests", + "org.junit.internal.runners", + "org.junit.internal.runners.model", + "org.junit.internal.runners.rules", + "org.junit.internal.runners.statements", + "org.junit.matchers", + "org.junit.rules", + "org.junit.runner", + "org.junit.runner.manipulation", + "org.junit.runner.notification", + "org.junit.runners", + "org.junit.runners.model", + "org.junit.runners.parameterized", + "org.junit.validator" + ], + "sha256": "c30719db974d6452793fe191b3638a5777005485bae145924044530ffa5f6122", + "url": "https://jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1.jar" + }, + { + "coord": "junit:junit:jar:sources:4.13.1", + "dependencies": [ + "org.hamcrest:hamcrest-core:jar:sources:1.3" + ], + "directDependencies": [ + "org.hamcrest:hamcrest-core:jar:sources:1.3" + ], + "file": "v1/https/jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/junit/junit/4.13.1/junit-4.13.1-sources.jar", + "https://jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1-sources.jar" + ], + "packages": [], + "sha256": "624c08005c95c47287c9d921479cff0b71dd50a101b0810cd5e207242eb8fe0e", + "url": "https://jcenter.bintray.com/junit/junit/4.13.1/junit-4.13.1-sources.jar" + }, + { + "coord": "org.checkerframework:checker-qual:3.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar", + "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar" + ], + "packages": [ + "org.checkerframework.checker.compilermsgs.qual", + "org.checkerframework.checker.fenum.qual", + "org.checkerframework.checker.formatter", + "org.checkerframework.checker.formatter.qual", + "org.checkerframework.checker.guieffect.qual", + "org.checkerframework.checker.i18n.qual", + "org.checkerframework.checker.i18nformatter", + "org.checkerframework.checker.i18nformatter.qual", + "org.checkerframework.checker.index.qual", + "org.checkerframework.checker.initialization.qual", + "org.checkerframework.checker.interning.qual", + "org.checkerframework.checker.lock.qual", + "org.checkerframework.checker.nullness", + "org.checkerframework.checker.nullness.qual", + "org.checkerframework.checker.optional.qual", + "org.checkerframework.checker.propkey.qual", + "org.checkerframework.checker.regex", + "org.checkerframework.checker.regex.qual", + "org.checkerframework.checker.signature.qual", + "org.checkerframework.checker.signedness", + "org.checkerframework.checker.signedness.qual", + "org.checkerframework.checker.tainting.qual", + "org.checkerframework.checker.units", + "org.checkerframework.checker.units.qual", + "org.checkerframework.common.aliasing.qual", + "org.checkerframework.common.reflection.qual", + "org.checkerframework.common.returnsreceiver.qual", + "org.checkerframework.common.subtyping.qual", + "org.checkerframework.common.util.report.qual", + "org.checkerframework.common.value.qual", + "org.checkerframework.dataflow.qual", + "org.checkerframework.framework.qual", + "org.checkerframework.framework.util" + ], + "sha256": "729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4", + "url": "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar" + }, + { + "coord": "org.checkerframework:checker-qual:jar:sources:3.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar", + "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar" + ], + "packages": [], + "sha256": "0724b40995c1b05516caa2dd9a3b2f5378f948cf20f3404f4db316af25239368", + "url": "https://jcenter.bintray.com/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0-sources.jar" + }, + { + "coord": "org.hamcrest:hamcrest-core:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar", + "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" + ], + "packages": [ + "org.hamcrest", + "org.hamcrest.core", + "org.hamcrest.internal" + ], + "sha256": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9", + "url": "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" + }, + { + "coord": "org.hamcrest:hamcrest-core:jar:sources:1.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar", + "mirror_urls": [ + "http://uk.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar", + "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar" + ], + "packages": [], + "sha256": "e223d2d8fbafd66057a8848cc94222d63c3cedd652cc48eddc0ab5c39c0f84df", + "url": "https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar" + } + ], + "version": "0.1.0" + } +} diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/compare/BUILD.in b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/compare/BUILD.in new file mode 100644 index 00000000..e69de29b diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/compare/BUILD.out b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/compare/BUILD.out new file mode 100644 index 00000000..1616114b --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/compare/BUILD.out @@ -0,0 +1,15 @@ +load("@rules_java//java:defs.bzl", "java_binary", "java_library") + +java_library( + name = "compare", + srcs = ["Compare.java"], + visibility = ["//:__subpackages__"], + deps = ["@vendor_java//:com_google_guava_guava"], +) + +java_binary( + name = "Compare", + main_class = "com.example.compare.Compare", + visibility = ["//visibility:public"], + runtime_deps = [":compare"], +) diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/compare/Compare.java b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/compare/Compare.java new file mode 100644 index 00000000..b2ea4b8b --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/compare/Compare.java @@ -0,0 +1,16 @@ +package com.example.compare; + +import com.google.common.primitives.*; + +/** This application compares two numbers, using the Ints.compare method from Guava. */ +public class Compare { + + public static int compare(int a, int b) { + return Ints.compare(a, b); + } + + public static void main(String... args) throws Exception { + Compare app = new Compare(); + System.out.println("Success: " + app.compare(2, 1)); + } +} diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/myproject/App.java b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/myproject/App.java new file mode 100644 index 00000000..5c55b737 --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/myproject/App.java @@ -0,0 +1,16 @@ +package com.example.myproject; + +import com.google.common.primitives.Ints; + +/** This application compares two numbers, using the Ints.compare method from Guava. */ +public class App { + + public static int compare(int a, int b) { + return Ints.compare(a, b); + } + + public static void main(String... args) throws Exception { + App app = new App(); + System.out.println("Success: " + app.compare(2, 1)); + } +} diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/myproject/BUILD.in b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/myproject/BUILD.in new file mode 100644 index 00000000..e69de29b diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/myproject/BUILD.out b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/myproject/BUILD.out new file mode 100644 index 00000000..486fb2f2 --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/src/main/java/com/example/myproject/BUILD.out @@ -0,0 +1,15 @@ +load("@rules_java//java:defs.bzl", "java_binary", "java_library") + +java_library( + name = "myproject", + srcs = ["App.java"], + visibility = ["//:__subpackages__"], + deps = ["@vendor_java//:com_google_guava_guava"], +) + +java_binary( + name = "App", + main_class = "com.example.myproject.App", + visibility = ["//visibility:public"], + runtime_deps = [":myproject"], +) diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/AppTest.java b/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/AppTest.java new file mode 100644 index 00000000..07aa1d27 --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/AppTest.java @@ -0,0 +1,15 @@ +package com.example.myproject; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +/** Tests for correct dependency retrieval with maven rules. */ +public class AppTest { + + @Test + public void testCompare() throws Exception { + App app = new App(); + assertEquals("should return 0 when both numbers are equal", 0, app.compare(1, 1)); + } +} diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/BUILD.in b/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/BUILD.in new file mode 100644 index 00000000..fecaedce --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/BUILD.in @@ -0,0 +1,2 @@ +# gazelle:java_maven_repository_name junit_java +# gazelle:java_maven_install_file maven_install.junit.json diff --git a/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/BUILD.out b/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/BUILD.out new file mode 100644 index 00000000..d6d84360 --- /dev/null +++ b/java/gazelle/testdata/maven_with_multiple_repositories/src/test/java/com/example/myproject/BUILD.out @@ -0,0 +1,13 @@ +load("@contrib_rules_jvm//java:defs.bzl", "java_test_suite") + +# gazelle:java_maven_repository_name junit_java +# gazelle:java_maven_install_file maven_install.junit.json + +java_test_suite( + name = "myproject", + srcs = ["AppTest.java"], + deps = [ + "//src/main/java/com/example/myproject", + "@junit_java//:junit_junit", + ], +)