我的库支持 Bazel 构建并且依赖于 Maven Central。我图书馆的用户 wants to use a newer version of a dependency that has new transitive dependencies .那怎么办呢?
gRPC 1.17 依赖于 Guava 26。然而,Guava 27 添加了对 com.google.guava:failureaccess
的依赖。 .通常,使用 gRPC 的应用程序只会创建自己的 native.maven_jar()
使用新版本并禁用 gRPC 对 native.maven_jar()
的调用.这将“升级”@com_google_guava_guava
然后由 gRPC 和应用程序使用的存储库。
但是@com_google_guava_guava
不包括依赖信息。这通常可以通过使用第三方来解决 java_library()
s 将传递依赖拼接在一起。然而,那些java_library()
s 不能被应用程序改变。
我相信 bind()
将解决这个问题,因为 gRPC 可以依赖于 //external:com_google_guava_guava
这可能是 java_library()
.但是bind()
气馁。
最佳答案
考虑将您的库切换为使用 java_import_external
而不是 maven_jar
.java_import_external
目标 includes dependency information从而允许应用程序取代目标版本及其传递依赖项。
记得加if native.existing_rule(name) == None:
在定义 @com_google_guava_guava
之前为了允许您的库的用户使用更新了依赖项的较新版本的 Guava 自己定义它。
关于bazel - 如何升级支持 Bazel 的库的 Maven 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54119248/