2012-09-20 26 views
44

mavenは、ローカルでビルドされパッケージ化された特定の依存関係が、依存関係を持つ別のプロジェクトをビルドしているときに見つからないことがあることが時折あります。Mavenがローカルのアーティファクトを見つけられません

プロジェクトX上の目標を実行に失敗しました::プロジェクトXの依存関係を解決できませんでした:のようなエラーが私たちを取得[archivaリポジトリ]にYを見つけるの失敗はローカルリポジトリにキャッシュされた、解像度がするまで再試行されることはありません内部の更新間隔が経過したか更新が強制されます - >

ここで、Xはプロジェクトがビルドされており、Yは推定されていないアーティファクトです。ローカルリポジトリを見ると、アーティファクトが存在します。このアーティファクトはArchivaリポジトリにインストールされることはありません。そのため、問題は純粋にローカルリポジトリに基づいています。

私たちはsettings.xml、もちろん "mvn -U"でさまざまなプロファイルを試しました。このアーティファクトがローカルリポジトリより遠くに行くことは決してありません。

動作しているように見えるのは、mavenがスマートになるまで、またはローカルリポジトリを完全に削除するまでに非常に長い時間がかかることだけです。おそらく待機オプションは前述の更新間隔に関係していると考えられます。

この問題は、maven 3.0.2と3.0.3で発生しました。私たちはArchiva 1.0.3を使用しています(ただし、これは要因ではありません)。どんな助けでも大歓迎です。

+1

はしながら、または直前に何をログに記録するMavenのです「待って?」私。到達不能なリポジトリに接続しようとしていますか?また、問題のアーチファクト "-SNAPSHOT"はありますか? – noahlz

+0

Mavenは上記のエラー以外のログを記録しません。はい、これはスナップショットの依存関係です。 – user1686620

+0

http://stackoverflow.com/questions/1348603/how-can-i-get-maven-to-stop-attempting-to-check-for-updates-for-artifacts-from-a – noahlz

答えて

5

これが私に起こったのは、テンプレートから自分のsettings.xmlを盲目的にコピーしていて、それでも空白の<localRepository/>要素があったからです。これは、依存関係を解決する際にローカルリポジトリが使用されていないことを意味します(インストールされた成果物は引き続きデフォルトの場所に置かれます)。私が<localRepository>${user.home}\.m2\repository</localRepository>と交換したときに動作し始めました。

* nixでは、これは<localRepository>${user.home}/.m2/repository</localRepository>と思われます。

+4

$ {user.home} \。m2 \ repositoryがデフォルトですので、空のタグを削除すると同様に動作します。 –

30

ローカルMavenレポは、artifactディレクトリ内の "_maven.repositories"という名前のファイルを使用して、アーティファクトが元々どこにあるかを追跡します。それを取り除いた後、ビルドが機能しました。 This answerは私の問題を解決しました。

+0

私のために働いた、ありがとう! – janhink

+6

私にとっては、 "_remote.repositories"という名前のファイルでした。私はそれを削除し、それは働いた!トリックありがとう! – perbellinio

+0

Thx _remote.repositoriesという名前のファイルも存在しました。私たちのネクサスがネットワーク接続をやめて依存関係を取得できなくなったときに起こった – cabaji99

5

Mavenは何かが見つからなかったときに覚えています。キーは「内部の更新間隔が経過するか、更新が強制的に行われるまで、解決は再試行されません - >」

問題のアーティファクトについてローカルの「リポジトリ」サブディレクトリを削除するのが簡単な解決策です。それに伴う問題。 :)

mvn -Uリモートリポジトリからの更新を強制します。ここでは、リモートで上記のアーティファクトが設定されているものとします。

0

私の新しいプロジェクトがoracle jdbc jar(これは私のローカルリポジトリにインストールされており、他のプロジェクトではうまく動作しています)に依存する場合、同様の問題が発生します。私は-Uオプションを試しました.lastupdateファイルまたはディレクトリ全体とdownlaodを再度削除しましたが、うまくいきませんでした。最後に、ディレクトリを削除してローカルにインストールし直しました。

0

私がMavenで見つけたエラーの1つはsettings.xmlファイルを間違ったディレクトリに置いたときです。それはあなたのユーザーのホームディレクトリの下に.m2フォルダ内になければなりません。適切な場所にあることを確認してください(それを使用している場合は、settings-security.xmlと一緒に)。

0

シェルスクリプトを使用してローカルの成果物をインストールしたとき、私はUbuntu LinuxにDependencyResolutionExceptionを持っていました。解決策は、ローカルの成果物を削除し、それらを再び "手動で"インストールすることです - 端末経由でmvn install:install-fileを呼び出してください。

-2

このコマンドを試してください。

MVNここでのオプションは私のために動作しなかったので、私はそれを解決する方法共有しています

7

を検証:

私は、(それ自身のpom.xmlを持つ)親プロジェクトは、私のプロジェクトがありますそのうちの1つ(A)は別の子(B)に依存しています。 Aでmvn packageを試してみたところ、Bを解決できなかったため動作しませんでした。

mvn install親ディレクトリで実行しました。その後、私はmvn packageをAの中に入れて、それだけを見つけることができました。

+0

wow - これは本当に悪い***です。親プロジェクトには、組み込み機器に必要な(小)モジュールの依存性ではない非常に大きなモジュールがあります。 * info *( "メッセンジャーを撃たないでください..")のアップ投票。 – javadba

+0

ありがとうございました!これは私を夢中にさせていた。 mvn clean package jboss-as:私が1行で実行したときにdeployは動作していましたが、別々に実行したときは動作しませんでした。 – PMorganCA

3

オフラインモードであっても、mavenは依存関係の_remote.repositoriesマーカーがあればリモートリポジトリをチェックします。オフラインモードで操作する必要がある場合は、これらのファイルを削除する必要があります。

以下、これらのマーカーファイルを削除する簡単なシェルコマンドがあります。これは、マシンにオフラインモードのみを使用する場合には安全です。 ウェブからファイルを引き出す必要があるマシンでは、これをしません。

私はこの戦略を、Webから切断されたビルドサーバーで使用しました。リポジトリをそこに転送し、マーカファイルを削除してから、オフラインモードで実行する必要があります。

リモートリポジトリマーカーファイルをこのように削除することができますのLinux/Unixでは

cd ~/.m2 
find -name "_remote.repositories" type -f -delete 
関連する問題