web-dev-qa-db-ja.com

Maven:担当者が使用できないjarをJ2EEプロジェクトに含める方法

私のJ2EEプロジェクトには、Mavenリポジトリでは使用できない依存関係がいくつかあります。それらは独自のライブラリであるためです。これらのライブラリは実行時に利用可能である必要があるため、target /.../ WEB-INF/libにコピーする必要があります...

現在、私はそれらをPOMのシステム依存関係としてリストしていますが、この方法では、コンパイル中にターゲットビルドにコピーされないという問題があります。また、この方法はあまりエレガントではありません。

それで、それらをMavenに統合する最良の方法はどれですか?

注:独自のMavenリポジトリを作成したくありません。

96
samson

あなたがあなた自身のリポジトリを設定したくないと言ったように、おそらくこれは助けになるでしょう。

Maven-install-pluginの install-file goal を使用して、ローカルリポジトリにファイルをインストールできます。各ファイルのMaven呼び出しを使用してスクリプトを作成し、jarと一緒に保持する場合、ユーザー(およびアクセスできる他のユーザー)は、jar(および関連するpomファイル)をローカルリポジトリに簡単にインストールできます。

例えば:

mvn install:install-file -Dfile=/usr/jars/foo.jar -DpomFile=/usr/jars/foo.pom
mvn install:install-file -Dfile=/usr/jars/bar.jar -DpomFile=/usr/jars/bar.pom

あるいは単に

mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=com.Oracle -DartifactId=ojdbc14 -Dversion=10.2.0 -Dpackaging=jar

その後、プロジェクトで通常どおりに依存関係を参照できます。

ただし、最善の策は内部リモートリポジトリをセットアップすることです。 Nexus 自分を使用することをお勧めします。必要に応じて開発ボックスで実行でき、オーバーヘッドは最小限です。

53
Rich Seller

この問題の迅速な解決策が必要な場合:

<dependency>
  <groupId>LIB_NAME</groupId>
  <artifactId>LIB_NAME</artifactId>
  <version>1.0.0</version>
  <scope>system</scope>
  <systemPath>${basedir}/WebContent/WEB-INF/lib/YOUR_LIB.jar</systemPath>
</dependency>

ライブラリに一意のgroupIDとアーティファクト名を付け、ファイルシステム内の場所をポイントするだけです。準備できた。

もちろん、これはご使用のマシンでのみ機能し、libsへのパスを変更しない場合にのみ有効な、汚いクイックフィックスです。しかし、いくつかのテストを実行して実行するために必要なのはそれだけです。

編集:質問をもう一度やり直して、ユーザーが既に私のソリューションを一時的な修正として使用していることに気付きました。この質問に答える他の人のためのクイックヘルプとして私の答えを残します。誰もこれに同意しない場合は、私にコメントを残してください。 :)

187
Ric Jafe

プロジェクトの下にリポジトリフォルダーを作成します。とりましょう

${project.basedir}/src/main/resources/repo

次に、カスタムjarをこのリポジトリにインストールします。

mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ 
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]

最後に、次のリポジトリと依存関係の定義をプロジェクトpom.xmlに追加します。

<repositories>
    <repository>
        <id>project-repo</id>
        <url>file://${project.basedir}/src/main/resources/repo</url>
    </repository>
</repositories>

<dependencies>    
    <dependency>
        <groupId>[GROUP]</groupId>
        <artifactId>[ARTIFACT]</artifactId>
        <version>[VERS]</version>
    </dependency>
</dependencies>
23
mostar

そのようなライブラリをホストするローカルリポジトリを設定する必要があります。まさにそれを行う多くのプロジェクトがあります。たとえば、 Artifactory です。

8

Jenkinsビルドを使用している場合、どのソリューションも機能しません!! Jenkinsビルドサーバー内でpomを実行すると、Jenkins run pomはこれらのファイルをエンタープライズリポジトリからダウンロードしようとするため、これらのソリューションは失敗します。

Src/main/resources/libの下にjarをコピーします(libフォルダーを作成します)。これらはプロジェクトの一部となり、展開サーバーに至るまで続きます。デプロイメントサーバーで、スタートアップスクリプトのクラスパスにsrc/main/resources/lib/*が含まれていることを確認します。ビオラ。

3
Apurva Singh

私がよく理解していれば、コンパイル段階で依存関係をエクスポートして、必要な各ライブラリを手動で取得する必要がない場合は、mojo copy-dependencies を使用できます。

それがあなたの場合に役立つことを願っています( examples

2
Erik Clairiot

プライベートなローカルリポジトリ(ホームディレクトリの下の.m2/repositoryなど)にインストールできます: 詳細はこちら

2
dfa

システムの依存関係として引き続き使用し、Maven依存関係プラグインを使用して、それらをtarget /.../ WEB-INF/libにコピーします。

http://maven.Apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html

1
Corehpf

単独でインストールしてもうまくいきませんでした。

mvn deploy:deploy-file -Durl=file:///home/me/project/lib/ \
  -Dfile=target/jzmq-2.1.3-SNAPSHOT.jar -DgroupId=org.zeromq \  
  -DartifactId=zeromq -Dpackaging=jar -Dversion=2.1.3
1

@Ric Jafeのソリューションが私にとって有効でした。

これはまさに私が探していたものです。研究テストコードのためにそれをプッシュする方法。派手なものは何もありません。ええ、私はそれが彼らが皆言うことであることを知っています:)様々なmavenプラグインソリューションは私の目的にとってはやり過ぎのようです。私は、pomファイルでサードパーティのライブラリとして提供されたいくつかのjarファイルを持っています。すばやくコンパイル/実行したい。私がpythonに簡単に適応させたこのソリューションは、私にとって驚異的な働きをしました。ポンポンに切り貼りします。このタスクのPython/PerlコードはこのQ&Aにあります。 jarをインストールせずにMaven 2ビルドクラスパスに追加できますか?

def AddJars(jarList):
  s1 = ''
  for elem in jarList:
   s1+= """
     <dependency>
        <groupId>local.dummy</groupId>
        <artifactId>%s</artifactId>
        <version>0.0.1</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/manual_jars/%s</systemPath>
     </dependency>\n"""%(elem, elem)
  return s1
1
Paul

Mavenプロジェクトに外部jarを追加する素敵な方法を示すmaven-external-dependency-pluginを使用してみてください。

https://code.google.com/p/maven-external-dependency-plugin/

0
Joarder Kamal