LoginSignup
5
2

More than 3 years have passed since last update.

pom.xmlに定義されていないjarでMissing artifactとなった時の対応方法

Last updated at Posted at 2020-04-16
  • 環境
    • CentOS Linux release 7.6.1810 (Core)
    • Apache Maven 3.2.5
    • (Maven用)Java1.8.0_242 (プロジェクト用)Java1.6.0_41

事象 : Eclipseでプロジェクトを選択 > [Maven] > [Update Project...]したら怒られた

[Problems]タブのエラー
Missing artifact javax.resource:connector:jar:1.0
Missing artifact javax.transaction:jta:jar:1.0.1B

プロジェクトのpom.xmlをグレップしてもそんな定義はない・・・はて?

$ grep -rn connector --include=pom.xml
$ grep -rn jta --include=pom.xml
$

原因 : pom.xml定義されているjarの依存関係にあるjarがないから

試行錯誤

Eclipseでプロジェクトのpom.xmlを開く > [Dependency Hierarchy]タブを開く > [Filter]でjarの名前を検索する
「見つけた!」jotmに依存関係のあるjarだった・・・

image.png
pom.xmlでjotmを確認してMaven Repository: Search/Browse/Exploreで検索するとちゃんとある・・・

pom.xml
...省略...
<dependency>
  <groupId>jotm</groupId>
  <artifactId>jotm</artifactId>
  <version>2.0.10</version>
  <scope>provided</scope>
  <exclusions>
...省略...

image.png

jotmのpomを確認してみる

$ cat ~/.m2/repository/jotm/jotm/2.0.10/jotm-2.0.10.pom
...省略...
    <dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>jta</artifactId>
      <version>1.0.1B</version>
    </dependency>
...省略...
    <dependency>
      <groupId>javax.resource</groupId>
      <artifactId>connector</artifactId>
      <version>1.0</version>
    </dependency>

Maven Repository: Search/Browse/Exploreで検索すると
「あるやん!」と思ったのもつかの間、[jar]リンクを押下したら404 Not Found・・・うけるぅ
エラーになったjarの両方が同じ状態だった。

image.png
image.png

対応方法1 : pom.xml定義されているjarのバージョンを変える

pom.xml定義されているjotmMaven Repository: Search/Browse/Exploreで再検索すると
Note: This artifact was moved to:org.ow2.jotm » jotmとなっていた。
image.png

リンクをたどってorg.ow2.jotm » jotmでバージョンが一番古い2.1.1を使うことにした。

変更後のpom.xml
...省略...
    <dependency>
      <groupId>org.ow2.jotm</groupId>
      <artifactId>jotm</artifactId>
      <version>2.1.1</version>
      <type>pom</type>
      <exclusions>
...省略...

対応方法2 : jarの依存関係にあるjarをMavenでインストールする

参考 : Mavenリポジトリにないライブラリをpom.xmlで指定する方法 - grep Tips
jotmの「バージョンは変えられない!」という場合の方法

  1. Missing artifactとなったjarを取得する
    • 誰かの環境にある~/.m2/repositoryディレクトリとかインターネットのどこかから頑張って取得する
  2. なくさないようにプロジェクトのWEB-INF/lib/ディレクトリあたりにjarを格納する
  3. Mavenでインストールする
    • オプションの -DgroupId -DartifactId -Dversionjotmのpomで確認する
  4. Eclipseで[Maven] > [Update Project...]する
# jarの場所に移動して
$ cd path/to/WEB-INF/lib/

# Mavenでjarをインストールする
$ mvn install:install-file -Dfile=jta-1.0.1B.jar -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -Dpackaging=jar
[INFO] Scanning for projects...
...省略...

$ mvn install:install-file -Dfile=connector-1.0.jar -DgroupId=javax.resource -DartifactId=connector -Dversion=1.0 -Dpackaging=jar
[INFO] Scanning for projects...
...省略...

# そうするとjarと共にmaven-metadata-local.xmlが作成される
$ find ~/.m2/repository/javax/ -iname *.xml
/home/ponsuke/.m2/repository/javax/resource/connector/maven-metadata-local.xml
/home/ponsuke/.m2/repository/javax/transaction/jta/maven-metadata-local.xml
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2