Mavenがローカルアーティファクトを見つけられない


107

mavenは、ローカルにビルドおよびパッケージ化されている特定の依存関係が、依存関係を持つ別のプロジェクトをビルドしているときに、ローカルリポジトリで見つからないと不平を言うことがあります。次のようなエラーが発生します。

プロジェクトXで目標を実行できませんでした:プロジェクトXの依存関係を解決できませんでした:[アーカイブリポジトリ]でYが見つからなかったため、ローカルリポジトリにキャッシュされました。内部の更新間隔が経過するか、更新が強制されるまで、解決は再試行されません- >

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

settings.xmlでさまざまなプロファイルを試しましたが、もちろん「mvn -U」です。このアーティファクトがローカルリポジトリより先に進むことは決してないので、どちらもうまくいきません。

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

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


1
Mavenは「待機」の間または直前にログを記録していますか?つまり、到達できないリポジトリに接続しようとしていますか?また、問題のあるアーティファクトは「-SNAPSHOT」ですか?
noahlz 2012

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


1
2番目のプロジェクトをビルドする前に、ビルドパッケージをインストールしましたか?
khmarbaise 2012

3
私はエラーメッセージが文法的に正しい文章ではなく、随時表示されるのが好きです。この方法では、Yが見つからないのか、Yがローカルにキャッシュされているのか、またはその両方なのかはわかりません。とにかく、私は同様の問題を抱えています。私の依存関係会社の内部リポジトリにあるため、-Uオプションで解決できました。会社の内部リポジトリにデプロイする必要のあるアーティファクトがないのはなぜですか?
jyoungdev 2013

回答:


77

ローカルのMavenリポジトリは、アーティファクトディレクトリ内の「_maven.repositories」という名前のファイルを使用して、アーティファクトが最初に発生した場所を追跡します。それを削除した後、ビルドは機能しました。この回答で問題が解決しました。


26
私にとっては「_remote.repositories」という名前のファイルでした。私はそれを削除し、それはうまくいきました!トリックをありがとう!
perbellinio 2015

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

1
提供されたソリューションは機能します。ただし、この問題がなぜ発生するのか、私は興味を持っています。誰かが私に簡単な説明を提供できますか?何か違うことをする必要がありますか?
Janothan

(メタファイルを削除せずに)このオリジンチェックをバイパスする場合はaether.enhancedLocalRepository.trackingFilename=some_dummy_file_name、依存関係の解決プロセスに渡してみてください。最も簡単な方法は、呼び出しコマンドに-Dシステムプロパティを追加することです。
Janaka Bandara、

@Janothan IMO回答のリンクはかなり良い説明を提供します:)
Janaka Bandara

39

ここでのオプションは私にとってはうまくいかなかったので、私はそれをどのように解決したかを共有しています:

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

mvn install 親ディレクトリで実行すると、ジョブが実行されました。その後、私mvn packageはAの内部で行うことができ、それから初めてBを見つけることができました。


3
ありがとうございました!これは私を狂わせていました。mvn clean package jboss-as:deployは、1行で実行すると機能しましたが、個別に実行すると機能しませんでした。
PMorganCA 2017年

18

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

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

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

Linux / Unixでは、次の方法でリモートリポジトリマーカーファイルを削除できます。

cd ~/.m2
find . -name "_remote.repositories" -type f -delete

1
この解決策は、中央リポジトリで利用できない別のコンピューターからコピーした依存関係のために機能しました。ただし、コマンドはいくつかの文字が欠落しています。これが完全なコマンドです:find。-name "_remote.repositories" -type -f -delete
Hans

2
または、削除する代わりに、プロセスに_remote.repositories渡し-Daether.enhancedLocalRepository.trackingFilename=some_dummy_file_nameてファイルを表示しないようにMavenを「見当違い」にできるはずです。(実際のMavenビルドを試したわけではありませんが、プログラムでMavenを呼び出すときに機能します。前者も機能するはずです)
Janaka Bandara

