2010-12-07 14 views
1

モジュールBがモジュールAに依存するマルチモジュールMavenプロジェクトがあります。モジュールBを再構築するたびにモジュールAを再ビルドする方法を教えてください。今はモジュールBを使って何かをする前にモジュールAを手動でインストールしなければなりません。マルチモジュールMavenプロジェクトの変更を受け取ります

P.S.私は他の誰かが同様の未回答の質問をしたのを見る: Maven: How to use jetty:run in a multi-module Maven project, without needing to install

+0

プロジェクトをビルドするために実行しているコマンドは何ですか? mvnパッケージ? – jgifford25

答えて

1

これは2つの方法で解決されています。まず、BのPOMにはAのために<の依存関係を含める必要があります.Bが構築されると、Aがリポジトリにある限り、正しいバージョンが取得されます。

AがBの前に構築されることを確認するには、Maven reactorはこの依存関係を知る必要があります。これは、< module>要素を持つマルチモジュールビルドで行われます。最上位のPOMは<パッケージ化> pom < /パッケージ化>に設定されており、AとBの2つのモジュールがあります。ソースプロジェクトから到達可能な場合、それらは正しい順序で構築されます。

Bをビルドして、MavenリアクタにAのソースを見つけて確認させる方法はないことに注意してください。原子炉は常にソースプロジェクトを必要とし、AとBはともに<のmodule>要素のグラフで見つけなければなりません。これは、Bのビルドが、Aのリポジトリ成果物が最新であるかどうかを判断できないため、Aのビルドを実行し、それを把握できるようにする必要があるためです。また、それらを同時に実行するには、ここに記載されているように両方を含む親プロジェクトがビルドされるソースプロジェクトでなければなりません。

この種のマルチモジュールプロジェクトでは、MavenはAntよりも遅いわけではありませんが、MavenプロジェクトをIDEにインポートすると、Mavenよりもはるかに高速なビルドが可能になります。

+0

プロジェクトB用の私のpom.xmlは、プロジェクトAを依存関係としてリストします。問題は、インストールされているプロジェクトAを使用していて、ファイルシステム上のプロジェクトAを使用していないことです。これは開発に苦労します。基本的に私が望むのは、プロジェクトBが再コンパイルされるたびにプロジェクトAが自動的に再インストールされることです。 –

+0

次に、これらのプロジェクトの両方で親POMを作成し、そこからビルドする必要があります。または、IDEにプルします。 –

+0

この質問に遭遇する可能性がある他の人にとって、答えは基本的に不可能だということです。ブライアンは他のスレッドでMavenを開発用に使用することはあまりにも苦痛で、代わりに最終ビルドをパッケージ化するためにのみ使用するべきだと提案しました。 http://stackoverflow.com/questions/4371373 –

0

m2eclipseを使用してEclipse IDEで作業することで、Maven起動設定だけでなく、コンパイル時にも作業領域依存関係管理を有効にできます。この場合、依存プロジェクトのコンパイルされたクラスがMavenローカルリポジトリのjarの代わりに使用されます。これは、カスタマイズされたjarパッケージなしの通常のプロジェクトで有効です。

当然のことながら、コマンドラインでは、各プロジェクトをビルドしてインストールするか、原子炉プロジェクトを使用して両方のプロジェクトを1回でビルドしますが、IDEでの作業はそれほど簡単ではありません。

+0

私は、デフォルトである「ワークスペースプロジェクトからの依存関係の解決」を有効にしています。しかし、EclipseでプロジェクトBのpom.xmlを開き、 "Dependency Hierarchy"タブに移動すると、インストールされているプロジェクトAに基づいて推移的な依存性が引き出されていることがわかります。 –

関連する問題