1問題とその選択肢
Mavenは非常に用途の広いツールであり、その利用可能な公開リポジトリは他に類を見ません。ただし、 どこにもホストされていない 、またはそれがホストされているリポジトリに依存するのは危険です。
それが起こるとき、いくつかの選択肢があります。
-
弾丸を噛んで本格的な** リポジトリ管理をインストール
ソリューションhttp://www.sonatype.org/nexus/[Nexusなど]** アーティファクトをより評判の良い人にアップロードしてみてください
リポジトリ Mavenプラグインを使用して アーティファクトを ローカルに インストールする
-
Nexus はもちろんより成熟したソリューションですが、 より複雑な** もあります。 Nexusを実行するためのインスタンスのプロビジョニング、Nexus自体のセットアップ、設定および保守は、単一のjarファイルを使用するなどの単純な問題ではやり過ぎるかもしれません。このシナリオ(カスタム成果物のホスティング)が一般的なシナリオである場合は、リポジトリー・マネージャーが非常に役立ちます。
アーティファクトを 公開リポジトリ またはMaven Centralに直接アップロードすることも良い解決策ですが、通常http://maven.apache.org/guides/mini/guide-central-repository-upload.html[a]。さらに、ライブラリはMaven対応ではないため、プロセスがはるかに困難になるため、今すぐアーティファクトを使用できるようにするための現実的なソリューションではありません。
この場合、ソース管理にアーティファクトを追加し、Mavenプラグインを使用するという3番目の選択肢は残ります。ビルドプロセスで必要になる前にローカルにインストールしてください。これは、最も簡単で信頼性の高い方法です。
2 maven-install-plugin を使ってローカルjarをインストールする
アーティファクトをローカルリポジトリにインストールするのに必要な完全な設定から始めましょう。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<groupId>org.somegroup</groupId>
<artifactId>someartifact</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<file>${basedir}/dependencies/someartifact-1.0.jar</file>
<generatePom>true</generatePom>
</configuration>
<executions>
<execution>
<id>install-jar-lib</id>
<goals>
<goal>install-file</goal>
</goals>
<phase>validate</phase>
</execution>
</executions>
</plugin>
それでは、この構成の詳細を分析して分析しましょう。
2.1. アーティファクト情報
案件情報は、 <configuration> 要素の一部として定義されます。実際の構文は、依存関係の宣言( groupId 、 artifactId 、および version 要素)と非常によく似ています。
設定の次の部分では、アーティファクトの packaging を定義する必要があります - これは jar として指定されています。
次に、インストールする実際のjarファイルの location を指定する必要があります。これは絶対ファイルパスでも相対パスでもかまいません。 https://cwiki.apache.org/confluence/display/MAVENを使用してください。/MavenプロパティガイドMaven で利用可能な[プロパティ]。この場合、 $ \ {basedir} プロパティはプロジェクトのルート、つまり pom.xml ファイルが存在する場所を表します。つまり、 someartifact-1.0.jar ファイルは、ルートの下の /dependencies/ ディレクトリに配置する必要があります。
最後に、他にも設定可能なhttp://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html[オプションの詳細]がいくつかあります。
2.2. 実行
-
install-file goal の実行は、標準のMaven build lifecycle の validate phase ** にバインドされています。そのため、コンパイルを試みる前に - 検証フェーズを明示的に実行する必要があります。
mvn validate
このステップの後、標準のコンパイルはうまくいきます。
mvn clean install
コンパイルフェーズが実行されると、Maven Centralから取得された他のアーティファクトと同様に、 someartifact-1.0.jar がローカルリポジトリに正しくインストールされます。
2.3. pom を生成することと pom を供給すること
成果物に pom.xml ファイルを提供する必要があるかどうかは、主に成果物自体の ランタイム依存関係 によって異なります。簡単に言うと、アーティファクトが他のjarファイルに実行時依存関係を持っている場合、これらのjarファイルは実行時にもクラスパス上に存在する必要があります。実行時に依存関係がない可能性が高いため、問題にならない単純な成果物を使用します(依存関係グラフのリーフ)。
install-file の目標の generatePom オプションは、これらの種類の成果物で十分なはずです。
<generatePom>true</generatePom>
しかし、成果物がより複雑で、重要な 依存関係 を持っている場合は、これらの依存関係がまだクラスパスに存在しない場合は、それらを追加する必要があります。そのための1つの方法は、これらの新しい依存関係をプロジェクトのpomファイルに手動で定義することです。より良い解決策は、インストールされた成果物と一緒にカスタム pom.xml ファイルを提供することです。
<generatePom>false</generatePom>
<pomFile>${basedir}/dependencies/someartifact-1.0.pom</pomFile>
これにより、Mavenは、このカスタム pom.xml で定義されたアーティファクトのすべての依存関係を、プロジェクトのメインpomファイルで手動で定義しなくても解決できるようになります。
3結論
この記事では、Mavenプロジェクト内のどこにもホストされていないjarファイルを maven-install-plugin を使用してローカルにインストールする方法について説明します。