Bazel构建问题:测试文件位于模块源根外无法编译
在测试目录添加/配置BUILD文件
Bazel完全依赖BUILD文件识别编译目标,IDE手动标记仅为本地设置,执行bazel sync后会被覆盖。在/industries-access-propagation-impl/test/unit/java/src/strictunit/accesspropagation/logger/目录下创建BUILD文件,定义java_test目标:java_test( name = "logger_unit_tests", srcs = glob(["*.java"]), # 替换为实际依赖:主代码目标、测试框架等 deps = [ "//industries-access-propagation-impl/src/main/java/accesspropagation/logger", "@maven//:junit_junit", "@maven//:org_mockito_mockito-core", ], )若上层目录已有BUILD文件,也可在其中通过
glob(["strictunit/accesspropagation/logger/**/*.java"])包含测试源,或直接引用子目录的测试目标。修正.bazelproject文件的测试源配置
确保.bazelproject中正确声明测试源根目录,避免手动标记被同步覆盖:test_source_roots = [ "//industries-access-propagation-impl/test/unit/java/src/...", ]其中
...表示递归包含所有子目录,执行bazel sync后,IDE会自动将该目录标记为Test Sources Root。验证members.bzl的条目有效性
确认core-app/members.bzl中添加的路径与测试目录的Bazel标签完全一致,例如:members = [ # 其他已有条目... "//industries-access-propagation-impl/test/unit/java/src/strictunit/accesspropagation/logger", ]若members.bzl用于控制项目可见性或目录范围,需保证路径无拼写错误。
用Bazel命令行验证编译
先跳过IDE,直接用命令行测试编译,排除IDE配置干扰:bazel build //industries-access-propagation-impl/test/unit/java/src/strictunit/accesspropagation/logger:logger_unit_tests若命令行编译成功,说明Bazel配置正确,重新执行
bazel sync即可让IDE同步正确配置。检查Java包声明与目录结构一致性
确保测试Java文件的package声明与目录结构匹配,例如目录strictunit/accesspropagation/logger对应的Java包应为strictunit.accesspropagation.logger,否则Bazel无法正确识别源文件归属。
内容的提问来源于stack exchange,提问作者Vani Murarishetty

