Mavenの解決方法 アーティファクト記述子の読み込みに失敗しました
2022-02-14 19:13:55
はじめに
この記事では、Maven のマルチモジュール・プロジェクトにおいて、あるモジュールが別のモジュールを参照している場合に発生する "Failed to read artifact descriptor" 問題を解決する方法についてまとめています。
複数のサブモジュールプロジェクトの作成
この2日間、Maven Authority Guideの6章を参考に、マルチモジュールのプロジェクトを作ろうとしているのですが、親モジュールの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>org.sonatype.mavenbook.ch06</groupId>
<artifactId>simple-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>simple-parent</name>
<url>http://maven.apache.org</url>
<modules>
<module>simple-weather</module>
<module>simple-webapp</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
simple-weather サブモジュール用の 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>
<parent>
<groupId>org.sonatype.mavenbook.ch06</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>simple-weather</artifactId>
<packaging>jar</packaging>
<name>simple-weather</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>simple-weather</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<! -- <skip>true</skip -->
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>jar-with-dependencies</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
simple-webappサブモジュールです。
<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>org.sonatype.mavenbook.ch06</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>simple-webapp</artifactId>
<packaging>war</packaging>
<name>simple-webapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_3.0_spec</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonatype.mavenbook.ch06</groupId>
<artifactId>simple-weather</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<finalName>simple-webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
コンパイル、インストール
まず、simple-weather サブモジュールプロジェクトをコンパイルし、インストールします: simple-weather サブプロジェクトディレクトリに移動します。
mvn compile
mvn install
simple-webappサブモジュールのプロジェクトディレクトリに移動して、mvn compileでコンパイルすると、以下のエラーが発生します。
[ERROR] Failed to execute goal on project simple-webapp: Could not resolve dependencies for project
org.sonatype.mavenbook.ch06:simple-webapp:war:1.0-SNAPSHOT: Failed to collect dependencies at
org.sonatype.mavenbook.ch06:simple-weather:jar:1.0-SNAPSHOT: Failed to read artifact descriptor for
org.sonatype.mavenbook.ch06:simple-weather:jar:1.0-SNAPSHOT: Could not find artifact
org.sonatype.mavenbook.ch06:simple-parent:pom:1.0-SNAPSHOT -> [Help 1]
この問題に対して、まずPOMファイルの設定を確認したところ、特に変わった情報はありませんでした。ローカルの.m2/repositoryのインストールを確認しましたが、問題ありませんでした。再度、simple-weather サブモジュールを mvn -U clean install でクリアした後にインストールしましたが、問題は解消されませんでした。結局、stackoverflowで同じような問題を見つけ、誰かが出した以下の解決策を見つけ、ようやく私の問題を解決することができました。
この問題は、親 pom を参照するいくつかの子プロジェクトがあり、親 pom ディレクトリからインストール(親ディレクトリから mvn install を実行)していない場合に発生する可能性があります。子プロジェクトの1つは兄弟プロジェクトに依存しており、兄弟プロジェクトのpomを読みに行くとき、少なくとも一度は親pomディレクトリからインストールされていない限り、質問にあるようなエラーで失敗する可能性があります。
大雑把に訳すと、この問題は、親プロジェクトの POM を参照する子プロジェクトがありながら、親 POM ディレクトリにインストール操作を行わない場合に発生します。子モジュールが兄弟の子モジュールに依存している場合、少なくとも一度は親プロジェクトの POM ディレクトリにインストールを実行する必要があります。
参考文献
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例