web-dev-qa-db-ja.com

既存のjarファイルからMavenアーティファクトを作成する最良の方法

私はいくつかのプロジェクトを熟考しています。

これらのプロジェクトはすべていくつかのライブラリに依存しており、それらのほとんどはMavenリポジトリで利用できます。他のライブラリについては、Mavenアーティファクトを作成したいので、依存関係として使用できます。問題は、これらのライブラリのjarファイルしかないことです。

既存のjarファイルからアーティファクトを作成する最良の方法は何ですか?

32
3wh

remoteリポジトリを使用していない場合(これは個人開発の一般的な状況です)、単にinstallinstall:install-file mojoを使用して、localリポジトリ内のこれらのアーティファクト:

mvn install:install-file 
  -Dfile=<path-to-file> 
  -DgroupId=<group-id> 
  -DartifactId=<artifact-id> 
  -Dversion=<version> 
  -Dpackaging=<packaging> 
  -DgeneratePom=true

Where: <path-to-file>  the path to the file to load
       <group-id>      the group that the file should be registered under
       <artifact-id>   the artifact name for the file
       <version>       the version of the file
       <packaging>     the packaging of the file e.g. jar

しかし、明らかに、これはビルドを移植不可能にします(ただし、これは問題ではないかもしれません)。移植性を犠牲にしないために、リモートリポジトリでアーティファクトを利用できるようにする必要があります。企業のコンテキストでは、これに対処する一般的な方法は、エンタープライズリポジトリをインストールすることです(その場合、実際にアーティファクトをdeployにインストールします)。

更新:アーティファクトがローカルリポジトリにインストールされたら、他の依存関係と同様に、pomで<dependency>要素を宣言するだけです。例:

<dependency>
  <groupId>aGroupId</groupId>
  <artifactId>aArtifactId</artifactId>
  <version>1.0.12a</version>
  <packaging>jar</packaging>
</dependency>
29
Pascal Thivent

Maven Deploy Plugin を使用して、JARファイル(およびオプションでPOMファイルですが、デフォルトで作成されます)をMavenリポジトリにアップロードできます。

2
danben

プロジェクト内のリポジトリにないjarに「システム」依存関係を作成することもできます。例えば、

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>MySpecialLib</artifactId>
        <version>1.2</version>
        <scope>system</scope>
        <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath>
    </dependency>
1
Kirby

danbenが言った のように、これらのjarをリポジトリーにデプロイする必要があります。しかし、あなたの質問から、グローバルmaven以外のリポジトリがないことを理解しているようです。

Nexus 、または Artifactory を使用できます。

1
Valentin Rocher

私はあなたの問題を知っています。 jarをmavenizeするのは面倒なことがあります(特に、さらに推移的な依存関係があり、pom.xmlで定義する必要がある場合)。

これらのライブラリーが本当にmaven depsとして存在しないかどうかを確認しましたか?通常の容疑者を見てください:

Nexus jarアップロードダイアログを使用してpom.xmlファイルを作成したい場合があります。

0
manuel aldana