1. 問題とオプション

Mavenは非常に用途の広いツールであり、利用可能なパブリックリポジトリは他に類を見ません。 ただし、どこにもホストされていないアーティファクトが常に存在するか、ホストされているリポジトリが必要なときに起動しない可能性があるため、依存するリスクがあります。

その場合、いくつかの選択肢があります。

  • 弾丸を噛み、Nexusなどの本格的なリポジトリ管理ソリューションをインストールします
  • アーティファクトをより評判の良い公開リポジトリの1つにアップロードしてみてください
  • Mavenプラグインを使用してアーティファクトローカルをインストールします

Nexus はもちろんより成熟したソリューションですが、より複雑なでもあります。 Nexusを実行するためのインスタンスのプロビジョニング、Nexus自体のセットアップ、インスタンスの構成と保守は、単一のjarを使用するなどの単純な問題ではやり過ぎかもしれません。 ただし、このシナリオ(カスタムアーティファクトのホスティング)が一般的なシナリオである場合、リポジトリマネージャーは非常に理にかなっています。

アーティファクトをパブリックリポジトリまたはMavenCentralに直接アップロードすることも良い解決策ですが、通常は長いものです。 さらに、ライブラリでMavenがまったく有効になっていない可能性があります。これにより、プロセスがはるかに困難になるため、アーティファクトを今すぐ使用できるようにするための現実的なソリューションではありません。

これにより、3番目のオプション(ソース管理にアーティファクトを追加してmavenプラグインを使用する)が残ります。この場合、ビルドプロセスで必要になる前にmaven-install-pluginからローカルにインストールします 。 これは、利用可能な最も簡単で信頼性の高いオプションです。

2. m aven-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. アーティファクト情報

アーティファクト情報は、 エレメント。 実際の構文は、依存関係の宣言と非常によく似ています– groupId ArtifactId 、およびversion要素。

構成の次の部分では、アーティファクトの packages を定義する必要があります。これは、jarとして指定されます。

次に、インストールする実際のjarファイルの location を指定する必要があります。これは、Maven で使用可能なプロパティを使用して、絶対ファイルパスまたは相対パスにすることができます。 この場合、 $ {basedir} プロパティは、プロジェクトのルート、つまりpom.xmlファイルが存在する場所を表します。 これは、someartifact-1.0.jarファイルをルートの下の/dependencies/ディレクトリに配置する必要があることを意味します。

最後に、他にもいくつかのオプションの詳細を構成できます。

2.2. 処刑

インストールファイルゴールの実行は、標準のMavenビルドライフサイクルからの検証フェーズにバインドされます。 そのため、コンパイルを試みる前に、検証フェーズを明示的に実行する必要があります。

mvn validate

この手順の後、標準のコンパイルが機能します。

mvn clean install

コンパイルフェーズが実行されると、Maven Central自体から取得された可能性のある他のアーティファクトと同様に、someartifact-1.0.jarがローカルリポジトリに正しくインストールされます。

2.3. POM[X20X]の生成と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ファイルで手動で定義しなくても、このカスタムpom.xmlで定義されたアーティファクトのすべての依存関係を解決できます。

3. 結論

この記事では、 maven-install-plugin を使用してローカルにインストールすることにより、Mavenプロジェクト内のどこにもホストされていないjarを使用する方法について説明します。