首页 > 解决方案 > Bazel 工作目录与 Maven 不同。如何迁移?

问题描述

我有一个使用 Maven 构建的现有项目。它通常定义几个模块。我想将此项目迁移到 Bazel。

在第一次尝试中,我使用

└── project
    ├── moduleA
    │   ├── BUILD
    │   ├── pom.xml
    │   └── src
    │       ├── main
    │       │   └── java
    │       └── test
    │           ├── data
    │           └── java
    ├── moduleB
    │   ├── BUILD
    │   ├── pom.xml
    │   └── src
    │       ├── main
    │       │   └── java
    │       └── test
    │           └── java
    ├── pom.xml
    └── WORKSPACE

使用 Bazel 构建项目并不难。我现在的问题是测试无法找到他们的测试数据。

实际上,对于 Maven(或 ant),工作目录就是包含pom.xml(或build.xml)的目录。因此,在这种情况下,对于 moduelA 可以执行以下操作:

new File("src/test/data/foo.txt");

然而,当测试在 Bazel 中运行时,工作目录是像工作区一样根植的 sanboxed 运行文件即现在必须打开测试:

new File("projectA/src/test/data/foo.txt");

迁移后这一切都很好,但是您迁移过程中是否处理过这种情况,即如何使测试在 Maven 和 Bazel 中都通过?

Bazel 测试运行程序是否提供了任何工具来适应遗留行为的路径?

标签: bazel

解决方案


我目前的解决方法是检查是否new File(".").getAbsoluteFile().getParentFile()__main__.

请参阅TestFileUtil.java


推荐阅读