MVNの依存関係を実行するときにMavenは兄弟モジュールを認識しない:ツリー

StackOverflow https://stackoverflow.com/questions/1677473

質問

私は、マルチモジュールの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を実行する場合は、最初のすべてが動作することを確信しています。

他のヒント

私のために、どのようなこのスレッドに私を導いたことは、同様の問題があって解決策を持っていたのは、すべてのモジュールの依存関係のポンポンを確保することでした。

 <packaging>pom</packaging>

親が持っていた。

POM

私のモデルDEPがポンポンを持っていた - 。そう発見される一切のjarはありませんでした。

私のためWORKD

唯一のもの:のGradleへの切り替え:(

私が持っている

Parent
  +---dep1
  +---war1 (using dep1)

と私はwar1でできるだけのCDとMVN tomcat7使用:実行-戦争を。 war1が(モジュールとして)彼の親と親参照のwar1とDEP1を参照するにもかかわらず、私はいつもすべての依存関係が知られている必要があり、前にプロジェクト全体をインストールする必要があります。

私は問題が何であるかを理解していません。

このようなMavenのモジュール構造で

- parent
  - child1
  - child2

あなたはparentpomでこれを持っています

<modules>
  <module>child1</module>
  <module>child2</module>
</modules>

あなたは今child1であなたのchild2に次のように入れて<dependencies>child2に依存している場合:

<dependency>
  <groupId>example</groupId>
  <artifactId>child1</artifactId>
</dependency>

あなたはchild1のJARが見つからないというエラーが表示されます。これは<dependencyManagement>ためchild1pom含むparentブロックを宣言することによって解決することができる:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>example</groupId>
      <artifactId>child1</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

child1は今、あなたがcompilepackageまたはparentなどの目標を実行したときに構築されます、そしてchild2child1のコンパイルされたファイルを検索します。

に答えるhref="https://stackoverflow.com/a/1905927/5401366">オフBonusing 「-willis>ドン・ウィリスするます:

ビルドは、あなたが使用する必要がありますあなたの原子炉のサブモジュール間のテストコードを共有するために、テストのjarファイルを作成する場合:

mvn test-compile dependency:tree

dependency:tree、この場合には完了するまで実行できるようになります。

モジュールのPOMファイルに設定を含めることによって確認ポンポンで解決さ失敗しているモジュールは、右の親を指しているを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top