Mavenがmaven-central-repoの特定のグループからのアーティファクトの更新を確認する試みを停止するようにするにはどうすればよいですか?


126

私はかなり大きなMavenプロジェクトに取り組んでいます。おそらく70個ほどの個別のアーティファクトがあり、それらは大まかに共有コードの2つのライブラリと、それらを使用する10個のアプリケーションに分割されています。これらの項目はすべて名前空間にありますcom.mycompany.*

ほとんどの場合、スナップショットビルドに対して実行しています。したがって、アプリケーションのフルビルドを行うには、まずライブラリプロジェクトをビルドして、ローカルリポジトリにインストールするようにします(たとえば、mycompany-libname-2.4-SNAPSHOT.jar)。

問題は、次にアプリケーションをビルドするときです。何らかの理由で、Mavenは主要な2つのパブリックリポジトリ(maven-net-repoおよびjava-net-repo)をチェックして、すべてのmycompany-*-SNAPSHOT.jarアーティファクトの更新を確認したいと考えています。もちろん、それらはそこにはなく、最終的にすべてがローカルリポジトリにビルドしたバージョンに解決されますが、Mavenはこれをやめてほしいのです。これらのリポジトリに存在しないものがないかどうかを常にチェックし、(b)ビルドプロセスに不要で迷惑なネットワーク遅延を追加します。

私はこれを回避するためにほとんどの場合オフラインモードでMavenを実行することにしましたが、パブリックライブラリへの依存関係が更新されることがあるので、これは理想的ではありません。だから私が探しているのは、特定の基準を満たすアーティファクトの指定されたリポジトリからの更新をMavenがチェックしないようにするソリューションです-この場合、MavenがSNAPSHOTバージョンまたは含まれていたアーティファクトのいずれかを無視してくれると幸いですcom.mycompany名前空間。

回答:


34

updatePolicyタグが機能しませんでした。ただし、Rich Sellerはスナップショットをとにかく無効にする必要があると述べたので、さらに調べてみると、settings.xmlに追加した追加のリポジトリーが実際に問題を引き起こしていることに気付きました。settings.xmlのこのリポジトリにスナップショットセクションを追加するとうまくいきました。

<repository>
    <id>jboss</id>
    <name>JBoss Repository</name>
    <url>http://repository.jboss.com/maven2</url>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
</repository>

回答ありがとうございます。それは最終的に私を助けました。いずれかのリポジトリのスナップショットダウンロードで問題が発生していました。更新警察がいてもダウンロードがハングアップしていました。スナップショットがダウンロードされなくなりました。これはまさに私が望んでいたことです。
wolfroma 2017

163

また、Mavenを「オフラインモード」にするmvnコマンドラインで-oまたは--offlineを使用して、更新をチェックしないようにすることもできます。まだローカルリポジトリにない依存関係を取得できないという警告が表示されますが、大した問題ではありません。


8
これにより、Mavenがリリース済みの依存関係をダウンロードすることも停止します。スナップショットの更新をチェックせずに、リリースされたライブラリの新しいバージョンが必要な場合があります
hobgoblin '12年

2
これは明らかに元の質問に対する答えではありません!どうしてそんなに多くの賛成票を持つことができますか??? OPはmavenをオフラインモードで実行しようとしたことを明示的に書いていますが、それは彼の目的には理想的ではありません!
Honza Zidek 2017年

95

mavenでも利用できるようになったものは

mvn goal --no-snapshot-updates

要するに

mvn goal -nsu

3
SBT関係者がここに上陸した場合に備えて:set offline := trueセッションまたはoffline := truebuild.sbt
2012年

5
また、nsuオプションはv 3.0.3で壊れています(MNG-5064を参照)。このオプションを確実に使用するには、少なくともv。3.0.4またはv。3.0.5へのアップグレードが必要になる場合があります
Ashutosh Jindal

かなり良い
AntJavaDev 2018

32

