Mavenが「MyRepoの更新間隔が経過するまで解決は再試行されない」と言ったとき、その間隔はどこに指定されていますか?


587

Mavenでは、まだ構築していないか、リポジトリに含めていないサードパーティのリポジトリからのアーティファクトにときどき遭遇しました。

Mavenクライアントから、アーティファクトが見つからないというエラーメッセージが表示されます。

org.jfrog.maven.annomojo:maven-plugin-anno:jar:1.4.0 http://myrepo:80/artifactory/repoがローカルリポジトリにキャッシュされていなかったため、MyRepoの更新間隔が経過するか更新が強制されるまで、解決は再試行されません-> [ヘルプ1]

今、私はこれが何を意味するのか理解し、でコマンドを再実行するだけで-U、通常、そこから問題なく動作します。

ただし、このエラーメッセージは非常に直感的ではなく、同僚の頭痛の種を避けようとしています。

このupdate interval設定を変更できる場所があるかどうかを調べています。

  1. update intervalこのエラーメッセージで言及されているのは、クライアント側の設定ですか、サーバー側の設定ですか?
  2. クライアント側の場合、どのように構成しますか?
  3. サーバー側の場合、Nexus / Artifactoryがこれらの設定をどのように/公開しているかを誰かが知っていますか?

11
pom.xmlにさらに1つの依存関係を追加した後、同じエラーメッセージが表示されました。私にとってこれは明らかにバグです。なぜこれが起こるのか分かりません!プロジェクトに依存関係を追加してmvn compileを実行すると、jarファイルがダウンロードされるだけです。この動作はまったくナンセンスです!
ロバート・レイズ2013年


私は最近これを経験しました、そして私が読んだすべての答えの後、別の追加のステップは(私の場合)Eclipseにプロジェクト再インポートすることです。Eclipseが私のにないプラグインで私を悩ませ続けているのはあまりにも奇妙でしたpom.xml
シークレット

私にとって重要な質問!! ありがとう!
Noddy氏、

私にとって、特定のリポジトリがGitHubにリンクされ、URLがオフラインになったことがわかりました(404を取得)。リポジトリを内部サーバーに更新しましたが、うまくいきました。
cbmeeks

回答:


286

ローカルリポジトリの対応するダウンロードに失敗したアーティファクトディレクトリを削除して、この問題を解決していました。次にmavenコマンドを実行すると、アーティファクトのダウンロードが再度トリガーされます。したがって、それはクライアント側の設定だと思います。

Nexus側(サーバーリポジトリ側)、この問題はスケジュールされたタスクの構成で解決されます。クライアント側では-U、すでに指摘したように、これはを使用して行われます。


7
「ローカルリポジトリの対応するダウンロードに失敗したアーティファクトディレクトリを削除することで、この問題を解決するために使用しています。」これでうまくいきました。Netbeansも使用しています。

16
キャッシュされたアーティファクトが無効であるとMavenが指摘した場合、なぜそれ自体で解決できないのですか?
ステファン

1
「スケジュールされたタスクの構成」と「これは-Uを使用して行われます」とはどういう意味ですか、これらを客観的なEclipse UI用語に入れてください。
user2568374 2017年

1
私はあなたがEclipse IDEを意味すると思います。理論的には、最新のスナップショットをダウンロードする必要があります。これを行うには、 '-U'パラメータをmavenコマンドに追加する必要があります(例:mvn clean compile -U)。これで、コマンドラインから、または「常にスナップショットを更新」ボックスをチェックすることで、Eclipseからこのmavenコマンドを実行できます。よくわかりませんが、最近はintellijを使用しています。「スケジュールされたタスクの構成」の部分は、Nexusサーバーに必要な特定の構成を指します。この後者はEclipse自体とは関係ありません。
Christian Achilli

10
これはOPの実際の質問には答えません。
8bitjunkie 2017年

116

ローカルリポジトリの対応する失敗したアーティファクトディレクトリを削除できます。そして、あなたは単に-Uゴールでを使うことができます。それは仕事をします。これはMaven 3で動作します。したがって、Maven 2にダウングレードする必要はありません。


2
なぜそんなに簡単にできるのに、リポジトリ設定をいじるのですか?
Koraktor 2013

9
答える前に質問をよく読んでください。OPは、更新を強制する方法ではなく、時間間隔を設定する方法を求めています。
i3ensays 2014年

