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

如何让Bazel的Maven依赖不打包进部署JAR但可用于测试?

解决方案

步骤1:调整WORKSPACE依赖配置

先移除neverlink=True,正常安装依赖,确保该依赖被完整下载,同时保留编译和运行时的可用版本:

maven_install(
    artifacts = [
        maven.artifact("org.example.package", "my-dependency", "1.0.0"),
    ],
    # 保留原有其他配置...
)

步骤2:主代码BUILD目标标记仅编译依赖

在主代码的java_library或java_binary中,给该依赖添加neverlink=True属性,这样编译时会使用该依赖,但打包部署JAR时不会将其包含:

java_library(
    name = "main-library",
    srcs = glob(["src/main/java/**/*.java"]),
    deps = [
        # 标记该依赖仅用于编译,不参与打包
        Label("@maven//:org_example_package_my_dependency", neverlink = True),
        # 其他主代码依赖...
    ],
)

步骤3:测试目标正常依赖该包

在java_test目标中直接依赖该包的默认版本(neverlink默认值为False),确保测试运行时能加载到依赖类:

java_test(
    name = "my-test",
    srcs = glob(["src/test/java/**/*.java"]),
    deps = [
        ":main-library",
        # 正常依赖,测试运行时可访问类文件
        "@maven//:org_example_package_my_dependency",
        # 测试框架依赖(如JUnit等)...
    ],
)

原理说明

  • neverlink=True的依赖仅参与编译过程,不会被加入运行时类路径,也不会被打包进最终部署JAR,满足“不包含依赖到部署包”的需求。
  • 测试目标直接使用未设置neverlink的依赖版本,运行时会自动加载该依赖的类,解决NoClassDefFoundError问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:40:26