MVNの依存関係を実行するときにMavenは兄弟モジュールを認識しない:ツリー
-
16-09-2019 - |
質問
私は、マルチモジュールのMavenプロジェクトを設定しようとしている、とモジュール間の依存関係が明らかに正しく設定されていません。
私が持っています:
<modules>
<module>commons</module>
<module>storage</module>
</modules>
(パッケージ型POMを有する)の親でPOM
同じ名前のJARのPOMSを定義し、サブディレクトリcommons/
とstorage/
。
ストレージはコモンズに依存します。
メイン(マスター)ディレクトリでは、私はmvn dependency:tree
を実行し、参照してください。
[INFO] Building system
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] domain:system:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:3.8.1:test
[INFO] ------------------------------------------------------------------------
[INFO] Building commons
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
...correct tree...
[INFO] ------------------------------------------------------------------------
[INFO] Building storage
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
Downloading: http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar
[INFO] Unable to find resource 'domain:commons:jar:1.0-SNAPSHOT' in repository my.repo (http://my.repo/artifactory/repo)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) domain:commons:jar:1.0-SNAPSHOT
なぜ「コモンズ」への依存性は、それが正常に依存ツリーを処理しているため原子炉は明らかにそれを見ているにもかかわらず、失敗するのでしょうか?間違いなく
...それはすぐそこだとしてそれを見つけるために「ネットに行くべきではありませんストレージのためのPOMます:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<parent>
<artifactId>system</artifactId>
<groupId>domain</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>domain</groupId>
<artifactId>storage</artifactId>
<name>storage</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- module dependencies -->
<dependency>
<groupId>domain</groupId>
<artifactId>commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- other dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
任意の提案をありがとう!
(編集)
を明確にするために、私はここを探しています、このです:私は両方が同じ親POMから参照モジュールであることを考えると、Xに依存モジュールYを構築するために、モジュールXをインストールする必要がありますする必要はありません。これは私が同じソースツリーに二つのものを持っている場合、私はビルドを継続するために、中間製品をインストールする必要はありませんように私には直感的に理にかなっています。うまくいけば、私の考えはここにいくつかの理にかなって...
解決
私はこの問題は、あなたが依存関係を指定するとMavenのは、少なくともローカルレポからパッケージ化し、利用可能なjarファイル(または何でも)としてそれを持っていることを想定していると思います。私はあなたCommonsプロジェクトでmvn install
を実行する場合は、最初のすべてが動作することを確信しています。
他のヒント
このMavenのメーリングリストのスレッドには、で説明したように、依存関係:それだけで木の目標は、リポジトリではなく、反応器内で物事を見ていきます。あなたは、このような
のように、以前に示唆したように、MVNをインストールすることによってこの問題を回避、または原子炉を起動する負担の少ない何かをすることができますmvn compile dependency:tree
は私のために動作します。
これは古いスレッドですが、それは実現ツールのいずれかが進化しているようですか、これは最初の頃を逃しされている可能性があります。
原子炉のビルドを実行してインストールすることなく、依存関係が解決になり、ビルドを行うことが可能です。
あなたのプロジェクトのモジュール構造を説明し、親にビルドを開始する場合は、そして、あなたのモジュール間の依存関係、あなたは内部Mavenの反応器を通って、ビルド自体中に解決されます。
もちろんこれは、それが構造内の単一の個々のモジュールのビルドを解決していないので、完璧なソリューションではありません。この場合、Mavenは彼の反応器内の依存関係を持ちませんし、リポジトリにそれを解決するために探してハチます。個々のビルドのためにだからあなたはまだ最初の依存関係をインストールする必要があります。
ここではいくつかのこのような状況を説明する参照ます。
私のために、どのようなこのスレッドに私を導いたことは、同様の問題があって解決策を持っていたのは、すべてのモジュールの依存関係のポンポンを確保することでした。
<packaging>pom</packaging>
親が持っていた。
POM
私のモデルDEPがポンポンを持っていた - 。そう発見される一切のjarはありませんでした。
唯一のもの:のGradleへの切り替え:(
私が持っている
Parent
+---dep1
+---war1 (using dep1)
と私はwar1でできるだけのCDとMVN tomcat7使用:実行-戦争を。 war1が(モジュールとして)彼の親と親参照のwar1とDEP1を参照するにもかかわらず、私はいつもすべての依存関係が知られている必要があり、前にプロジェクト全体をインストールする必要があります。
私は問題が何であるかを理解していません。
このようなMavenのモジュール構造で
- parent
- child1
- child2
あなたはparent
のpom
でこれを持っています
<modules>
<module>child1</module>
<module>child2</module>
</modules>
あなたは今child1
であなたのchild2
に次のように入れて<dependencies>
にchild2
に依存している場合:
<dependency>
<groupId>example</groupId>
<artifactId>child1</artifactId>
</dependency>
あなたはchild1
のJARが見つからないというエラーが表示されます。これは<dependencyManagement>
ためchild1
にpom
含むparent
ブロックを宣言することによって解決することができる:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>example</groupId>
<artifactId>child1</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
child1
は今、あなたがcompile
上package
またはparent
などの目標を実行したときに構築されます、そしてchild2
はchild1
のコンパイルされたファイルを検索します。
に答えるhref="https://stackoverflow.com/a/1905927/5401366">オフBonusing 「-willis>ドン・ウィリスするます:
ビルドは、あなたが使用する必要がありますあなたの原子炉のサブモジュール間のテストコードを共有するために、テストのjarファイルを作成する場合:
mvn test-compile dependency:tree
dependency:tree
、この場合には完了するまで実行できるようになります。
モジュールのPOMファイルに設定を含めることによって確認ポンポンで解決さ失敗しているモジュールは、右の親を指しているを確認します。