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

- 環境
    - 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...]したら怒られた

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

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

```bash
$ 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/f2037f06-0199-9984-4019-a0ff583cfe40.png)
pom.xmlで`jotm`を確認して[Maven Repository: Search/Browse/Explore](https://mvnrepository.com/)で検索するとちゃんとある・・・

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/acc26076-73dd-5075-e1e3-5e6a807bb40b.png)

`jotm`のpomを確認してみる

```bash
$ 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](https://mvnrepository.com/)で検索すると
「あるやん！」と思ったのもつかの間、[jar]リンクを押下したら`404 Not Found`・・・うけるぅ
エラーになったjarの両方が同じ状態だった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/514dbb15-9a6d-2c06-ecd5-9cf4f51e7164.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/66864301-0672-fbac-ec0b-cf85a3dc0ad3.png)


## 対応方法1 : pom.xml定義されているjarのバージョンを変える
pom.xml定義されている`jotm`を[Maven Repository: Search/Browse/Explore](https://mvnrepository.com/)で再検索すると
`Note: This artifact was moved to:org.ow2.jotm » jotm`となっていた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/17aa6a48-74f9-7db0-acce-6dbb0eb60f94.png)

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

```xml:変更後の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](https://www.greptips.com/posts/1094/)
`jotm`の「バージョンは変えられない！」という場合の方法

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

```bash
# 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
```