You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bazel Query获取SDK的传递性外部依赖以生成正确POM?

解决Bazel java_export生成pom.xml缺失传递外部依赖的问题

我使用java_export规则发布SDK,配置如下:

load("@rules_jvm_external//:defs.bzl", "java_export")

java_export(
    name = "sdk_maven",
    maven_coordinates = "sdk:1.0.0",
    pom_template = "pom_template_1.xml",
    visibility = ["//visibility:public"],
    runtime_deps = [
        ":module",
    ],
    tags = ["no-javadocs"],
)

执行构建Maven发布文件的命令:

bazel build //clients/sdk:sdk_maven.publish

生成的JAR包含所有传递类文件,但pom.xml中不包含当前模块依赖的其他模块所使用的外部依赖。

尝试过以下命令获取依赖:

bazel query "filter('@maven', deps(//clients/sdk:sdk_maven.publish))"   | sed 's#^#    "#;s#$#",#'

但返回的是类似@maven_redisson//:com_fasterxml_jackson_dataformat_jackson_dataformat_yaml的内部目标,而非@maven_redisson这类带版本的顶层依赖。将这些内部目标添加到java_export的deps中时,触发可见性错误:

ERROR: /Users/abhisheksingh/Documents/clients/sdk/BUILD.bazel:365:12: in java_library rule //clients/sdk:sdk_maven-lib: target '@maven_redisson//:com_fasterxml_jackson_dataformat_jackson_dataformat_yaml' is not visible from target '//clients/sdk:sdk_maven-lib'. Check the visibility declaration of the former target if you think the dependency is legitimate

解决方案:获取顶层Maven依赖的Bazel Query命令

要直接获取你在maven_install中声明的顶层带版本依赖(而非内部子目标),可以使用以下命令:

bazel query "kind(maven_install, deps(//clients/sdk:sdk_maven.publish))" | sed 's#^#    "#;s#$#",#'

如果需要过滤特定仓库前缀的依赖(比如仅保留@maven_开头的目标),可以调整为:

bazel query "filter('@maven_', kind(maven_install, deps(//clients/sdk:sdk_maven.publish)))" | sed 's#^#    "#;s#$#",#'

关键说明:

  1. 为什么之前的命令失效?
    之前的filter('@maven')会匹配所有含@maven的目标,包括maven_install自动生成的内部子JAR目标,这些子目标默认没有对外可见性,因此添加到deps会触发错误。而kind(maven_install)仅匹配顶层的依赖声明目标,这类目标默认具备对外可见性。

  2. 应用结果到java_export
    将命令输出的依赖列表添加到java_export的deps或runtime_deps中(根据依赖类型选择),重新执行构建后,生成的pom.xml就会包含正确的顶层Maven依赖坐标。

  3. 适配其他依赖管理规则
    若你的外部依赖不是通过maven_install管理,而是jvm_import等其他规则,只需将kind(maven_install)替换为对应的规则类型即可,比如kind(jvm_import)。

内容的提问来源于stack exchange,提问作者Abhishek Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 23:12:40