128

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

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

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

私たちはsettings.xmlでさまざまなプロファイルを試しましたが、もちろん「mvn-U」も試しました。このアーティファクトがローカルリポジトリを超えることは決してないので、何の役にも立ちませんし、そうすべきでもありません。

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

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

4

17 に答える 17

101

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

于 2014-01-22T12:52:18.650 に答える
24

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

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

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

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

cd ~/.m2
find . -name "_remote.repositories" -type f -delete
于 2017-11-16T19:51:28.460 に答える
12

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

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

于 2014-01-20T02:27:47.770 に答える
0

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

于 2015-11-07T02:36:49.843 に答える
0

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

于 2020-08-14T08:24:37.223 に答える
0

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

于 2015-03-10T07:37:32.933 に答える
0

これが問題の長い解決策です(クイックフィックスではありませんが、他の解決策がない場合は機能します)

こんなことを言うと、あなたは私を嫌うでしょうが、これが Eclipse のようなオープン ソース プロジェクトに関する真実です。オープンソースはモジュール式であり、Maven、Spring Boot、xml または groovy のオプション、さまざまな Eclipse 更新などの多くのツールを使用して、さまざまな方法でプロジェクトをビルドおよび開発できるためです。問題は、Eclipse でプロジェクトを実行できることです。 IDE は、プロジェクトで適切にビルドされていない jar ファイルを保存およびキャッチする remote_repository を使用して依存関係を解決できるほどスマートであるため、maven ビルドが欠落しています。

この機能により、実際にはローカル ビルドの問題が発生する可能性がありますが、DNS サーバーと同様です。解決策がローカル ディレクトリに見つからない場合、Eclipse はリモートのキャッシュされたリポジトリで解決策を探します。remote_repository を削除して Maven にもう一度再構築させると、プロジェクトでさらに多くのエラーが発生して 2 回目の構築が行われないか、欠落していたキャッシュが再構築される可能性があります。しかし、それはありそうもありません。

したがって、ソリューションを修正するための長い答えです。

これはプロジェクト アーキテクチャの問題です。

解決策: 必要なことは、すべての依存プロジェクトの pom.xml ファイルとローカル プロジェクトの maven 依存関係フォルダーを調べて、maven 依存関係フォルダー内の不足しているすべての依存関係 jar を解決することです。参照ライブラリがある場合は、それらの jar をローカル プロジェクトの maven 依存関係フォルダーに移動することをお勧めします。

すべての子プロジェクトを解決してから、ルート プロジェクトに移動し、Maven -> Build -> clean install ("skip tests" & "resolve workspace artifacts" をオフにします) を使用してすべてのプロジェクトを修正する必要があります。クリーンな成功を収めてビルドします。

ほとんどの場合、すべてのプロジェクトに対してソリューション全体を強制的に更新すると、IDE が自動解決するエラーのリストが表示されます。自動解決は、問題を解決するための簡単な参照を参照します。ただし、デプロイするには、プロジェクトを手動で修正する必要があります。これは、Eclipse、Spring、および Maven がうまく連携して動作するためですが、同意できない点がいくつかある可能性があります。ですから、そのような状況で外交官を演じて、それを理解する必要があります。

それが悲しい真実です。

とはいえ、私のプロジェクトには問題のリストがあります。この問題があります。生成された war ファイルには空の jar フォルダーがあり、強制しない限りビルドはエラーなしではクリーンではありません。WAR ファイルを生成すると、Tomcat サーバーの運用環境で 404 エラーが発生し、Angular アプリケーションは API の実行時に Cors-Error をスローします。

すべての問題の根本は生成された WAR ファイルにあるため、フロント エンド プロジェクトのすべてのエラーは人為的なものです。依存関係で生成されませんでした。メイン プロジェクトは tomcat で実行されませんでした。Tomcat サーバーは、春の初期化子を実行してサーバーに cors-policy を展開し、Angular アプリケーションが通信できるようにすることができません。しかし、全体として、開発環境は問題なく正常に動作します。

それが、このスレッドに対する私の長年の解決策です。

于 2021-08-31T02:53:44.620 に答える