web-dev-qa-db-ja.com

Mavenは同じマルチモジュールプロジェクト内のモジュールの依存関係を解決できません

などのコマンドを実行する場合

mvn dependency:build-classpath

または

mvn exec:Java

Mavenは、あるモジュールの別のモジュールへの依存関係を解決できません。

[エラー]プロジェクトparser-appで目標を実行できませんでした:プロジェクトproject_group:A:jar:0.1-SNAPSHOTの依存関係を解決できませんでした:アーティファクトproject_group:B:jar:0.1-SNAPSHOTが見つかりませんでした

プロジェクトの構造は次のとおりです。

/pom.xml
/A/pom.xml
/B/pom.xml

親pomは次のとおりです。

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>project_group</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <version>0.1-SNAPSHOT</version>
  <name>parent</name>

  <modules>
    <module>A</module>
    <module>B</module>
  </modules>

最初の子モジュール(依存関係の解決に失敗したモジュール):

    <project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>parent_group</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>
  </parent>
  <artifactId>A</artifactId>
  <packaging>jar</packaging>
  <name>A</name>

  <dependencies>
    <dependency>
      <groupId>parent_group</groupId>
      <artifactId>B</artifactId>
      <version>0.1-SNAPSHOT</version>
    </dependency>

2番目の子モジュール(依存関係):

  <project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>parent_group</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>
  </parent>
  <artifactId>B</artifactId>
  <packaging>jar</packaging>
  <name>B</name>

プロジェクトでmvn clean installを少なくとも1回実行して、ローカルリポジトリ内に依存関係をインストールしましたか?

49
Andrew McKee

Mavenリアクターはそのように奇妙で、特定のタスクのためだけにモジュールを保持します。 1つのサブプロジェクトに対してのみ何かを行うビルドターゲットを実行する場合、Mavenが最初に依存関係をビルドしても、リアクター内にそれらを保持しません(時々)。

ローカルリポジトリへのインストールは回避策ですが、恐ろしいものであり、可能な場合は避けるべきです。古いビルドの結果になりやすいからです。

少しlessい回避策は、2つのビルドターゲットを結合することです。2番目のビルドターゲットは無害な処理を行いますが、すべてのサブプロジェクトでリアクターへの追加をトリガーします。

例として、必要なタスクを「コンパイル」または「パッケージ」タスクと組み合わせることができます。

mvndependency:treeの実行時にMavenは兄弟モジュールを認識しません

15
tkruse

このエラーは、Mavenがオフラインモードになっていることによって発生する場合もあります。

IntelliJ IDEAで誤ってオフラインモードを有効にしているようです。無効にするには、MavenツールバーのToggle Offline Modeトグルを切り替えます

enter image description here

または、Build, Execution, Deployment > Build Tools > Mavenの下の設定でWork Offlineチェックボックスをオフにします。

enter image description here

0
Marv