裤子中的子项目依赖项
Subproject dependencies in pants
我是 pantsbuild 的新手,我似乎找不到关于我的难题的任何好的问题、答案或文档。
我有一个应该可以自行构建的 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
当然,我希望在项目 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
中指定选项)将从正确的子项目根构建子项目
我是 pantsbuild 的新手,我似乎找不到关于我的难题的任何好的问题、答案或文档。
我有一个应该可以自行构建的 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
当然,我希望在项目 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
中指定选项)将从正确的子项目根构建子项目