MavenリポジトリにないローカルjarをPom.xmlに書く方法
MavenセントラリポジトリにないローカルjarファイルをPom.xmlに書く方法のです。
以前、「Mavenプロジェクトにローカルjarファイルを追加する方法」で紹介した system スコープを使った方法では、mvn install するとWARNINGが発生して jar ファイルが含まれないということがわかりました。
具体的には、「Spring BootでORACLEデータベースに接続する方法」で紹介した ojdbc7.jar が mvn install で war ファイルに含まれないといった事象がおこりました。そのため war ファイルを Tomcat にデプロイしたら Web アプリが起動しないということになりました。
今回は warファイルにローカルjarを含める方法 をまとめておきます。
目次
Pom.xmlの編集
ライブラリを指定します。この時、scope と systemPath は指定しません。
version は 12.1.0 と ORACLE の利用バージョンを適用していますが、なんでもいいです。
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0</version>
</dependency>
次に、maven-install-plugin を設定します。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>install-external</id>
<phase>clean</phase>
<configuration>
<file>${basedir}/lib/ojdbc7.jar</file>
<repositoryLayout>default</repositoryLayout>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0</version>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
mvn clean もしくは、Eclipse の[実行(Run As)]-[Maven Clean]を実行すれば、maven-install-plugin が動作します。Eclipseを使ってるので、ローカルリポジトリに ojdbc7.jar 関連のリポジトリが出来上がりました。
コマンドの場合は、下記で OK かと。
mvn install:install-file -Dfile=ojdbc7.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0 -Dpackaging=jar
- -Dfile: Jarファイルへのパス
- -DgroupId: グループID
- -DartifactId: アーティファクトID
- -Dversion: バージョン
- -Dpackaging: jar
mvn install もしくは、Eclipse の[実行(Run As)]-[Maven Install]を実行して war ファイルを確認しましょう。
おおお、ちゃんと入っていますね^^
参考サイト
Maven and adding JARs to system scope - Stack Overflow
まとめ
出来上がった war ファイルを Tomcat にデプロイして動作確認したところ、正しく動作しました。ふう、一件落着ですね^^
追記:Fail to read artifact descriptor forのエラーが出た
しばらく何事もなく使っていたのですが、ある時「Fail to read artifact descriptor for ローカルjar」のエラーが出て、どうにもエラーが消えなくなって困ってしまいました。どうやら、m2リポジトリ内で整合性が取れなくなっていることから発生しているようです。いくつか対象方法があるので追記しておきます。
pom.lastupdatedを削除
m2リポジトリの該当エラーの場所へ移動して「pom.lastUpdated」を削除します。今回の例でいくと「ojdbc7-12.1.0.pom.lastUpdated」ですね。これを削除したら「mvn clean」を実行します。すると「pom.lastUpdated」を新たに作ってくれてエラーが消えます。
フォルダごと削除
「pom.lastUpdated」を削除しても解消されない場合、フォルダごと削除する(名前変更で退避がおすすめ)ことで解消する場合があります。今回の例でいえば「m2/repository/com/oracle/ojdbc7/12.1.0」ですね。これを削除したら「mvn clean」を実行します。すると「${basedir}/lib/ojdbc7.jar」からコピーを作ってローカル管理のjarやぞとしてくれるのでエラーが消えます。
以上2件です。エラーが出て困っている方は試してみてください。
おつかれさまでした。