bazel - 如何升级支持 Bazel 的库的 Maven 依赖项?

标签 bazel

我的库支持 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/

相关文章:

docker - 启动容器进程导致 "exec:\"/tmp/installer.sh\": permission denied"

c++ - 系统 libc 文件的 Clang 工具链失败

c++ - 在 Bazel 中显示编译器信息

c++ - Bazel 使用 OpenCV 3.3 依赖项构建

go - Bazel Gazelle 错误 : no such package '@org_golang_x_tools//go/analysis/internal/facts' : BUILD file not found in directory

c++ - 是否可以在 Visual Studio 中使用 Bazel 构建代码?

java - Bazel:具有 JNI 依赖项的 Java 应用程序

c++ - 当还需要 libstdc++ 时,如何使用 bazel 创建 Go docker 镜像?

Bazel-如何获取目标的所有传递源

bazel - 是否可以从 Bazel .bzl 规则中获取 $pwd 值?