7

Maven でマルチモジュール プロジェクトを調査してきましたが、親プロジェクトのサブディレクトリとして存在するモジュールの例しか見つかりません。このことから、モジュールをパッケージ化してリポジトリにデプロイすることなく、2 つの Maven プロジェクト間でモジュールを共有する方法はないと推測するのは間違いでしょうか? それは不必要に面倒だと思います。

たとえば、2 つの関連するプロジェクトに積極的に取り組んでいるとします。これらのプロジェクトは、将来のために使用する予定の API ブリッジを介してのみ相互にやり取りします。2 つのプロジェクトの進行に合わせて、ブリッジは常に更新されています。

したがって、この作業に Maven モジュールを活用したい場合、1 つのプロジェクト pom.xml は次のようになります...

<groupId>net.syndog</groupId>
<artifactId>myproject</artifactId>
.
.
.
<modules>
    <module>myproject-bridge</module>
</modules>

...そしてもう一つはこんな感じ...

<groupId>net.syndog</groupId>
<artifactId>myotherproject</artifactId>
.
.
.
<modules>
    <module>myproject-bridge</module>
</modules>

Maven のモジュールが、それらが属するプロジェクトのサブディレクトリでなければならないと仮定すると、myproject と myotherproject の両方が同時に myproject-bridge モジュールを使用するにはどうすればよいでしょうか?

これはMavenでも可能ですか、それとも微調整を行うたびにmyproject-bridgeをパッケージ化してリポジトリにデプロイする必要がありますか? 私の勘違いかもしれませんが、これはとてもありふれた問題のように思えますが、誰もそれについて話していないようです。私はこれについてすべて間違っていますか?

4

4 に答える 4

6

このような依存関係を使用する通常の方法は、次のような依存関係を定義することです。

<dependency>
  <groupId>net.syndog</groupId>
  <artifactId>xyz-api</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

しかし、このアプローチの結果、この API を正確に含む別のプロジェクトが必要になります。これは、リポジトリの代わりにワークスペースを介してプロジェクト間の依存関係を解決する IDE を使用することで簡素化できます。それ以外の場合は、定期的に mvn install (ローカルでのみ作業している場合) または mvn deploy (リポジトリ マネージャー経由) を実行する必要があります。

もう 1 つの解決策は、次のような実際のマルチモジュール プロジェクトを使用することです。

+-- pom.xml (root)
+-- myproject-bridge
     +--- pom.xml
+-- myproject-a
     +--- pom.xml
+-- myproject-b
     +--- pom.xml

project-a と project-b は、単純な依存関係を介して myproject-bridge を使用します。ルートでは、(前述のように)モジュールを定義します

<modules>
 <module>myproject-bridge</module>
 <module>myproject-a</module>
 <module>myproject-b</module>
</modules>

そして myproject-a では、単に定義します

<dependency>
  <groupId>net.syndog</groupId>
  <artifactId>xyz-api</artifactId>
  <version>${project.version}</version>
</dependency>

そして myproject-b でも同じように。モジュールを使用することは、必ずしも依存関係を定義することを意味しないことに注意する必要があります。これにより、リリース後またはスナップショットとして、完全に異なるプロジェクトから myproject-bridge を使用する機会も得られます。

于 2012-04-07T11:08:51.327 に答える
6

質問をタイトルにあるものとすると、質問は次のとおりです。

Maven モジュールは親プロジェクトのサブディレクトリである必要がありますか?

質問が Maven マルチモジュール プロジェクトに関するものであり、Maven 継承プロジェクトに関するものではない限り、その質問に対する答えは「いいえ」です。理由は次のとおりです。

上記のmatsevの回答が明らかにしているように、「リストされている各モジュールは、モジュールを含むディレクトリへの相対パスです(強調が追加されています)。」スーパープロジェクト(継承されたプロジェクトの無関係な概念を含まないように、「親」と「子」という用語は避けます)からサブプロジェクトへの相対パスである限り、サブディレクトリである必要はありません. この制約は、OS に依存するさまざまな方法で満たすことができます。たとえば、親ディレクトリ パス要素 (..) を含めて、サブモジュール ディレクトリにトラバースすることができます。または、シンボリック リンクを使用することもできます。いずれにせよ、いいえ、Maven モジュールが Maven マルチモジュール プロジェクトのディレクトリのサブディレクトリでなければならないというのは厳密には真実ではありません。

于 2014-11-01T15:09:51.877 に答える
4

Maven スキーマ記述子のドキュメントから:

このプロジェクトの一部としてビルドするモジュール (サブプロジェクトとも呼ばれます)。リストされている各モジュールは、モジュールを含むディレクトリへの相対パスです。

于 2012-04-07T13:22:46.677 に答える
0

私の知る限り、モジュールは親のプロジェクトのサブディレクトリにある必要があります。

ブリッジ プロジェクトを共有するには、それをリポジトリにデプロイする必要があります。

Eclipse を使用している場合は、この回避策が役に立ちます。

  • ワークスペースに 3 つのプロジェクトを配置します。
  • すべてのプロジェクトが Maven プロジェクトとして宣言されていることを確認してください。
  • 両方のプロジェクトで、依存関係として mybridge を追加します。
  • 両方のプロジェクトで、oh theirs projet を右クリックし、[Maven] --> [ワークスペースの解決を有効にする] を選択します。

そのため、リポジトリを読み取る代わりに、Eclipse は mybridge 依存関係を Eclipse ワークスペース内の依存関係にリンクします。

mybridge を変更するたびに、他の 2 つのプロジェクトが影響を受けます。

もっと良い方法があるかもしれませんが、私は Maven の最大の専門家ではありません。

よろしく。

于 2012-04-07T11:06:09.600 に答える