Подпроектные зависимости в штанах
Я новичок в использовании antsbuild, и я не могу найти какие-либо хорошие вопросы, ответы или документацию по моей дилемме.
У меня есть проект 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
Естественно, я стремлюсь использовать цели проекта BUB из ProjectA, поэтому в 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
Есть ли в брючном файле какой-либо чистый способ обработки этих зависимостей подпроекта? Или я был бы вынужден изменить файлы BUILD подпроекта, чтобы они соответствовали разметке моего проекта (что делает проект не подлежащим сборке независимо)?
Любые решения или советы приветствуются!
2 ответа
Вот и получается, что функциональность, на которую я надеялся, не поддерживалась брюками. Сначала я последовал совету 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
) создаст подпроект из правильного корня подпроекта
Это все хорошо. Однако, так как projectA является независимым проектом, его файл src/python/libA/BUILD содержит что-то вроде:
зависимости = ["src / python: libB"]
iiuc src/python:libB
должно быть projectB/src/python:libB
, Все целевые пути в репо должны быть относительно корня сборки, который path
в вашем примере.