Table of Contents [expand]
最終更新日 2019年12月16日(月)
一部の Java アプリケーションには、パブリックまたはプライベートの Maven リポジトリで入手できない依存関係があります (後者はカスタムの settings.xml ファイル)を使用してアクセスできます)。このガイドでは、これらの管理されていないライブラリをアプリケーションプロジェクトに追加する方法と、追加したライブラリの検索方法を Maven に指示する方法について説明します。
groupId、artifactId、version パラメータの選択
どのパブリック Maven リポジトリにもないライブラリ mylib.jar にアプリが依存しているとします。まず、ライブラリの groupId、artifactId、および version を定義する必要があります。これらのパラメータは開発者にはあまり意味がありませんが、Maven ではすべての依存関係にこの情報が必要です。
以下の値を使用します。
- groupId: com.example
- artifactId: mylib
- version: 1.0 (または、ライブラリのバージョン番号がある場合はそのバージョン)
ローカルの Maven リポジトリディレクトリを作成する
プロジェクトのルートは当初、次のような内容です。
yourproject
+- pom.xml
+- src
repo という名前の標準 Maven リポジトリディレクトリを追加し、group は com.example、version は 1.0 にします。
yourproject
+- pom.xml
+- src
+- repo
アーティファクトをリポジトリにデプロイする
Maven では、次のように mvn deploy:deploy-file ゴールを使用してアーティファクトをデプロイできます。
mvn deploy:deploy-file -Durl=file:///path/to/yourproject/repo/ -Dfile=mylib-1.0.jar -DgroupId=com.example -DartifactId=mylib -Dpackaging=jar -Dversion=1.0
いくつかの Maven メタデータと JAR ファイルがプロジェクトに含まれるようになります。
yourproject
+- pom.xml
+- src
+- repo
   +- com
      +- example
         +- mylib
            +- maven-metadata.xml
            +- ...
            +- 1.0
               +- mylib-1.0.jar
               +- mylib-1.0.pom
               +- ...
Pom ファイルを更新する
ここで、pom.xml を編集して、このリポジトリを <repositories/> 要素に追加します。
<repositories/> 要素がない場合、作成が必要な場合があります。
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>
サブモジュールからリポジトリを使用する場合、<url> 要素の ${project.parent.baseDir} プロパティを置き換える必要があります。
これで、この jar を通常のように依存関係として追加できます。
<dependency>
    <groupId>com.example</groupId>
    <artifactId>mylib</artifactId>
    <version>1.0</version>
</dependency>
Git にコミットする
必ず、ローカルの repo フォルダーを Git に追加およびコミットしてください。
$ git add repo
$ git commit -m 'adding project local maven repo, with mylib.jar 1.0'
次にプロジェクトをプッシュしたときに、依存関係が解決され、アプリケーションは問題なくビルドされます。ローカルの repo フォルダーと jar はアプリケーションコードによってチェックインされるため、アプリに対しては非公開のままになります。