1
Mavenで検出されなかった特定の依存関係(jar)がリストされ、管理できるため(<10)、これを見つけて削除しました。これは、(私が理解しているように)現在利用できないリモートのNexusを指しているmisconfigが原因でした。したがって、実際にすべてのリポジトリを一掃して削除する必要はありません。とにかく、このソリューションはその日を救った。それは私のために働きます。
Diego1974

9

これが発生したのは、テンプレートから盲目的にsettings.xmlをコピーしたのに、空白の<localRepository/>要素が残っていたからです。これは、依存関係を解決するときにローカルリポジトリが使用されないことを意味します(ただし、インストールされたアーティファクトはデフォルトの場所に配置されます)。それを置き換えると、<localRepository>${user.home}\.m2\repository</localRepository>それが機能し始めました。

* nixの場合は、そうなる<localRepository>${user.home}/.m2/repository</localRepository>と思います。


6
$ {user.home} \。m2 \ repositoryがデフォルトなので、空のタグを削除しても同じように機能します。
LuisMuñoz

9

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

簡単な解決策は、問題のアーティファクトのローカルの「リポジトリ」サブディレクトリを削除することです。:)

mvn -U リモートリポジトリからの更新を強制します。ここでも、リモートに上記のアーティファクトを入力したと想定しています。


2

すべてをキャッチ。ここで説明されている解決策が機能しない場合(私の場合)、 '。m2'フォルダー/ディレクトリからすべてのコンテンツを削除してくださいmvn clean install



1

私もこの問題に直面し、2つの方法で解決しました。

1)IDEでプロジェクトを選択し、すべてのプロジェクトをクリーンアップしてから、プロジェクトを右クリックしてすべてのmaven依存関係をインストールします。> mavenに移動し、プロジェクトの依存関係を更新して、すべてのプロジェクトを一度に選択して同じものをインストールします。これが完了したら、特定のプロジェクトを実行します

2)それ以外の場合は、エラーが発生している依存関係をpom.xmlで確認し、最初にそれらの依存プロジェクト「mvn clean install」し、問題が発生している現在のプロジェクトのインストールmaven依存関係を確認します。これにより、ローカルプロジェクトの依存関係が構築され、jarが作成されます。


0

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


0

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


0

DependencyResolutionExceptionシェルスクリプトを使用してローカルのアーティファクトをインストールしたとき、私はUbuntu Linux を使用していました。解決策は、ローカルのアーティファクトを削除し、それらを「手動で」再インストールすることmvn install:install-fileでした- ターミナル経由での呼び出し。


0

これhttphttps、これの代わりに私が持っていたために起こりました:

<repository>
    <id>jcenter</id>
    <name>jcenter-bintray</name>
    <url>https://jcenter.bintray.com</url>
</repository>

0

アーティファクトYのパッケージングが「jar」に設定されているかどうかを確認します。エラーまたはコピー貼り付けによって「戦争」として定義した場合、この奇妙な「ローカルリポジトリにキャッシュされました。内部の更新間隔が経過するか、更新が強制されるまで、解決は再試行されません」と表示されます。「アーティファクトYは戦争で、jarタイプが期待される」のようなものを期待します。


-1

私は別の原因から同じエラーが発生しました。「グッドプラクティス」の依存関係を含むスターターPOMを作成し、ローカルでビルドしてインストールしてテストしました。私はそれをリポジトリで「見る」ことができましたが、それを使用するプロジェクトは上記のエラーを受け取りました。私がやったことは、スターターPOMをpomに設定したため、JARがありませんでした。Mavenは、Nexusにはないことはまったく正しいものでしたが、そうなるとは期待していなかったため、エラーは、うーん、役に立たなかった。スターターPOMを通常のパッケージに変更して再インストールすると、問題が修正されました。


この回答は、質問に対する直接の回答ではないので、コメントとしてはおそらく良かったでしょう。
00prometheus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.