- 環境
- 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...]したら怒られた
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だった・・・
pom.xmlでjotm
を確認してMaven Repository: Search/Browse/Exploreで検索するとちゃんとある・・・
...省略...
<dependency>
<groupId>jotm</groupId>
<artifactId>jotm</artifactId>
<version>2.0.10</version>
<scope>provided</scope>
<exclusions>
...省略...
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の両方が同じ状態だった。
対応方法1 : pom.xml定義されているjarのバージョンを変える
pom.xml定義されているjotm
をMaven Repository: Search/Browse/Exploreで再検索すると
Note: This artifact was moved to:org.ow2.jotm » jotm
となっていた。
リンクをたどってorg.ow2.jotm » jotm
でバージョンが一番古い2.1.1
を使うことにした。
...省略...
<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
の「バージョンは変えられない!」という場合の方法
-
Missing artifact
となったjarを取得する- 誰かの環境にある
~/.m2/repository
ディレクトリとかインターネットのどこかから頑張って取得する
- 誰かの環境にある
- なくさないようにプロジェクトの
WEB-INF/lib/
ディレクトリあたりにjarを格納する - Mavenでインストールする
- オプションの
-DgroupId
-DartifactId
-Dversion
はjotm
のpomで確認する
- オプションの
- 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