1. ホーム
  2. java

[解決済み] mvn dependency:treeを実行すると、Mavenが兄弟モジュールを認識しない

2022-12-26 09:55:14

質問

マルチモジュールの 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

リアクターは依存関係ツリーを正常に処理したため、明らかにそれを見たにもかかわらず、なぜ "commons" への依存は失敗するのでしょうか? それは間違いなくそこにあるので、それを見つけるためにネットに行くべきではありません...。

ストレージのための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>

どんな提案でもありがとうございます

(編集)

明確にするために、私がここで探しているものはこれです。 X に依存するモジュール Y を構築するために、モジュール X をインストールする必要がないようにしたいのですが、両方とも同じ親 POM から参照されるモジュールであるとします。 これは、同じソースツリーに2つのものがある場合、ビルドを続けるために中間生成物をインストールする必要がないという、直感的に理解できるものです。 私の考え方がここで何らかの意味を持つことを願っています...。

どのように解決するのですか?

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