2
質問への回答ではありませんが、これは人々がこの例外にぶつかったときに必要なものです。ローカルのlib開発に取り組んでいるときは、間隔を許すのではなく、そのようなlibを削除するのが最善です。
mcvkr 2017年

~/.m2/settings.xml/<repositories>-Uオプションを使用してこの問題を解決するには、有効なリポジトリを追加する必要があります
Kanagavelu Sugumar

64

関連する問題がありましたが、Raghuramの回答が役に立ちました。(私はまだ彼の答えを投票するのに十分な評判を持っていません)。NetBeansにバンドルされているMavenを使用していて、同じ結果が得られました。「...がローカルリポジトリにキャッシュされました。ネクサスの更新間隔が経過するか、更新が強制されるまで、解決は再試行されません-> [ヘルプ1]」エラー。

これを修正する<updatePolicy>always</updatePolicy>には、設定ファイル(C:\ Program Files \ NetBeans 7.0 \ java \ maven \ conf \ settings.xml)に追加しました

<profile>
  <id>nexus</id>
  <!--Enable snapshots for the built in central repo to direct -->
  <!--all requests to nexus via the mirror -->
  <repositories>
    <repository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </repository>
  </repositories>
 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>

8
私の場合は役に立ちませんでした。
2016年

64

基本的に何が起こるかは、mavenのデフォルトのupdatePolicyによると、Mavenは毎日リポジトリーからjarをフェッチします.1回目の試行中にインターネットが機能していなかった場合、24時間経過するまでこのjarを再度フェッチしようとしませんでした。

解決 :

どちらかを使用

mvn -U clean install

ここで、-Uはリポジトリを強制的に更新します

または使用

<profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>myRepo</id>
          <name>My Repository</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
         </repository>
      </repositories>
      ...
    </profile>
  </profiles>

あなたのsettings.xmlで


39

設定リファレンスによると:

updatePolicy:この要素は、更新の発生頻度を指定します。MavenはローカルPOMのタイムスタンプ(リポジトリのmaven-metadataファイルに保存されている)をリモートと比較します。選択肢は、常に、毎日(デフォルト)、interval:X(Xは分単位の整数)、またはなしです。

例:

<profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>myRepo</id>
          <name>My Repository</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
         </repository>
      </repositories>
      ...
    </profile>
  </profiles>
  ...
</settings>

7
返信いただきありがとうございます; ただし、「updatePolicy」設定をかなり試しましたが、「見つかりません」/「失敗したキャッシュ」/「解決は再試行されません」エラーには影響がないようです。
cprice404

23

@ Sanjeev-Gulganiが示唆しているように、クリーンインストール(キャッシュされた依存関係を上書き)でこれを解決できます。 mvn -U clean install

また、問題の原因となっているキャッシュされた依存関係を単に削除することもできます

mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId"

詳細については、mvn docsを参照してください。


9

このエラーは、誤解を招くことがあります。確認したい2つのこと:

  1. リポジトリの依存関係に実際のJARはありますか?エラーメッセージには検索している場所のURLが含まれているので、そこに移動し、依存関係に一致するフォルダーを参照します。瓶はありますか?そうでない場合は、依存関係を変更する必要があります。(たとえば、サブプロジェクトを指す必要があるときに、最上位の親依存関係を指すことができます)

  2. jarがリモートリポジトリに存在する場合は、ローカルコピーを削除してください。.m2 / repository(Linuxの場合は非表示にするにはls -a)の下のホームディレクトリ(別の方法で設定しない限り)にあります。


4
これはOPの質問には関係ありません。エラーが表示される理由はポイントではありません。OPは再試行間隔の設定方法を知りたい。
8bitjunkie 2017年

1
これはOPの投稿の背後にある暗黙の問題である可能性があり、私の問題であることが判明しました。私の<groupId>にタイプミスがあり、オプション1を確認することで、正しいパスに進むことがわかりました。
James Oravec 2017

1
問題は、間隔を設定する方法ですか?
smilyface 2017年

7

Eclipseを使用している場合は、Windows-> Preferences-> Mavenに移動し、「リモートリポジトリからの依存関係を自動的に更新しない」チェックボックスをオフにします。

これはMaven 3でも動作します。


1
検証済み:eclipse:Juno Service Release2。m2e:v 1.3.1
user77115 '20

8
これはOPの質問には答えません。
8bitjunkie 2017年

5

リポジトリからすべての「_maven.repositories」ファイルを削除する必要があります。


3
役に立たない、または少なくとも私の場合はそうではない
Arcy

1
それは私のために働いた。私はそれらをすべて削除しませんでしたが、その特定の依存関係フォルダー内の1つだけを削除しました
Piyin

5

これは、ローカルのMavenリポジトリから関連する依存関係を削除した後に機能します

/user/.m2/repository/path

これは魅力のように機能します
Jadda

3

Nexusをプロキシリポジトリとして使用する場合は、デフォルト値が1440分(または24時間)の「キャッシュが見つかりませんTTL」設定があります。この値を小さくすると役立つ場合があります([リポジトリ]> [構成]> [有効期限設定])。

詳細については、ドキュメントを参照してください。


2

私がこの問題をどうやって得たか、

Eclipse JunoからLunaに変更して、SVNリポジトリから私のmavenプロジェクトをチェックアウトすると、アプリケーションの構築中に同じ問題が発生しました。

何を試しましたか?ローカルリポジトリをクリーンアップしてから、-Uオプションを使用してすべてのバージョンを再度更新しました。しかし、私の問題は続きました。

次に、[ウィンドウ]-> [設定]-> [Maven]-> [ユーザー設定]->に移動し、[ローカルリポジトリ]の下の[再インデックス]ボタンをクリックして、再インデックスが実行されるのを待ちます。

以上で問題は解決しました。


4
これはOPの質問には答えません。
8bitjunkie 2017年

2

最後にタイトルの質問に答えるには:(プロジェクト、プロファイル、または設定)の(クライアント側の設定)です。

[plugin]?[r|R]epository/[releases|snapshots]/updatePolicy

... 鬼ごっこ。

(現在、maven:3.6.0ですが、「後方」互換性があると思います)可能な値は次のとおりです。

/**
 * Never update locally cached data.
 */
public static final String UPDATE_POLICY_NEVER = "never";
/**
 * Always update locally cached data.
 */
public static final String UPDATE_POLICY_ALWAYS = "always";
/**
 * Update locally cached data once a day.
 */
public static final String UPDATE_POLICY_DAILY = "daily";
/**
 * Update locally cached data **every X minutes** as given by "interval:X".
 */
public static final String UPDATE_POLICY_INTERVAL = "interval";

このタグの現在の(maven 3.6.0)評価は、次のように実装されます。

