2017-04-30 6 views
2

ターゲットのjarファイルのリストの場所を必要とするビルド後のツールを書いています。 私はターゲットのリスト(それぞれ--aspectsを使って各ターゲットごとに別々に実行される)を持ち、それぞれのjarファイルパスをフェッチします。bazelアスペクトの出力ファイルにデータを蓄積するための推奨戦略

私は、各出力先フォルダ内のカスタム出力ファイル(例:jar.txt)の各jarファイルパスを取得できました。

しかし、これは、場所を取得するために、各jar.txtファイルを別々に調べる必要があることを意味します。

jarファイルのパスを1つのファイルに蓄積する方法はありますか?

  1. 試してみて、側面でappendコマンドと同じ出力フォルダへの書き込み:のような
    何か。共有出力フォルダが可能かどうかはわかりません。

  2. すべてのターゲットに依存する合成ターゲットを作成し、このターゲット上でアスペクトを実行し、jarsを蓄積し、再帰が戻った後にそれらをルートに書き出します。

有効なオプションは1,2ですか?
bazelアスペクトの出力ファイルにデータを蓄積するために推奨される戦略は何ですか?

答えて

2

Bazelは(ターゲット・グラフに互いに関連していないターゲットとの間の情報を蓄積するためのもので、例えばものをすかいらーくでfacitlitiesを提供しませんコマンドラインで互いに隣り合っています)。

1つの可能性は、通常コマンドラインで言及するすべてのターゲットに依存するSkylarkルールを作成し、そのルールを作成することです。そのルールは各Javaターゲットのクラスパスを1つのファイルに照合することができます。

もう1つの可能性は、Bazelに、--experimental_build_event_{json,text,binary}_fileを使用してビルドイベント(指定されたビルドパターンが展開されるすべてのターゲットのすべての出力を含む)をファイルに書き込むように指示することです。 (「実験」はすぐに削除されます)。

https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto

0

ナタン、

私が正しく理解していれば、あなたは推移単一の結果に出て、各アスペクトノードからの情報を伝播します。これを行うには、アスペクトルールの実装で推移的なセットを作成し、それを "プロバイダ"のメカニズム[^ 1]経由で渡します。私はバゼルの側面についていくつかの例を書いたが、おそらくあなたはそれが役に立つと思うだろう[^ 2]。

  1. https://github.com/pcj/bazel_aspects/blob/master/aspects.bzl#L94-L104

  2. https://github.com/pcj/bazel_aspects

+0

ポール、 側面が訪れるターゲットは依存関係のツリーの一部ではありません:ファイルは、このメッセージのインスタンスを含みます。 私は、実際のターゲットのすべてに依存する合成ターゲットを作成し、提案したようにそれにデータを伝播することを提案しました。 私の質問は、合成ターゲットを作成するのが匂いではないかどうかです... – Natan

+0

要点またはサンプルのレポとしてコードを投稿できますか? – Paul

+0

[example repo](https://github.com/natansil/bazel-learning/tree/master/bazel_aspect)たとえば、m0のすべてのターゲットにアクセスし、すべてのjarの場所を探したい – Natan

関連する問題