Maven, “MyRepo'nun güncelleme aralığı geçene kadar çözünürlük yeniden denenmeyecek” dediğinde, bu aralık nerede belirtilir?


587

Maven ile, zaman zaman henüz depomda inşa etmediğim veya dahil etmediğim bazı üçüncü taraf repolarından gelen bir esere çarptım.

Bir istemcinin bulunamadığını söyleyen maven istemcisinden bir hata mesajı alırım:

http://myrepo:80/artifactory/repoYerel depoda org.jfrog.maven.annomojo: maven-plugin-anno: jar: 1.4.0 bulunamıyor , yerel MyRepo güncelleme aralığı geçinceye veya güncellemeler zorlanana kadar çözünürlük yeniden denenmeyecek -> [ Yardım 1]

Şimdi, bunun ne anlama geldiğini anlıyorum ve sadece komutumu yeniden çalıştırabiliyorum -Uve işler genellikle oradan iyi çalışıyor .

Ancak, bu hata mesajının son derece sezgisel olmadığını görüyorum ve iş arkadaşlarıma bazı baş ağrıları vermeye çalışıyorum.

Bu update intervalayarı değiştirebileceğim bir yer olup olmadığını anlamaya çalışıyorum .

  1. Is update intervalbu hata mesajıyla bir istemci tarafı veya sunucu tarafı ayarı belirtilen kullanım?
  2. İstemci tarafındaysa, bunu nasıl yapılandırabilirim?
  3. Sunucu tarafı ise, Nexus / Artifactory bu ayarları nasıl / açığa çıkarır biliyor mu?

11
Pom.xml'e 1 bağımlılık daha ekledikten sonra aynı hata mesajını aldım. Benim için bu açıkça bir HATA. Bunun neden olduğunu anlamıyorum! Projeme bağımlılıklar eklerse ve mvn derlemesini çalıştırırsam, sadece jar dosyalarını indirmelidir. Bu davranış tamamen saçmalık!
Robert Reiz


Son zamanlarda bunu yaşadım ve okuduğum tüm cevaplardan sonra, ek bir adım da projeyi Eclipse'e (benim durumumda) yeniden içe aktarmak . Eclipse'in benim içinde olmayan bir eklenti ile beni rahatsız etmeye devam etmesi çok garipti pom.xml.
Gizli

Benim için önemli bir soru !! Sağol kanka!
Bay Noddy

Benim için belirli bir repo'nun GitHub ile bağlantılı olduğu ortaya çıktı ve url çevrimdışı oldu (404 elde edildi). Depoyu dahili sunucumuza güncelledim ve işe yaradı.
cbmeeks

Yanıtlar:


286

Yerel repo'mdaki yapay dizin indirilemediğini silerek bu sorunu çözerdim. Bir dahaki sefere maven komutunu çalıştırdığımda artefakt indirmesi tekrar tetiklenir. Bu yüzden bir istemci tarafı ayarı olduğunu söyleyebilirim.

Nexus tarafı (sunucu repo tarafı), bu sorun zamanlanmış bir görevi yapılandırarak çözüldü. Müşteri tarafı, bu, daha -Uönce işaret ettiğiniz gibi kullanılarak yapılır .


7
"Bu sorunu çözmek için, yerel repo'mdaki yapay dizin indirilemedi." Bu benim için çalıştı. Ben de Netbeans kullanıyorum.

16
Maven önbelleğe alınan yapının geçersiz olduğunu belirtirse, bunu neden kendi başına çözemez?
Stefan

1
"zamanlanmış bir görevin yapılandırılması" ne anlama gelir ve "bu -U kullanılarak yapılır", lütfen bunları objektif Eclipse UI terimlerine koyabilir misiniz?
user2568374

1
Eclipse IDE demek istediğini sanıyorum. Teori, en son SNAPSHOT'u indirmeniz gerektiğidir. Bunu yapmak için maven komutunuza '-U' parametresini eklemeniz gerekir, örn. Mvn clean compile -U. Şimdi, bu maven komutunu komut satırından ya da Eclipse üzerinden 'anlık görüntüyü her zaman güncelle' kutusunu işaretleyerek çalıştırabilirsiniz. Emin değilim, bu günlerde intellij kullanıyorum. 'Zamanlanmış bir görevi yapılandırma' bölümü, Nexus sunucunuzda olmasını istediğiniz belirli bir yapılandırmayı ifade eder. Bu ikincisinin Eclipse ile böyle bir ilgisi yoktur.
Christian Achilli

