2016-10-16 11 views
0

私はを初めて使用しており、私のディレマの周りに良い質問、回答、またはドキュメントを見つけることができないようです。パンツのサブプロジェクトの依存関係

私はビルド可能でなければならないパンツプロジェクトを持っています。それ自身のpantsと​​ファイルと、すべてのBUILDファイルには、プロジェクトのルートからの相対パス(​​)が含まれています。このプロジェクトはGitHubでホストされています。

私はこのプロジェクトを2番目のプロジェクトの依存関係として使いたいと思います。私はこれを行うために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のBUILDで、私は一種の何かを持っているので、PROJECTA内からProjectBののビルドターゲットを使用するために探しています:

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

これはすべてうまくいいです。このため

dependencies = [ "src/python:libB" ] 

、ProjectBのは、実際に独立して構築することができます:ProjectBのは、独立したプロジェクトであるため、しかし、それはsrc/python/libA/BUILDファイルソートの何かが含まれています。しかし、ProjectBの検索からのビルドターゲットは、例えば、PROJECTAのプロジェクトのルートから、PROJECTAを構築しようとしている:

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

は、これらのサブプロジェクトの依存関係を処理するための任意のきれいな方法を持ってpantsbuildいますか?それとも、私はプロジェクトレイアウト内にそれらを収めるためにサブプロジェクトのBUILDファイルを変更することを余儀なくされますか?

すべての解決策やアドバイスをお待ちしております。

答えて

0

私が望んでいた機能はパンツによってサポートされていなかったことが判明しました。最初は、コメントの中でYi Chengのアドバイスに従い、すべてのサブプロジェクトBUILDルールをルートプロジェクトに関連するルールに置き換えるスクリプトを作成しました。そのスクリプトはここにあります:https://github.com/brandonio21/pants-subproject-prep

スクリプトはかなり限られていましたが、実行可能な解決策からは遠かったです。私はその行動をサポートするためにパンツを上流に変更しています。 PRはここにあった:https://github.com/pantsbuild/pants/pull/4088

さて、あなたは別のパンツプロジェクト内のサブプロジェクトを持っている場合、

0

これはすべて順調です。 PROJECTAは独立したプロジェクトであるため、しかし、それはファイルを作成/ SRC /パイソン/ LIBAのソートのようなものが含まれます

依存関係= [ "SRC /パイソン:libB"]

iiucをsrc/python:libBprojectB/src/python:libBである必要があります。レポ内のすべてのターゲットパスは、例のpathであるビルドルートからの相対パスである必要があります。

+0

がこれは適切なサブプロジェクトのルートからサブプロジェクトを構築します--subproject-roots=["path/to/subproject1_root", "path/to/subproject2_root"]でルートプロジェクトをビルドする(または​​でオプションを指定します)正しい。プロジェクトが正しく動作するためには、projectB/src/python/libA/BUILDに 'dependencies = [" projectB/src/python:libB "]' – brandonio21

+0

が含まれている必要があります。しかし、私の指摘は、projectBは独立したプロジェクトです。私はそれが別のプロジェクトにあるという事実を知らなくても、それ自体ビルド可能であることを望んでいます。 – brandonio21

+0

'pants'と' pants.ini'の2つのセットがあることに気がつきましたが、ビルドルートには1つしか許されません。例えばprojectBでは、ターゲットパスw.r.tを新しいビルドルートに変換する必要があります。 パンツは 'pants'実行ファイルがどこにあるかに基づいてビルドルートを決定するので、ここでもファンキーです。 –