我是使用pantsbuild的新手,我似乎无法找到关于我的dillema的任何好问题,答案或文档。
我有一个Pants项目,应该可以自行构建。它有自己的pants
和pants.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文件以使其适合我的项目布局(导致项目无法独立构建)?
欢迎任何解决方案或建议!
答案 0 :(得分:0)
这一切都很好。但是,由于projectA是一个独立的项目,它的src / python / libA / BUILD文件包含这样的东西:
dependencies = [" src / python:libB" ]
iiuc src/python:libB
需要projectB/src/python:libB
。 repo中的所有目标路径都应该相对于示例中的path
构建根目录。
答案 1 :(得分:0)
事实证明,我希望的功能不受裤子的支持。首先,我在评论中遵循了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
中的选项)将从适当的子项目根构建子项目