リモートリポジトリ上のjarではなく、3rdパーティ製のライブラリなどを参照させたい場合、大雑把には以下の選択肢があります。
本記事では、ローカルファイルシステム上のjarを参照する方法についてごく簡単に紹介します。
解説に使うサンプル(JDK 1.7, Maven 3.0.5, Win7SP1にて動作確認):
https://github.com/msakamoto-sf/javasnack
サンプルではごく簡単なjarファイルをMavenプロジェクト内の専用ディレクトリにインストールします。
まず対象のjarファイルは以下に用意します。作成方法などは同じディレクトリ中にあるREADME.txtを参照してください。
javasnack/subprojects/jar1/testjar1-1.0.jar
続いて、Mavenプロジェクト内に、リポジトリとして参照するためのディレクトリを作成します。以下がサンプルでのディレクトリです:
javasnack/subprojects/subprojects/repo
あとは"-DlocalRepositoryPath"で上記ディレクトリを指定して、"mvn install:install-file"を実行します。"groupId", "artifactId", "version" は後でpom.xmlの依存性設定で使いますので、分かりやすい名前にしておきましょう。
cd javasnack/ mvn install:install-file \ -DlocalRepositoryPath=subprojects/repo \ -DcreateChecksum=true \ -Dpackaging=jar \ -Dfile=subprojects/jar1/testjar1-1.0.jar \ -DgroupId=subprojects \ -DartifactId=testjar1 \ -Dversion=1.0
サンプルでは、面倒臭いのでインストールした状態の"subprojects/repo"をGitリポジトリにUPしてしまってます。
あとはpom.xmlで依存性を追加します。まず<repositories>でローカルリポジトリを定義します。
<repositories> <repository> <id>projectlocalrepo</id> <url>file://${project.basedir}/subprojects/repo</url> </repository> </repositories>
依存性は、"mvn install:install-file" 時に指定したgroupId, artifactId, versionを指定します。
<dependency> <groupId>subprojects</groupId> <artifactId>testjar1</artifactId> <version>1.0</version> </dependency>
なお、試してないのでちょっと自信が無いのですが、"$HOME/.m2/"以下のリポジトリにインストールするには"mvn install:install-file"で"-DlocalRepositoryPath=subprojects/repo"のオプション指定を削除するとそちらにインストール出来るような気がします・・・。
またその場合は、pom.xmlにリポジトリの指定は要らなくなる・・・筈・・・。
以前の記事、 Java/Maven3/tools.jarを使う時のトラブルシュート(<scope>=system, <systemPath>) を参考にしてください。JDKのtools.jarが、外部3rdパーティのjarになるだけの筈です。
ただし"<scope>"をsystemに設定した場合、fatjarやonejar, war, earなどにアーカイブする際、ちゃんとまとめてくれるのかどうか怪しいので、確認が必要になると思います。
参考資料:
なお、Gradleを使うとリポジトリの用意など無しに、もっと簡単に実現出来ます: Groovy/Gradle/ローカルのjarファイルを参照させるには
コメント