10
Bu OP'nin gerçek sorusuna cevap vermez.
8bitjunkie

116

yerel deponuzdaki karşılık gelen başarısız eser dizinini silebilirsiniz. Ayrıca hedefte de kullanabilirsiniz -U. İşi yapacak. Bu maven 3 ile çalışır. Yani maven 2'ye geri dönmeye gerek yoktur.


2
Neden bu kadar basit olabileceği zaman depo yapılandırmasıyla uğraşmak?
Koraktor

9
Lütfen cevaplamadan önce soruyu dikkatle okuyun. OP, güncellemeyi nasıl zorlayacağınızı değil, zaman aralığını nasıl ayarlayacağınızı soruyor.
i3ensays

2
Soruya bir cevap değil, ama bu istisnayı vurduklarında insanların ihtiyacı olan şey budur. Çünkü yerel bir lib geliştirme üzerinde çalışırken en iyisi, aralığın sizi karıştırmasına izin vermek yerine böyle bir lib'i silmektir.
mcvkr

~/.m2/settings.xml/<repositories>-U seçenekleriyle bu sorunu çözmek için altına geçerli depolar eklenmiş
olmalıyız

64

Bununla ilgili bir sorunum vardı, ancak Raghuram'ın yanıtı yardımcı oldu. (Cevabını oylayacak henüz yeterli itibarım yok). NetBeans ile birlikte Maven kullanıyorum ve aynı alıyordum "... yerel depoda önbelleğe alındı, nexus'un güncelleme aralığı geçene veya güncellemeler zorlanana kadar çözünürlük yeniden denenmeyecek -> [Yardım 1]" hatası .

Bunu düzeltmek <updatePolicy>always</updatePolicy>için ayarlar dosyasına ekledim (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
Benim durumumda yardımcı olmadı.
arcy

64

Temel olarak ne olur, varsayılan güncellemeye göreMaven.Maven günlük olarak depodan kavanozları getirecek. 1 denemede internet çalışmadıysa, bu kavanozu 24 saat geçene kadar tekrar getirmeye çalışmaz.

Çözüm :

Ya kullanın

mvn -U clean install

nerede -U repo güncellemeye zorlayacak

veya kullan

<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>

ayarlarınızda .xml


39

Ayar referansına göre :

updatePolicy: Bu öğe, güncellemelerin ne sıklıkta yapılmaya çalışılacağını belirtir. Maven, yerel POM'un zaman damgasını (bir havuzun maven-meta veri dosyasında saklanan) uzaktan kumanda ile karşılaştırır. Seçenekler şunlardır: her zaman, günlük (varsayılan), aralık: X (burada X, dakika cinsinden bir tamsayıdır) veya asla.

Misal:

<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
Yanıtınız için teşekkürler; Ancak, "updatePolicy" ayarıyla biraz denedim ve "Bulunamadı" / "Hata Önbelleğe Alındı" / "çözünürlüğü yeniden denenmeyecek" hatası üzerinde hiçbir etkisi yok gibi görünüyor.
cprice404

23

@ Sanjeev-Gulgani'nin önerdiği gibi bunu temiz bir kurulumla (önbelleğe alınmış bağımlılıkları geçersiz kılmak) çözebilirsiniz. mvn -U clean install

Ayrıca, soruna neden olan önbelleğe alınmış bağımlılığı da kaldırabilirsiniz

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

Daha fazla bilgi için mvn belgelerine bakın .


9

Bu hata bazen yanıltıcı olabilir. Kontrol etmek isteyebileceğiniz 2 şey:

  1. Repo bağımlılığı için gerçek bir JAR var mı? Hata iletiniz, aradığı yerin URL'sini içeriyor, bu nedenle oraya gidin ve bağımlılığınızla eşleşen klasöre göz atın. Bir kavanoz var mı? Değilse, bağımlılığınızı değiştirmeniz gerekir. (örneğin, bir alt projeye işaret etmeniz gerektiğinde, üst düzey bir ebeveyn bağımlılığına işaret ediyor olabilirsiniz)

  2. Kavanoz uzak depoda varsa, yerel kopyanızı silin. .M2 / repository (ls -a altında Linux'ta gizli olduğunu göstermek için) altında (farklı yapılandırılmadıkça) ana dizininizde olacaktır.


4
Bu OP'nin sorusuyla ilgili değil. Hatanın gösterilmesinin nedeni mesele değildir. OP, yeniden deneme aralığının nasıl ayarlanacağını bilmek istiyor.
8bitjunkie

1
Bu OP'nin görevinin ardında ima edilen bir sorun olabilir ve benim sorunum olduğu ortaya çıktı. Benim <groupId> benim bir yazım hatası olduğu ortaya çıktı bir seçenek gözden geçirerek beni doğru yolda götürdü.
James Oravec

1
Soru, aralığın nasıl ayarlanacağıdır?
smilyface

7

Eclipse kullanıyorsanız, Windows -> Tercihler -> Maven'e gidin ve "Uzak depolardaki bağımlılıkları otomatik olarak güncelleme" onay kutusunun işaretini kaldırın.

Bu Maven 3 ile de çalışır.


1
için doğrulandı: tutulma: Juno Servis Sürümü 2. m2e: v 1.3.1
user77115

8
Bu OP'nin sorusuna cevap vermiyor.
8bitjunkie

5

Deponuzdaki tüm "_maven.repositories" dosyalarını silmeniz gerekir.


3
yardım etmiyor ya da en azından benim durumumda değil
arcy

1
Benim için çalıştı. Hepsini
sildim

5

Bu, yerel bağımlı deponuzdan ilgili bağımlılığı sildikten sonra çalışır

/user/.m2/repository/path

Bu bir cazibe gibi çalışıyor
Jadda

3

Proxy deposu olarak Nexus kullanıyorsanız, varsayılan değer olan 1440 dakika (veya 24 saat) "Bulunmayan Önbellek TTL" ayarına sahiptir. Bu değerin düşürülmesi yardımcı olabilir (Depolar> Yapılandırma> Sona Erme Ayarları).

Daha fazla bilgi için belgelere bakın .


2

Bu problemi nasıl buldum,

Eclipse Juno'dan Luna'ya geçtiğimde ve maven projelerimi SVN deposundan aldığımda, uygulamaları oluştururken de aynı sorunları yaşadım.

Ne denedim? Temiz yerel havuzu denedim ve sonra -U seçeneğini kullanarak tüm sürümleri tekrar güncelledim. Ama sorunum devam etti.

Sonra Pencere -> Tercihler -> Maven -> Kullanıcı Ayarları -> 'ya gittim ve Yerel Depo altındaki Reindex düğmesine tıkladım ve reindex'in gerçekleşmesini bekleyin.

Hepsi bu, sorun çözüldü.


4
Bu OP'nin sorusuna cevap vermiyor.
8bitjunkie

2

Son olarak başlık sorusunu cevaplamak için: (Proje, profil veya ayarlar) içinde (istemci tarafı ayarı)

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

... etiket.

(Şu anda, maven: 3.6.0, ancak "çok geriye" uyumlu) olası değerleri varsayalım:

/**
 * 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";

Bu etiketin mevcut (maven 3.6.0) değerlendirmesi şu şekilde uygulanır:

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;
}

..ile:

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;
}

... lastModifiedaltta yatan bir nesnenin (yerel dosya) "değiştirilmiş zaman damgası" nerede .


Özellikle interval:xayar için:

  • Kolon :o sıkı değil - herhangi bir "boş olmayan" karakteri yapabileceğini ( =, , ...).
  • negatif değerler x < 0"asla" vermelidir.
  • interval:0 "Minly" (0-59 sn. Veya üstü ...) aralığını varsayarım.
  • sayı biçimi istisnaları 24 * 60dakika (~ "günlük") ile sonuçlanır .

..see: DefaultUpdatePolicyAnalyzer , DefaultMetadataResolver # resolMetadata () ve RepositoryPolicy


1

İçin Intellij kullanıcıları şu benim için çalıştı:

Paketinize sağ tıklayın

Maven > Reimport 

ve

Maven > Generate Sources and Update Folders

0

Biraz alakalı .. Başlamıştım

"[HATA] Proje test projesinde hedef yürütülemedi: Proje kod adı için bağımlılıklar çözülemedi: jar: 1.0-0: myjarname-core: bundle: 1.0-0 in http://repo1.maven.org/maven2yerel depoda önbelleğe alınamadı , çözünürlük olmayacak merkezi güncelleme aralığı geçinceye veya güncellemeler zorlanana kadar yeniden denenir -> [Yardım 1] "

Bu hata, Maven 3yerine yanlışlıkla kullanılmasından kaynaklandı Maven 2. İlk google aramam beni bu sayfaya götürdüğü için birinin biraz zaman kazanabileceğini düşündüm.


2
Projeniz sizi Maven 3'ü kullanmaya zorlarsa ne olur? İki versiyon arasında nelerin değiştiğine dair bir fikriniz var mı?
Xr.

1
Benim sorunum tam da buydu. Maven 3'ün neden 2'den çok farklı olduğu hakkında hiçbir fikrim yok.
CatsAndCode

maven3 yerine maven2 nasıl kurulur?
trilyonlar

Çok genel bir soru .. hangi işletim sistemi? Ubuntu için "sudo apt-get install maven2" ... ya da herhangi bir Linux / UNIX için arşivi indirebilir ve yolunuza ekleyerek kendiniz derleyebilirsiniz. Deneyin: shameerarathnayaka.blogspot.com/2012/01/…
sdanzig

Bu benim için çalıştı & aslında buradaki cevabımdan buna geri bağlarım .
shiri

0

Maven, depodaki güncellemeleri kontrol etme veya depoyu uzaktan kumanda ile senkronize tutma sıklığını belirlemek için updatePolicy ayarlarına sahiptir .

  • UpdatePolicy için varsayılan değer günlüktür.
  • Diğer değerler her zaman / asla / XX (dakika cinsinden aralığı belirterek) olabilir.

UpdatePolicy'i yapılandırmak için maven kullanıcı ayarları dosyasına aşağıdaki kod örneği eklenebilir.

<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
Bu OP'nin sorusuna cevap vermiyor. OP, sorunun ne olduğunu ve yerel m2 depolarını nasıl güncelleyeceklerini anladıkları açıktır. OP aralığın nerede olduğunu ve nasıl değiştirileceğini soruyor. Hiç bir IDE'den bahsedilmiyor. Soruyu okumadınız.
8bitjunkie

@ Oldukça doğrudan 8bitjunkie Bu cevaplar soru: If client-side, how do I configure it?. Bu cevap herhangi bir IDE özelliği ile ilgili değildir. MVN sadece depo yapılandırmasıdır. updatePolicyOP soruyor aralığıdır.
montrivo

Bu kabul edilen cevap @ cprice404 olabilir.
montrivo


0

Ben bu sorunu vardı ve önerilen kapsamlı açıklamaları bu bunu düzeltmek için bana yardımcı oldu.

Bildirilen ikinci sorun benim sorunumdu. repositoryProjemde pom dosyasının bir kısmını yapmasını eklediğim üçüncü taraf bir depo kullandım . pluginrepositoryBu sorunu gidermek için aynı depo bilgilerini ekliyorum .


0

Farklı bir eserle benzer bir hatayla karşılaştım.

<...> yerel depoda önbelleğe alındı, merkezi güncelleme aralığı geçene veya güncellemeler zorlanana kadar çözünürlük yeniden denenmeyecek

Yukarıda açıklanan çözümlerin hiçbiri benim için işe yaramadı. Sonunda bu çözüme IntelliJ IDEA tarafından Dosya> Invalidate'yi Önbellekler / Yeniden Başlat ...> geçersiz ve Yeniden Başlat .


0

Benim durumumda birden fazla projem vardı

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

"DomainProject" dizininden "mvn clean install" yaptığım zaman, bu hatayı alırdım.

"ProjectRoot" dizininden "mvn clean install" yaptığımda sorun ortadan kalktı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.