裤子中的子项目依赖项

Subproject dependencies in pants

我是 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

当然,我希望在项目 A 中使用项目 B 的 BUILD 目标,因此在项目 A 的 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 文件以使其适合我的项目布局(导致项目无法独立构建)?

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

This is all well and good. However, since projectA is an independent project, it's src/python/libA/BUILD file contains something of the sort:

dependencies = [ "src/python:libB" ]

iiuc src/python:libB 需要 projectB/src/python:libB。回购中的所有目标路径都应该相对于构建根目录,在您的示例中为 path

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

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

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