首页 > 解决方案 > 使用 Bazel 中其他模块的“src/test”下的实用程序测试类

问题描述

所以我正在将一个多模块项目从 maven 迁移到 Bazel,我遇到了以下问题:

我的模块 A 包含“src/test”下的一些实用程序测试类,模块 B 使用它们。在 maven 中,我们使用 maven-jar-plugin 生成一个test-jar,它作为依赖项包含在模块 B 中。但我不确定如何将其迁移到 Bazel。

到目前为止,我的 bazel 配置如下所示:

模块 B:

java_library(
    name = "moduleB-lib",
    srcs = glob(["src/main/java/**/*.java"]),
    visibility = ["//visibility:public"],
    deps = [
        "//path/to/moduleA:lib"
    ],
)


java_library(
    name = "test-dep",
    srcs = glob(["**/src/test/java/**/*.java"]),
    visibility = ["//visibility:public"],
    deps = [
        ":moduleB-lib",
        "@maven:junit-dependencies"
    ],
)

java_test(
    name = "tests",
    args = ["--select-package=org.test"],
    main_class = "org.junit.platform.console.ConsoleLauncher",
    use_testrunner = False,
    visibility = ["//visibility:public"],
    runtime_deps = [":test-dep"],
)

但这不起作用,因为模块 B 无法看到这些实用程序类

error: cannot find symbol

标签: javamavenbazel

解决方案


所以我终于找到了解决方案,实际上这很容易:

java_library(
    name = "moduleB-lib",
    srcs = glob(["src/main/java/**/*.java"]),
    visibility = ["//visibility:public"],
    deps = [
        "//path/to/moduleA:lib"
    ],
)


java_library(
    name = "test-dep",
    srcs = glob(["**/src/test/java/**/*.java"]),
    visibility = ["//visibility:public"],
    deps = [
        ":moduleB-lib",
        "//path/to/moduleA:test-dep",
        "@maven:junit-dependencies"
    ],
)

java_test(
    name = "tests",
    args = ["--select-package=org.test"],
    main_class = "org.junit.platform.console.ConsoleLauncher",
    use_testrunner = False,
    visibility = ["//visibility:public"],
    runtime_deps = [":test-dep"],
)

为了使它工作,我刚刚从模块 A 中添加了 test-dependencies 的 java-library。


推荐阅读