99

マルチモジュール Maven プロジェクトをセットアップしようとしていますが、モジュール間の依存関係が正しくセットアップされていないようです。

私は持っている:

<modules>
  <module>commons</module>
  <module>storage</module>
</modules>

親POM(パッケージタイプのpomを持つ)とサブディレクトリcommons/storage/、同じ名前のJAR pomを定義します。

ストレージは Commons に依存します。

メイン (マスター) ディレクトリで実行する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

依存関係ツリーを正常に処理したため、reactor が明らかにそれを認識しているにもかかわらず、「コモンズ」への依存関係が失敗するのはなぜですか? すぐそこにあるので、それを見つけるために「ネット」に行くべきではありません...

保管用ポンポン:

<?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をインストールする必要はありません。これは、同じソース ツリーに 2 つのものがある場合、ビルドを続行するために中間製品をインストールする必要がないという直感的な意味を持ちます。うまくいけば、私の考えはここである程度理にかなっています...

4

9 に答える 9

120

この Maven メーリング リスト スレッドで説明されているように、dependency:tree ゴール自体は、reactor ではなくリポジトリで検索します。これを回避するには、以前に提案されたように mvn をインストールするか、またはリアクターを呼び出す負担の少ない何かを実行します。

mvn compile dependency:tree

私のために働きます。

于 2009-12-15T08:20:09.263 に答える
22

問題は、依存関係を指定すると、Maven がそれを jar (またはその他のもの) としてパッケージ化し、少なくともローカル リポジトリから利用できるようにすることを期待していることだと思います。mvn installCommons プロジェクトで最初に 実行すれば、すべてがうまくいくと確信しています。

于 2009-11-05T00:10:31.893 に答える
8

これが古いスレッドであることを認識していますが、ツールが進化したか、これが初めて見逃された可能性があるようです。

リアクター ビルドを実行することで、インストールせずに依存関係を解決するビルドを実行できます。

プロジェクトのモジュール構造を記述する親でビルドを開始すると、モジュール間の依存関係はビルド中に内部 Maven リアクターを介して解決されます。

もちろん、これは構造内の単一の個々のモジュールのビルドを解決しないため、完全な解決策ではありません。この場合、Maven は自分のリアクターに依存関係がなく、リポジトリで解決しようとします。したがって、個々のビルドでは、依存関係を最初にインストールする必要があります。

この状況を説明するリファレンスを次に示します。

于 2011-12-21T02:50:04.200 に答える
4

私のために働いた唯一のこと:グラドルへの切り替え:(

私は持っている

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

そして、war1 で cd して、mvn tomcat7:run-war を使用できます。war1 が彼の親を参照し、親が war1 と dep1 を (モジュールとして) 参照しているにもかかわらず、常にプロジェクト全体をインストールする必要があるため、すべての依存関係を把握する必要があります。

何が問題なのかわかりません。

于 2015-11-12T23:05:53.227 に答える
2

私にとって、このスレッドに私を導いたのは同様の問題であり、解決策はすべてのモジュール依存関係のpomが持っていることを確認することでした

 <packaging>pom</packaging>

親が持っていた

pom

私のモデル部門にはpomがあったので、jarファイルは見つかりませんでした。

于 2012-12-23T15:28:52.873 に答える
-1

失敗しているモジュールが pom で解決され、モジュールの pom ファイルに構成を含めることにより、正しい親を指していることを確認してください。

于 2017-01-11T10:39:11.393 に答える