2017-12-21 7 views
0

の取り扱い:Mavenの - 私は順番に他の依存関係を引く必要があります私のWebアプリケーションPOM、中に次のMavenの依存関係を持っているスナップショット依存関係に

<dependency> 
    <groupId>com.my.libraries</groupId> 
    <artifactId>my-libs</artifactId> 
    <type>pom</type> 
    <version>1.6-SNAPSHOT</version> 
</dependency> 

NOTE私は以前の古いの間に引かmy-libsアーティファクトのために1.5をリリースしていましたビルド。しかし、後でバージョンを1.6-SNAPSHOTにアップグレードしました。 mathlibrary1.5リリースにアーティファクトが存在しませんでした。

私はいくつかのjarが1.5に存在していなかった1.6-SNAPSHOT verson my-libsアーティファクトの一部として存在することを期待しています - POMは以下の通りです:

<!-- all the usual POM descriptionsm for my-libs --> 

<groupId>com.my.libraries</groupId> 
<artifactId>my-libs</artifactId> 
<version>1.6-SNAPSHOT</version> 
<packaging>pom</packaging> 

<!-- continues... all normal stuff, nothing to see here :'/ --> 
     <dependency> 
      <groupId>com.my</groupId> 
      <artifactId>mathlibrary</artifactId> 
      <version>1.0</version> 
     </dependency> 
<!-- continues --> 

私は私がしなければmathlibrary jarファイルが引っ張られることが期待さ私のプロジェクトではmvn packageです。しかし、私のWebアプリケーションのlibフォルダを見て、そこにjarファイルはありませんでした。 .m2ディレクトリの内容を確認したところ、バージョン1.5のみが存在するように見えるので、1.6スナップショットは自動的にインストールされませんでした。ここから、私はリリース版が前に引っ張られれば、次のスナップショットを引っ張らないと思っていますか?

my-libsアーチファクトをmvn clean installで手動でインストールした後、Webアプリケーションの次のビルドでは、jarsを正しく引き出しました。これは、私のpackageフェーズがSNAPSHOT依存関係を自動的に引き出さないように定義されていることを意味しますか?またはこれは予期したものです(リリースバージョンでない場合は手動でinstallを実行する必要があります)。

答えて

-2

mvnのインストール時に、Mavenはリポジトリ(グローバルまたはローカル)にしか入っていません。 Maven Installを使用すると、MavenはすべてのPOMライブラリがプロジェクトに存在するかどうかをチェックし、存在しないものがある場合はリポジトリからプロジェクトにダウンロードします。 Mavenパッケージを実行すると、プロジェクトに存在するライブラリのみがパッケージ化されます。

+0

私はクリーンコンパイルパッケージを行う場合は、レポからダウンロードする必要がありますか? – ha9u63ar

+1

Mavenは 'mvn package'を使っても依存関係をダウンロードしますが、ビルドの結果をローカルリポジトリに入れません。 –

1

mvn packageを使用すると、すべてのSNAPSHOT依存関係がローカルリポジトリからプルされます(アーティファクトがリモートになる場合は、24時間ごとにリモートリポジトリからローカルリポジトリに更新されます)。

私は本当にあなたが(チェックインにデプロイ/インストールCIサーバを除く)アーティファクトをインストールする自動的な方法がないため、「は手動my-libsをインストール」の意味を理解していません。アーティファクト(my-libsなど)を使用する場合は、ビルドしてローカルリポジトリに配置する必要があります。mvn installを使用して行います。

+0

私のアプリケーションプロジェクトで 'my-libs'の依存関係を追加すると、' my-libs'に依存関係として追加されたので、 'mathlibrary'も自動的にダウンロードされます。しかし、 'mvn package'フェーズを実行したときには起こりませんでした。私がWebアプリケーション用のクリーンなパッケージを作成しているときにこれをMUSTにしたいのであれば、どうすればよいですか? – ha9u63ar

+0

my-libsとmy-libsの依存関係がmathlibraryに依存する場合は、mathlibraryも表示されます。これを確認するには 'dependency:tree'を見てください。全ての依存関係が ''に、 ''には_not_でないこと、そしてすべてのバージョンが正しいことを確認してください。 –

+0

「my-libs」の以前のリリース情報で質問を更新しました。おそらく私の混乱はあなたにもっと意味をなさないでしょう。 – ha9u63ar

0

pom.xmlで使用しているpackagingと、packgeフェーズに合わせた実行プラグインがあるかどうかによって、回答が異なります。依存関係が処理されると、Mavenは通常それらを解決します。つまり、対応するjarファイルはローカルリポジトリにあります。 あなたのtargetフォルダ内のjarファイルを取得することは、プラグインの作業の結果です(このようなプラグインは、mojoをprepare-packageまたはpackageフェーズ(通常)で実行することになるので、 )または例えば "assembly"プラグイン(あなたのために依存関係を再構築することができます) 依存性アーチファクトを解決のために利用できるようにするには、deployをリモートリポジトリに、またはinstallをローカルリポジトリに指定する必要があります。

+0

私の質問が更新されました。 ? – ha9u63ar

+0

'pom'パッケージは依存関係を持っていません(パッケージ、ライフサイクルフェーズ、プラグイン間のマッピングについてはhttps://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.htmlを参照してください)。あなたの質問から、答えは "いいえ、パッケージ段階では自動的に依存関係が生成されません"と結論づけることができます。しかし、 'build'セクションのpomファイルには、' package'フェーズに合わせて実行する「依存関係」プラグインのようなものがあります。 – scrutari

+0

@scrutariこれは間違っています。 pom型の依存関係を参照することができ、pomの内容は推移的な依存関係になります。 –

0

この上@JFMeier答えを読んだ後、私は次のようでした:

1)私の.m2ディレクトリからのすべてのリリース/スナップショットを削除しました。

2))my-libs

3用1.5リリースを使用するように私のWebアプリケーションのPOMを変更し、ビルドをキックオフ。ビルドが終了すると

4)は、私がmylibraries jarファイルが

5)を繰り返し手順2-4 libにTomcatのWEB-INF \で私の最後のWebアプリケーションディレクトリに展開されていないことを確認する - が、バージョンを変更しましたmy-libsの場合は1.6-SNAPSHOTになります。

6)今、私は期待される結果を見ることができます。

+0

それは知っている偉大な作品です。 –

関連する問題