関連する一連の Maven プロジェクトを相互依存関係でセットアップするのに苦労しています。
これが私の単純化されたケースです:
pom.xml -- parent pom
\base\
pom.xml
src\main\java\Base.java -- this is just a simple class
\derived\
pom.xml
src\main\java\Derived.java -- this is a simple class that needs Base class to compile successfully, and has a main function
私の目標は次のとおりです。
- 私のマシンで、すべてのプロジェクトをコンパイルできます。
- つまり
mnv clean compile
、\ で成功します。
- つまり
- 私のマシンで、1 つのプロジェクトだけをコンパイルできます。
- つまり
mnv clean compile
、 \base\ および \built\ で成功します (ただし、これは設計上は機能しない場合があります: Inter Project Dependencies in Maven )
[編集: この答えが見つかりました: base は、コンパイル済みで派生する前にローカルで公開する必要があります: つまり \基本、mvn clean compile install
ただするのではなく、するmvn clean compile
。これが完了するとmvn clean compile
、 \built で実行すると正常に動作します。それでも、グローバルな状態に触れずに、つまりベースをインストールすることなく、これを行うのは素晴らしいことです。これを達成する方法を誰かが知っている場合は、回答として追加してください]
- つまり
- ソースツリーから直接自分のマシンで派生プロジェクトを実行できるようにする (mvn exec:run または同等のもの):
- つまり
mvn exec:run
、\built\ で (必要に応じて) コンパイルして、derived.jar を実行する必要があります。
- つまり
- 「共有コンポーネント」の使用例: 基本アーティファクトを共有リポジトリにプッシュし、他の人がそれを Maven の依存関係 (つまり、コンパイル時の依存関係) として使用できるようにします。
- つまり
mvn clean compile ???
、これを ~/.m2/config.xml で指定された共有リポジトリにプッシュします
- つまり
- 「イメージ ディレクトリ」ユース ケース: 派生アーティファクトとその依存関係をローカル ディレクトリにプッシュし、そこで「java -jar ...」を介して実行するか、他の人が取得できるように ftp/http 共有として公開できます。 . つまり、次のようなユースケースです。
mvn clean compile ???
derived.jar と依存関係 (base.jar など) を ~/.m2/maven.repo/.../built または同等のものにプッシュし、cd ~/.m2/maven.repo/.../derived を実行します。そして実行java -jar derived.jar
して実行します。mvn clean compile ???
base.jar を ~/.m2/maven.repo/.../base にプッシュします (または、derived.jar を対応するディレクトリにプッシュします)。これは、ローカル Web または ftp サーバーを介してダウンロード ポイントとして既に公開されています。
上記の目標を達成するにはどうすればよいですか?
親pomの関連セクションは次のとおりです。
...
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>parentpom</name>
<modules>
<module>base</module>
<module>derived</module>
</modules>
...
ベースpom.xmlの関連セクションは次のとおりです。
...
<parent>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.base</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>base</name>
...
派生した pom.xml からの関連セクションは次のとおりです。
...
<parent>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.derived</groupId>
<artifactId>derived</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>derived</name>
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...
よろしくお願いいたします。