当前位置: 首页 > 知识库问答 >
问题:

使用Bazel中其他模块的“src/test”下的实用程序测试类

江迪
2023-03-14

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

我让模块A在“src/test”下包含一些实用程序测试类,模块B使用它们。在maven中,我们使用maven jar插件生成一个测试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

共有1个答案

龙德海
2023-03-14

所以我终于找到了解决方案,其实很简单:

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添加了测试依赖项的java库。

 类似资料:
  • 本文向大家介绍Fortran 使用其他程序单元中的模块,包括了Fortran 使用其他程序单元中的模块的使用技巧和注意事项,需要的朋友参考一下 示例 要从另一个程序单元(模块,过程或程序)访问模块中声明的实体,该模块必须与语句一起使用use。 该use语句仅支持导入所选名称 也可以使用重命名列表以其他名称访问实体: 此外,可以将重命名与only选项结合使用 这样就只能iarray访问模块实体,但是

  • 我在多模块项目中工作。目前我面临以下问题: > 模块A 模块B 模块A依赖于B 模块A有以下方法@GetMapping(path=“/GetWorkspace”) } 模块B有以下方法,我需要使用模块A提到的endpoint 公共字符串consumeModuelAMethod(){ 当我从模块A通过RestTemboard调用“http://localhost:8080/getworkspaces

  • 如果我设置,则应用程序在打开使用第三方库的活动时就会开始崩溃。 art/runtime/java_vm_ext.cc:410]JNI检测到应用程序中的错误:调用了JNI NewGlobalRef,但出现了挂起的异常java.lang.NoSuchFielderRror:类“LCOM/nTreaming/nPlayerEngine/nFactory;”或其超类中没有“I”字段“MalFactoryC

  • 我们的应用程序作为后台服务运行,不断从前置摄像头获取图像,然后处理图像。然而,当用户尝试打开另一个使用摄像头的应用程序时,会发生两件事:要么新应用程序崩溃,我们的应用程序继续,要么我们崩溃,新应用程序访问摄像头。 现在,如果我们的应用程序失去了对摄像头的控制,我们可以捕捉到一个异常,然后我们可以开始尝试访问它,直到我们获得访问权限,一切恢复正常。 问题是当其他应用程序因我们的应用程序而崩溃时。有什

  • 问题内容: 我有一个多模块的Maven项目。为了这个示例,请考虑两个模块: 模块将模块作为依赖项。 模块声明了一堆核心类。有使用它们的测试。这些测试需要创建一些冗长的对象,因此我有一个带有一些实用程序方法的类来创建这些对象。实用程序类()在层次结构中。 我在模块中也进行了一些测试,这些测试需要创建一些冗长的对象。我想在我的树中的测试中使用我的类(在中定义)。不幸的是,即使是的依赖项,也无法看到存在

  • 我有一个多模块Maven项目。在本例中,考虑两个模块: 模块具有模块作为依赖项。 为了解决这个问题,我想我可以创建另一个模块(),并将移到下。那么我将包含作为的测试范围依赖项。不幸的是,这引入了循环依赖关系:使用,但还需要。 我想出的唯一解决方案是将放在下,放在包下,希望真正的应用程序代码不会调用它。 如何在模块之间共享我的类,而不将其放在下?