-
Notifications
You must be signed in to change notification settings - Fork 15.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Using maven
as the repo name causes duplicate warnings when using bzlmod
#16839
Comments
Can this please be fixed in both the v3 and v4 protobuf libraries in Bazel Central? I cannot find a way to rename the |
@bnordli, assuming you're using
|
Resolves these warnings: ```txt DEBUG: .../external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in 'com_engflow_bazel_invocation_analyzer' and now in 'protobuf' DEBUG: .../external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in 'com_engflow_bazel_invocation_analyzer' and now in 'protobuf' DEBUG: .../external/rules_jvm_external~/coursier.bzl:593:18: Found duplicate artifact versions com.google.code.gson:gson has multiple versions 2.11.0, 2.8.9 com.google.guava:guava has multiple versions 33.2.1-jre, 31.1-jre com.google.truth:truth has multiple versions 1.4.3, 1.1.2 org.mockito:mockito-core has multiple versions 5.12.0, 4.3.1 Please remove duplicate artifacts from the artifact list so you do not get unexpected artifact versions ``` See also: - Duplicate maven repositories when importing bazel_deps that use maven.install bazel-contrib/rules_jvm_external#916 - Using maven as the repo name causes duplicate warnings when using bzlmod protocolbuffers/protobuf#16839 - MODULE.bazel doesn't define @maven repository protocolbuffers/protobuf#17176 - Stop including extra artifacts on maven.install() bazel-contrib/rules_jvm_external#1168 - Use a custom name for the maven repository (maven_protobuf) protocolbuffers/protobuf#17190
Resolves these warnings: ```txt DEBUG: .../external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in 'com_engflow_bazel_invocation_analyzer' and now in 'protobuf' DEBUG: .../external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in 'com_engflow_bazel_invocation_analyzer' and now in 'protobuf' DEBUG: .../external/rules_jvm_external~/coursier.bzl:593:18: Found duplicate artifact versions com.google.code.gson:gson has multiple versions 2.11.0, 2.8.9 com.google.guava:guava has multiple versions 33.2.1-jre, 31.1-jre com.google.truth:truth has multiple versions 1.4.3, 1.1.2 org.mockito:mockito-core has multiple versions 5.12.0, 4.3.1 Please remove duplicate artifacts from the artifact list so you do not get unexpected artifact versions ``` See also: - Duplicate maven repositories when importing bazel_deps that use maven.install bazel-contrib/rules_jvm_external#916 - Using maven as the repo name causes duplicate warnings when using bzlmod protocolbuffers/protobuf#16839 - MODULE.bazel doesn't define @maven repository protocolbuffers/protobuf#17176 - Stop including extra artifacts on maven.install() bazel-contrib/rules_jvm_external#1168 - Use a custom name for the maven repository (maven_protobuf) protocolbuffers/protobuf#17190 Signed-off-by: Mike Bland <mbland@engflow.com>
Updates as much as possible except rules_jvm_external. The latest rules_jvm_external v6.1 breaks this project, both under the previous Bazel version (7.0.2) and the new one (7.2.1). I've filed bazel-contrib/rules_jvm_external#1189, which uses this repo and this PR as an example. See the last section below for details. --- Bazel update: - Bazel v7.2.1 https://github.com/bazelbuild/bazel/releases/tag/7.2.1 Bazel module updates: - bazel-skylib v1.7.1 https://github.com/bazelbuild/bazel-skylib/releases/tag/1.7.1 - platforms v0.0.10 https://github.com/bazelbuild/platforms/releases/tag/0.0.10 - rules_proto v6.0.2 https://github.com/bazelbuild/rules_proto/releases/tag/6.0.2 JAR updates: - com.google.code.gson:gson:2.11.0 - com.google.guava:guava:33.2.1-jre - commons-cli:commons-cli:1.8.0 Test JAR updates: - com.google.googlejavaformat:google-java-format:1.22.0 - com.google.truth:truth:1.4.3 - com.google.truth.extensions:truth-java8-extension:1.4.3 - org.mockito:mockito-core:5.12.0 --- Added explicit module spec and repinned the maven deps for: - protobuf v27.2 https://github.com/protocolbuffers/protobuf/releases/tag/v27.2 Adding protobuf explicitly resolves these warnings: ```txt DEBUG: .../external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in 'com_engflow_bazel_invocation_analyzer' and now in 'protobuf' DEBUG: .../external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in 'com_engflow_bazel_invocation_analyzer' and now in 'protobuf' DEBUG: .../external/rules_jvm_external~/coursier.bzl:593:18: Found duplicate artifact versions com.google.code.gson:gson has multiple versions 2.11.0, 2.8.9 com.google.guava:guava has multiple versions 33.2.1-jre, 31.1-jre com.google.truth:truth has multiple versions 1.4.3, 1.1.2 org.mockito:mockito-core has multiple versions 5.12.0, 4.3.1 Please remove duplicate artifacts from the artifact list so you do not get unexpected artifact versions ``` See also: - Duplicate maven repositories when importing bazel_deps that use maven.install bazel-contrib/rules_jvm_external#916 - Using maven as the repo name causes duplicate warnings when using bzlmod protocolbuffers/protobuf#16839 - MODULE.bazel doesn't define @maven repository protocolbuffers/protobuf#17176 - Stop including extra artifacts on maven.install() bazel-contrib/rules_jvm_external#1168 - Use a custom name for the maven repository (maven_protobuf) protocolbuffers/protobuf#17190 --- rules_jvm_external v6.1 somehow creates duplicate `jvm_import` rules for binary and source jars, instead of using the `srcjar` attribute: ```txt ERROR: Traceback (most recent call last): File ".../external/rules_jvm_external~~maven~maven/BUILD", line 34, column 11, in <toplevel> jvm_import( Error in jvm_import: jvm_import rule 'com_google_auto_value_auto_value_annotations' in package '' conflicts with existing jvm_import rule, defined at .../external/rules_jvm_external~~maven~maven/BUILD:9:11 ``` The content of rules_jvm_external~~maven~maven/BUILD at lines 9 and 34: ```bzl jvm_import( name = "com_google_auto_value_auto_value_annotations", jars = ["com/google/auto/value/auto-value-annotations/1.10.1/auto-value-annotations-1.10.1.jar"], ``` ```bzl jvm_import( name = "com_google_auto_value_auto_value_annotations", jars = ["com/google/auto/value/auto-value-annotations/1.10.1/auto-value-annotations-1.10.1-sources.jar"], ``` This pattern repeats for all the JAR targets. The BUILD contents from v5.3, which builds successfully both before and after applying the PR changes: ```bzl jvm_import( name = "com_google_auto_value_auto_value_annotations", jars = ["com/google/auto/value/auto-value-annotations/1.10.1/auto-value-annotations-1.10.1.jar"], srcjar = "com/google/auto/value/auto-value-annotations/1.10.1/auto-value-annotations-1.10.1-sources.jar", ``` --------- Signed-off-by: Mike Bland <mbland@engflow.com>
It seems latest version of protobuf in bcr are not using
|
Can you open a separate issue with details? |
@jschaf / @bnordli - did the suggestion from @shs96c work for you? |
The
|
If you send a PR I can get it routed to the right reviewers. |
The default name for the rules_jvm_external.maven rule is "maven". When not set, it defaults to "maven". For root modules also using rules_jvm_external, the name clash causes a warning: ``` DEBUG: $TMP/external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in '<my_workspace>' and now in 'protobuf' ``` Summarizing @shs96c in [1]: > The common maven repo name allows rulesets to contribute to the user's JARs. > However, this implies that maven is for the end user, not for transitive > dependencies. If a ruleset needs private dependencies, it should use a custom > namespace rather than the maven namespace. Since protobuf is not contributing to user's JARs, we'll use a custom namespace. There's precedent for using a custom namespace for library modules: - rules_jvm_external uses `rules_jvm_external_deps` instead of `maven`. - rules_kotlin uses `kotlin_rules_maven` instead of `maven`. [1]: bazel-contrib/rules_jvm_external#916 (comment) Fixes protocolbuffers#16839.
The default name for the rules_jvm_external.maven rule is "maven". When not set, it defaults to "maven". For root modules also using rules_jvm_external, the name clash causes a warning: ``` DEBUG: $TMP/external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in '<my_workspace>' and now in 'protobuf' ``` Summarizing @shs96c in [1]: > The common maven repo name allows rulesets to contribute to the user's JARs. > However, this implies that maven is for the end user, not for transitive > dependencies. If a ruleset needs private dependencies, it should use a custom > namespace rather than the maven namespace. Since protobuf is not contributing to user's JARs, we'll use a custom namespace. There's precedent for using a custom namespace for library modules: - rules_jvm_external uses `rules_jvm_external_deps` instead of `maven`. - rules_kotlin uses `kotlin_rules_maven` instead of `maven`. [1]: bazel-contrib/rules_jvm_external#916 (comment) Fixes #16839. Closes #18641 COPYBARA_INTEGRATE_REVIEW=#18641 from jschaf:joe/protobuf-maven bd2c62f PiperOrigin-RevId: 684625084
The default name for the rules_jvm_external.maven rule is "maven". When not set, it defaults to "maven". For root modules also using rules_jvm_external, the name clash causes a warning: ``` DEBUG: $TMP/external/rules_jvm_external~/private/extensions/maven.bzl:154:14: The maven repository 'maven' is used in two different bazel modules, originally in '<my_workspace>' and now in 'protobuf' ``` Summarizing @shs96c in [1]: > The common maven repo name allows rulesets to contribute to the user's JARs. > However, this implies that maven is for the end user, not for transitive > dependencies. If a ruleset needs private dependencies, it should use a custom > namespace rather than the maven namespace. Since protobuf is not contributing to user's JARs, we'll use a custom namespace. There's precedent for using a custom namespace for library modules: - rules_jvm_external uses `rules_jvm_external_deps` instead of `maven`. - rules_kotlin uses `kotlin_rules_maven` instead of `maven`. [1]: bazel-contrib/rules_jvm_external#916 (comment) Fixes #16839. Closes #18641 COPYBARA_INTEGRATE_REVIEW=#18641 from jschaf:joe/protobuf-maven bd2c62f PiperOrigin-RevId: 684625084 Co-authored-by: Joe Schafer <joe.schafer@delta46.us>
Downstream bug in rules_jvm_external: bazel-contrib/rules_jvm_external#916
What version of protobuf and what language are you using?
v23.1
What did you expect to see
A clean build when using bzlmod.
What did you see instead?
Summarizing @shs96c in bazel-contrib/rules_jvm_external#916 (comment)
The common
maven
repo name allows rulesets to contribute to the user's JARs. However, this implies thatmaven
is for the end user, not for transitive dependencies. If a ruleset needs private dependencies, it should use a custom namespace rather than themaven
namespace.maven
.maven
.Proposed fixes
There are a few ways to fix the logline:
maven
toprotobuf_maven
.maven
toprotobuf_maven
.I think 2 is the best short-term option. If you're open to it, I can send a PR.
The text was updated successfully, but these errors were encountered: