2016-05-18 25 views
2

<plugin>セクション内で指定された依存関係に対してdependency:unpack-dependenciesを実行するにはどうすればよいですか?プラグイン依存関係のMavenアンパック依存関係

実行可能ファイルとその他のものを含む3つのパッケージがあります。parentchildconsumerとしましょう。 childは、parentに依存します。コンシューマを構築するには、childとそのすべての依存関係(つまりparent)を取得し、内容を展開して何かをする必要があります。

私が今持っていることは一種の、作品:childへの依存性が<project>に「グローバル」と宣言され

は、開梱作業は予想通り。しかし、それは結果として得られるconsumerパッケージがchildに依存していることを意味します。従属性は、その使用のためだけでなく、その作成のためだけでなければなりません。

私は<plugins><plugin>セクションに依存を移動すると、それはdependency:unpack-dependenciesによって無視(dependency:unpackプロセスや罰金、それを解凍し、それが推移的ではありません)されて

は、私が何をしないのですか?おかげ


Mavenは推移的依存関係childを知っている - >parent。ローカルリポジトリ全体を削除してこのPOMだけを実行すると、parentがダウンロードされます。


以下の状況の非常に粗い図。緑のアーティファクトは、最終的なアーティファクトを作成するために必要です(後で使用する必要はありません)。そのため、依存関係はセクションにのみ属します。青アーティファクトは最終アーティファクトの使用に必要です。したがって、アーティファクトに依存しています。

enter image description here

+0

達成しようとしていることはありますか?なぜプラグインの依存関係を解凍したいのですか? – khmarbaise

+0

これはJavaプロジェクトではありません。親パッケージにはprotobufferコンパイラがあり、子には前記コンパイラ用のプラグインがあります。このpomを使ってMavenに指定されたバージョンのプラグインをダウンロードさせ、それが依存するコンパイラをダウンロードします。 execプラグインを使用して私はいくつかのパラメータでコンパイラを実行し、作成された成果物をjarにパックします。複数の言語を使用して複数のプラットフォームをターゲットにしているので、Mavenはそのための良いツールのようです。(その中にはJavaがありますが、この場合は問題ありません。非Javaの場合は、このようないくつかの注意点を使用しても問題ありません) –

+0

'protobuffer compiler'の意味を具体的にすることはできますか? – khmarbaise

答えて

2

あなたのアンパックは、あなたがプロジェクト全体のための依存関係を指定すると、期待どおりに動作しているので、おそらくあなたはそれをそのように維持する必要があります。プラグインの依存関係に移動する代わりに、他のプロジェクトがあなたのプロジェクトに依存しているときにMavenに推移的に含めるように指示することができます。それを行うには2つの方法があります。

  1. <scope>provided</scope>を指定する - これは、依存関係がコンパイルのために必要であることMavenを教えてくれますが、そのようなアプリケーションサーバなどの他の手段(それを提供するか、あなたはそれを束ねて、実行時に利用可能であると予想されます)。
  2. <optional>true</optional>を指定します。これにより、依存関係がプロジェクトによって他のプロジェクトによって一時的に解決されなくなります。代わりに、明示的に指定する必要があります。
+0

最初の提案はうまくいくが、ちょっとハックしているようだ。もっと良いものが見つからなければ、私はそれを使用します。正直言って@MartinMelka –

+0

、私はそれを正しいアプローチと考えています。これは、依存関係は「ほかのライブラリをダウンロードしてクラスパスに追加する」よりも広い概念ですからです。あなたのプロジェクトは明らかに他のプロジェクトで何かをしているので、プロジェクト依存性の一種であり、ランタイム依存性ではありません。 –

関連する問題