9
[WARNING] The POM for org.testng:testng:jar:5.14.10 is invalid,
          transitive dependencies (if any) will not be available: 1 problem was
          encountered while building the effective model for
          org.testng:testng:5.14.10

[FATAL]   Non-readable POM
          /home/teamcity/.m2/repository/org/sonatype/oss/oss-parent/3/oss-parent-3.pom:
          input contained no data @
          /home/teamcity/.m2/repository/org/sonatype/oss/oss-parent/3/oss-parent-3.pom

でファイルの破損が発生することは~/.m2、誰もが知っています。Maven が再ダウンロードできるように、破損したファイルを削除するのと同じくらい簡単に修正できます。ただし、ログを手動で grep したり、ビルド エージェントに接続したり、それらのファイルを手動で削除したりしたくありません。信頼できるビルドは、このような問題に対処できる必要があります。

ビルドに失敗する代わりに、破損したファイルを Maven に再ダウンロードさせる方法はありますか? ~/.m2ビルドが非常に遅くなるため、各ビルドが実行される前に削除したくありません。

なぜそれが起こるのですか?私の顧客の 1 人が壊れたインフラストラクチャを持っています。仮想マシンが予告なしに頻繁に再起動されます。また、ほとんどの場合、ビルドが実行されるため、ファイルは破損します~/.m2。この問題について私が変更できることは何もありません。それは彼らのサーバーとポリシーです。あるいは単に無能です。しかし、ビルドを手作業で修正しなければならないのは私です。

4

1 に答える 1

4

Maven 3.0.4までは、Mavenを1回呼び出すだけでこれを解決する方法はありません。

できることは、reactor内の各モジュールをステップスルーし、(mojoアノテーションではなく)API呼び出しを介してそれらの依存関係を解決し、障害をキャッチしてパージして再試行できるアグリゲータープラグインを作成することです。

すべてのケース(プラグインの依存関係など)をキャッチするわけではありませんが、次のようなことをした場合

$ mvn org.mine.maven:resolve-all:resolve-all || rm -rvf ~/.m2/repository
$ mvn clean verify

それはより信頼できるでしょう。

Maven 3.xが必要な場合は、ビルド拡張機能を記述してドロップインする$MAVEN_HOME/libと、ビルド拡張機能はプラグインと同じトリックを実行できますが、プラグイン解決前に機能しているため、プラグインのケースをキャッチできます。 。

多くの作業、個人的に優れたMRMを使用すると、再ダウンロードがばかげて速くなります。Mavenを使用して8年間で、ローカルリポジトリが3〜4回破損した可能性があります。再生とメタデータ(pom)は、あるフォームから別のアーティファクトから解決されました...1つのケースのみが「誤ってダウンロードされたHTML」でした...それらはすべてMRMによって停止されます

于 2013-01-19T11:21:51.990 に答える