15

私は現在、Protobufsをシリアル化形式としてネットワーク上で使用するいくつかの個別のMavenプロジェクトを管理しています。私はDavidTrottのmaven-protocプラグインを使用して、コンパイル時にコードを生成しています。

それらのプロジェクトが互いに通信するようになるまで、つまり、互いのプロトバフを使用するまでは、すべてが順調です。protobuf言語には、私が望むことを実行する「import」ディレクティブがありますが、プロジェクトAがプロジェクトBに依存する「.proto」ファイル(またはおそらく何らかの中間形式?)をエクスポートするという課題に直面しています。

Mavenは、プロジェクトがリソースをバンドルする方法を提供しますが、AFAIKは、実行時にコードによって使用されることを意図しており、コンパイル/ソース生成フェーズ中の目標によっては使用されません。少なくとも、説明するドキュメントを見つけることができませんでした。私が達成したいこと。

4

2 に答える 2

6

達成する別の方法を見つけましたが、Maven の魔法は必要ありません。maven-protoc プラグインのコードを詳しく調べたところ、これがサポートされているユース ケースであることがわかりました。プラグインは、依存する jar 内の .proto ファイルを探して収集し、それらを一時ディレクトリに解凍します。そのディレクトリは、protoc 呼び出しへのインポート パスとして設定されます。

必要なのは、.proto ファイルを依存関係のパッケージに含めることだけです。これは、リソースにすることで実現しました。

プロジェクト/a/src/main/resources/a.proto

projects/b/pom.xml に、通常の Maven 依存関係として 'a' を追加し、ローカルに存在するかのように b.proto から a.proto をインポートします。

b.proto: import "a.proto";

ファイル名がさまざまなプロジェクト間で競合する可能性があるため、これは理想的ではありませんが、これはほとんど発生しません。

于 2012-10-31T22:37:38.070 に答える
2

.proto ファイルは、それらが生成されたプロジェクト内の別の .jar/.zip にパッケージ化し、専用の分類子を使用してリポジトリに公開できます。ここでアセンブリ プラグインを使用すると、リリース中にビルドされる「ソース jar」に近いものを公開するのに役立つ場合があります。

次に、それらを使用するプロジェクトで、以前に作成したアーティファクトを依存関係として追加します。「unpack-dependencies」ゴールで依存関係プラグインを使用し、「コンパイル」前のフェーズにバインドします。

于 2012-10-31T21:04:17.750 に答える