アップデート:あなたのプロジェクトはスナップショットなので、私はおそらくこれから始めるべきだった。Mavenが各ビルドの更新をチェックするのは、SNAPSHOTセマンティクスの一部です。スナップショットであることは、それが揮発性であり、変更される可能性があるため、更新を確認する必要があることを意味します。ただし、MavenのスーパーPOMは 中央でスナップショットを無効にするように構成されているため、自分のpom /設定で上書きしない限り、中央でSNAPSHOTの更新を確認しないでください。


中央リポジトリーにミラーを使用するようにMavenを構成できます。これにより、通常は中央リポジトリーに送られるすべての要求が内部リポジトリーにリダイレクトされます。

settings.xmlに次のようなものを追加して、内部リポジトリを中央のミラーとして設定します。

<mirrors>
  <mirror>
    <id>ibiblio.org</id>
    <name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
    <url>http://path/to/my/repository</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>

内部リポジトリにNexusなどのリポジトリマネージャを使用している場合。プロキシセントラルのプロキシリポジトリを設定できるため、通常はセントラルに送信されるリクエストは代わりにプロキシリポジトリ(またはプロキシを含むリポジトリグループ)に送信され、後続のリクエストは内部リポジトリマネージャーにキャッシュされます。プロキシキャッシュタイムアウトを-1に設定することもできるため、すでにプロキシリポジトリにあるコンテンツを中央から要求することはありません。


ローカルリポジトリのみで作業する場合のより基本的な解決策は、中央リポジトリのupdatePolicyを「never」に設定することです。これは、Mavenがローカルリポジトリにまだ存在しないアーティファクトのみをチェックすることを意味します。その後、必要に応じて-Uスイッチを使用してMavenに強制的に更新を確認させることにより、コマンドラインでこれをオーバーライドできます。

(pomまたはsettings.xmlのプロファイルで)リポジトリを次のように構成します。

<repository>
  <id>central</id>
  <url>http://repo1.maven.org/maven2</url>
  <updatePolicy>never</updatePolicy>
</repository>

私たちは実際にはすでに中央リポジトリを持っていますが、もちろんそれにスナップショットビルドを公開していません。そのため、おそらくプロキシ/ミラーを配置したまま更新チェックに失敗します-Mavenを取得する方法を探していますこれらのアーティファクトの更新をまったくチェックしません。
Tim Gilbert、

1
SNAPSHOTの中央リポジトリーに論理リポジトリーをセットアップすることも価値があります。つまり、開発者間でそれらを共有でき、すべてをローカルでビルドする必要はありません。その後、リモートリポジトリにプッシュされるとすぐに、SNAPSHOTの依存関係に対する変更を取得することで、SNAPSHOTのメリットを最大限に活用できます。
リッチセラー

ありがとう-updatePolicyフラグは、私が探していたものとまったく同じように見えます。
Tim Gilbert、

1
また、Nexusでは、会社のアーティファクトの外部へのリクエストを防ぐためのルールを設定することもできます。
ブライアンフォックス

ここのXMLスニペットは古くなっています。updatePolicy要素は、下に行くsnapshotsreleasesの要素。参照:maven.apache.org/settings.html
ジェフエヴァンス

5

とてもシンプル:

Super POMの親またはsetting.xmlで、

        <repository>
        <id>central</id>
        <releases>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <updatePolicy>never</updatePolicy>
        </snapshots>
        <url>http://repo1.maven.org/maven2</url>
        <layout>legacy</layout>
    </repository>

私のヒントです


0

これに似たトラブルがありました

<repository>
    <id>java.net</id>
    <url>https://maven-repository.dev.java.net/nonav/repository</url>
    <layout>legacy</layout>
</repository>
<repository>
    <id>java.net2</id>
    <url>https://maven2-repository.dev.java.net/nonav/repository</url>
</repository>

updatePolicyを「never」に設定しても機能しませんでした。これらのリポジトリを削除することで解決しました。PS:私はこのWebサービスについてのチュートリアルに従っていた(ところで、Javaのwsのおそらく最高のチュートリアル)


1
Intellijを使用していますか?Intellij + Maven = updatePolicyを無視するためです。バグレポートを参照するyoutrack.jetbrains.com/issue/IDEA-76869
Manav
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.