1

我是使用pantsbuild的新手,我似乎找不到任何好的问题、答案或文档来解决我的困境。

我有一个 Pants 项目,它应该可以自己构建。它有自己的pantspants.ini文件以及BUILD包含相对于项目根目录的路径(在哪里pants.ini)的所有文件。该项目托管在 GitHub 上。

我想将此项目用作第二个项目中的依赖项。我选择使用 git 子模块来做到这一点。现在,我有如下布局:

path
├── pants
├── pants.ini
├── projectA
│   └── src
│       └── python
|           └── main
│               ├── BUILD
│               └── main.py
└── projectB
    ├── pants
    ├── pants.ini
    └── src
        └── python
            ├── libA
            |   ├── BUILD
            |   └── lib.py
            └── libB
                ├── BUILD
                └── lib.py

自然,我希望在 projectA 中使用 projectB 的 BUILD 目标,所以在 projectA 中BUILD,我有类似的东西:

dependencies = [ "projectB/src/python:libA" ]

这一切都很好。但是,由于 projectB 是一个独立的项目,它的src/python/libA/BUILD文件包含以下内容:

dependencies = [ "src/python:libB" ]

正因为如此,projectB确实可以独立构建。但是,在尝试构建 projectA 时,来自 projectB 的构建目标从 projectA 的项目根目录开始搜索,例如:

Exception Message: libB was not found in BUILD files from path/src/python

pantsbuild 是否有任何干净的方法来处理这些子项目依赖项?或者我是否会被迫更改子项目的 BUILD 文件以使其适合我的项目布局(导致项目无法独立构建)?

欢迎任何解决方案或建议!

4

2 回答 2

1

所以事实证明,裤子不支持我希望的功能。起初,我听从了评论中一位易诚的建议,创建了一个脚本,将所有子项目的 BUILD 规则替换为与根项目相关的规则。该脚本可以在这里找到:https ://github.com/brandonio21/pants-subproject-prep

然而,该脚本非常有限,远非可行的解决方案。从那以后,我在上游换了裤子以支持这种行为。公关在这里:https ://github.com/pantsbuild/pants/pull/4088

现在,如果您在另一个裤子项目中有一个子项目,使用--subproject-roots=["path/to/subproject1_root", "path/to/subproject2_root"](或在 中指定选项pants.ini)构建根项目将从正确的子项目根目录构建子项目

于 2017-04-18T22:34:19.360 回答
0

这一切都很好。但是,由于 projectA 是一个独立的项目,它的 src/python/libA/BUILD 文件包含以下内容:

依赖项 = [“src/python:libB”]

iiucsrc/python:libB需要projectB/src/python:libB。存储库中的所有目标路径都应该相对于path您示例中的构建根目录。

于 2016-10-16T05:21:58.340 回答