public boolean isUpdatedRequired( RepositorySystemSession session, long lastModified, String policy )
{
    boolean checkForUpdates;
    if ( policy == null )
    {
        policy = "";
    }
    if ( RepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
    {
        checkForUpdates = true;
    }
    else if ( RepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
    {
        Calendar cal = Calendar.getInstance();
        cal.set( Calendar.HOUR_OF_DAY, 0 );
        cal.set( Calendar.MINUTE, 0 );
        cal.set( Calendar.SECOND, 0 );
        cal.set( Calendar.MILLISECOND, 0 );
        checkForUpdates = cal.getTimeInMillis() > lastModified;
    }
    else if ( policy.startsWith( RepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
    {
        int minutes = getMinutes( policy );
        Calendar cal = Calendar.getInstance();
        cal.add( Calendar.MINUTE, -minutes );
        checkForUpdates = cal.getTimeInMillis() > lastModified;
    }
    else
    {
        // assume "never"
        checkForUpdates = false;
        if ( !RepositoryPolicy.UPDATE_POLICY_NEVER.equals( policy ) )
        {
            LOGGER.warn( "Unknown repository update policy '{}', assuming '{}'",
                    policy, RepositoryPolicy.UPDATE_POLICY_NEVER );
        }
    }
    return checkForUpdates;
}

..with:

private int getMinutes( String policy )
{
    int minutes;
    try
    {
        String s = policy.substring( RepositoryPolicy.UPDATE_POLICY_INTERVAL.length() + 1 );
        minutes = Integer.valueOf( s );
    }
    catch ( RuntimeException e )
    {
        minutes = 24 * 60;
        LOGGER.warn( "Non-parseable repository update policy '{}', assuming '{}:1440'",
                policy, RepositoryPolicy.UPDATE_POLICY_INTERVAL );
    }
    return minutes;
}

... lastModified(各ローカルファイルの)「変更されたタイムスタンプ」は、それぞれのアーティファクトの場所です。


特にinterval:x設定について:

  • コロンは、:その厳格ではありません-任意の「非空」の文字がそれを行うことができ(=、...)。
  • 負の値x < 0は "never"になります。
  • interval:0 私は「分」(0-59秒以上...)の間隔を想定しています。
  • 数値形式の例外は24 * 60分(〜 "毎日")になります。

..see:DefaultUpdatePolicyAnalyzerDefaultMetadataResolver#resolveMetadata()およびRepositoryPolicy


1

以下のためのIntelliJのユーザー以下は、私のために働きました。

パッケージを右クリック

Maven > Reimport 

そして

Maven > Generate Sources and Update Folders

0

やや関連性がある。

"[エラー]プロジェクトtestprojectで目標を実行できませんでした:プロジェクトmyjarname:jar:1.0-0の依存関係を解決できませんでした:http://repo1.maven.org/maven2ローカルリポジトリにキャッシュされたmyjarname-core:bundle:1.0-0が見つかりませんでした。解決は行われませんセントラルの更新間隔が経過するか更新が強制されるまで再試行-> [ヘルプ1] "

このエラーは、のMaven 3代わりにを誤って使用したことが原因ですMaven 2。私の最初のグーグル検索が私をこのページに導いたので、それが誰かを時間を節約するかもしれないと考えました。


2
プロジェクトでMaven 3を使用する必要がある場合はどうなりますか?2つのバージョン間で何が変わったのかについての手がかりはありますか?
Xr。

1
これがまさに私の問題でした。Maven 3が2とそれほど異なる理由はわかりません。これを投稿していただき、解決策を探すためにこれ以上の時間を費やすことを防いでいただき、ありがとうございます。
CatsAndCode

maven3の代わりにmaven2をインストールする方法

非常に一般的な質問です。どのオペレーティングシステムですか。Ubuntuの場合は、「sudo apt-get install maven2」を実行できます。LinuxまたはUNIXの場合は、アーカイブをダウンロードして自分でコンパイルし、パスに追加します。試してみてください:shameerarathnayaka.blogspot.com/2012/01/...
sdanzig

これは私にとってうまくいきました、そして実際、私はここの私の答えからこれにリンクを戻します
しり

0

MavenにはupdatePolicy設定があり、リポジトリ内の更新を確認する頻度や、リポジトリとリモートとの同期を維持する頻度を指定します。

  • updatePolicyのデフォルト値は毎日です。
  • その他の値は常に/決して/ XX(分単位で間隔を指定)にすることができます。

以下のコードサンプルをMavenユーザー設定ファイルに追加して、updatePolicyを構成できます。

<pluginRepositories>
    <pluginRepository>
        <id>Releases</id>
        <url>http://<host>:<port>/nexus/content/repositories/releases/</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>             
</pluginRepositories>

3
これはOPの質問には答えません。OPは、問題が何であり、ローカルのm2リポジトリを更新する方法を理解していることは明らかです。OPは、間隔がどこにあり、どのように変更するかを尋ねています。IDEについてはまったく触れられていません。質問を読んでいません。
8bitjunkie 2017年

@ 8bitjunkieこれは質問に直接答えますIf client-side, how do I configure it?。この回答は、IDE機能に関するものではありません。これはmvnのみのリポジトリ設定です。updatePolicyOPが尋ねている区間です。
montrivo

これは、受け入れられた回答@ cprice404である可能性があります。
montrivo


0

私はこの問題を持っていたで提案されている総合的な記述、これはそれを修正するために私を助けました。

2番目に宣言された問題は私の問題でした。追加したばかりのサードパーティのリポジトリを使用repositoryして、プロジェクトのpomファイルの一部を実行しました。pluginrepositoryこの問題を解決するために、同じリポジトリ情報をに追加します。


0

別のアーティファクトで同様のエラーが発生しました。

<...>はローカルリポジトリにキャッシュされました。セントラルの更新間隔が経過するか更新が強制されるまで、解決は再試行されません

上記の解決策のどれも私にとってうまくいきませんでした。IntelliJ IDEAファイル>キャッシュの無効化/再起動...>無効化して再起動することで、これを最終的に解決しました。


0

私の場合、複数のプロジェクトがありました

rootProject
 |-> contractProject (using Project Lombok)
 |-> domainProject (dependency on contractProject)

「domainProject」ディレクトリから「mvn clean install」を実行すると、上記のエラーが表示されました。

「projectRoot」ディレクトリから「mvn clean install」を実行すると、問題は解消しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.