Kiedy maven mówi „rozdzielczość nie zostanie ponowiona, dopóki nie upłynie interwał aktualizacji MyRepo”, to gdzie ten interwał jest określony?

587

Za pomocą maven od czasu do czasu trafiam w artefakt pochodzący z repozytorium innej firmy, którego jeszcze nie zbudowałem ani nie zawarłem w moim repozytorium.

Otrzymam komunikat o błędzie od klienta maven informujący, że artefaktu nie można znaleźć:

Nie udało się znaleźć org.jfrog.maven.annomojo: maven-plugin-anno: jar: 1.4.0 in http://myrepo:80/artifactory/repozostało zbuforowane w lokalnym repozytorium, rozwiązanie nie będzie podejmowane ponownie, dopóki nie upłynie interwał aktualizacji MyRepo lub aktualizacje zostaną wymuszone -> [ Pomoc 1]

Teraz mogę zrozumieć, co to znaczy, a może po prostu ponownie uruchomić mojego polecenia z -U, a rzeczy pracują zazwyczaj drobne stamtąd na out .

Uważam jednak, że ten komunikat o błędzie jest wyjątkowo nieintuicyjny i staram się oszczędzić moim współpracownikom pewnych problemów.

Próbuję dowiedzieć się, czy jest miejsce, w którym mogę zmodyfikować to update intervalustawienie.

  1. Czy to, update intervalco jest wymienione w tym komunikacie o błędzie, jest ustawieniem po stronie klienta czy po stronie serwera?
  2. Jeśli po stronie klienta, jak to skonfigurować?
  3. Jeśli po stronie serwera, czy ktoś wie, jak / jeśli Nexus / Artifactory ujawnia te ustawienia?
cprice404
źródło
11
Otrzymałem ten sam komunikat o błędzie po dodaniu 1 dodatkowej zależności do mojego pom.xml. Dla mnie to wyraźnie BŁĄD. Nie rozumiem, dlaczego tak się dzieje! Jeśli dodam zależności do mojego projektu i uruchomię kompilację mvn, to powinno po prostu pobrać pliki jar. To zachowanie jest całkowicie nonsensowne!
Robert Reiz,
Niedawno tego doświadczyłem i po wszystkich przeczytanych odpowiedziach kolejnym dodatkowym krokiem jest ponowny import projektu w Eclipse (w moim przypadku). To było zbyt dziwne, że Eclipse ciągle mnie wkurzał wtyczką, której nie ma w moim pom.xml.
Incognito,
Ważne pytanie dla mnie !! Dzięki stary!
Pan Noddy
Dla mnie okazało się, że dane repozytorium było powiązane z GitHub i adres URL przeszedł w tryb offline (uzyskanie 404). Zaktualizowałem repozytorium do naszego wewnętrznego serwera i zadziałało.
cbmeeks

Odpowiedzi:

286

Kiedyś rozwiązałem ten problem, usuwając odpowiedni nieudany katalog artefaktów w moim lokalnym repozytorium. Następnym razem, gdy uruchomię polecenie maven, pobieranie artefaktów zostanie ponownie uruchomione. Dlatego powiedziałbym, że to ustawienie po stronie klienta.

Strona Nexus (strona repo serwera), ten problem został rozwiązany podczas konfigurowania zaplanowanego zadania. Po stronie klienta odbywa się to za pomocą -U, jak już wskazałeś.

Christian Achilli
źródło
7
„Rozwiązuję ten problem, usuwając odpowiedni nieudany katalog artefaktów w moim lokalnym repozytorium”. To zadziałało dla mnie. Używam również Netbeans.
16
Jeśli Maven zauważy, że artefakt w pamięci podręcznej jest nieprawidłowy, dlaczego nie może rozwiązać tego samodzielnie?
Stefan
1
co oznacza „konfigurowanie zaplanowanego zadania” i „odbywa się to za pomocą -U”, czy możesz je umieścić w obiektywnych warunkach interfejsu użytkownika Eclipse?
user2568374
1
Zakładam, że masz na myśli Eclipse IDE. Teoria polega na tym, że musisz pobrać najnowszą wersję SNAPSHOT. W tym celu należy dodać parametr „-U” do polecenia maven, np. Mvn clean compile -U. Teraz możesz uruchomić to polecenie maven za pomocą wiersza polecenia lub Eclipse, zaznaczając pole „zawsze aktualizuj migawkę”. Nie jestem pewien, obecnie używam intellij. Część „Konfigurowanie zaplanowanego zadania” odnosi się do konkretnej konfiguracji, którą chcesz mieć na serwerze Nexus. To ostatnie nie ma nic wspólnego z Eclipse jako takim.
Christian Achilli
10
To nie odpowiada na pytanie operacyjne OP.
8bitjunkie
116

możesz usunąć odpowiedni uszkodzony katalog artefaktów w swoim lokalnym repozytorium. A także możesz po prostu użyć -Ucelu. Wykona pracę. Działa to z maven 3. Nie trzeba więc obniżać wersji do maven 2.

kds
źródło
2
Po co mieszać z konfiguracją repozytorium, skoro może być tak proste?
Koraktor
9
Przeczytaj uważnie pytanie, zanim odpowiesz. OP pyta, jak ustawić interwał czasowy, a nie jak wymusić aktualizację.
i3ensays
2
Nie jest to odpowiedź na pytanie, ale tego właśnie potrzebują ludzie, gdy trafią na ten wyjątek. Ponieważ pracując nad rozwojem lokalnej biblioteki lib, najlepiej jest usunąć taką bibliotekę zamiast pozwolić, aby interwał mylił się.
mcvkr
Powinniśmy dodać prawidłowe repozytoria, ~/.m2/settings.xml/<repositories>aby rozwiązać ten problem z opcjami -U
Kanagavelu Sugumar
64

Miałem powiązany problem, ale odpowiedź Raghurama pomogła. (Nie mam jeszcze wystarczającej reputacji, aby głosować na jego odpowiedź). Korzystam z Maven w pakiecie z NetBeans i otrzymywałem ten sam komunikat „... został zapisany w pamięci podręcznej w lokalnym repozytorium, rozdzielczość nie zostanie ponowiona, dopóki nie upłynie interwał aktualizacji nexusa lub aktualizacje zostaną wymuszone -> [Pomoc 1] błąd .

Aby to naprawić, dodałem <updatePolicy>always</updatePolicy>do pliku ustawień (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>
MrDrews
źródło
8
Nie pomogło w moim przypadku.
arcy
64

Zasadniczo dzieje się tak, zgodnie z domyślną aktualizacją Polityka maven.Maven będzie codziennie pobierał słoiki z repozytorium, więc jeśli podczas pierwszej próby Twój Internet nie działał, nie będzie próbował pobrać słoika ponownie, dopóki nie spędzą 24 godzin.

Rozdzielczość:

Albo użyj

mvn -U clean install

gdzie -U wymusi aktualizację repozytorium

albo użyj

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

w twoich ustawieniach.xml

Sanjeev Guglani
źródło
39

Zgodnie z odniesieniem do ustawień :

updatePolicy: ten element określa częstotliwość prób aktualizacji. Maven porówna znacznik czasowy lokalnej POM (przechowywany w pliku maven-metadanych repozytorium) ze zdalnym. Dostępne są następujące opcje: zawsze, codziennie (domyślnie), interwał: X (gdzie X jest liczbą całkowitą w minutach) lub nigdy.

Przykład:

<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>
Raghuram
źródło
7
Dziękuję za odpowiedź; jednakże dość dużo eksperymentowałem z ustawieniem „updatePolicy” i wydaje się, że nie ma to wpływu na błąd „Nie znaleziono” / „Błąd buforowania” / „rozdzielczość nie zostanie ponownie podjęta”.
cprice404
23

Możesz to rozwiązać za pomocą czystej instalacji (przesłaniającej wszelkie buforowane zależności), jak sugeruje @ Sanjeev-Gulgani z mvn -U clean install

Możesz także po prostu usunąć buforowaną zależność, która powoduje problem

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

Zobacz mvn docs, aby uzyskać więcej informacji.

sfletche
źródło
9

Ten błąd może czasem wprowadzać w błąd. 2 rzeczy, które możesz chcieć sprawdzić:

  1. Czy istnieje rzeczywisty plik JAR dla zależności w repozytorium? Twój komunikat o błędzie zawiera adres URL miejsca, w którym szuka, więc przejdź tam, a następnie przejdź do folderu pasującego do Twojej zależności. Czy jest słoik? Jeśli nie, musisz zmienić swoją zależność. (na przykład możesz wskazywać zależność nadrzędnego najwyższego poziomu, kiedy powinieneś wskazać podprojekt)

  2. Jeśli słoik istnieje na zdalnym repozytorium, usuń po prostu lokalną kopię. Będzie on w twoim katalogu domowym (chyba że skonfigurowano inaczej) w .m2 / repository (ls -a, aby pokazać ukryty, jeśli w systemie Linux).

MattC
źródło
4
Nie dotyczy to pytania OP. Przyczyna, dla której błąd jest wyświetlany, nie jest istotna. OP chce wiedzieć, jak ustawić interwał ponawiania.
8bitjunkie
1
To może być dorozumiany problem za postem OP i okazał się moim problemem. Okazało się, że w mojej <groupId> miałem literówkę, która po przejrzeniu opcji 1 poprowadziła mnie właściwą ścieżką.
James Oravec
1
Pytanie brzmi, jak ustawić interwał?
smilyface 10.10.17
7

Jeśli używasz Eclipse, przejdź do Windows -> Preferencje -> Maven i odznacz pole „Nie aktualizuj automatycznie zależności ze zdalnych repozytoriów”.

Działa to również z Maven 3.

Ashoka
źródło
1
zweryfikowane pod kątem: zaćmienie: Juno Service Release 2. m2e: v 1.3.1
user77115,
8
To nie odpowiada na pytanie OP.
8bitjunkie
5

Musisz usunąć wszystkie pliki „_maven.repositories” ze swojego repozytorium.

Riad
źródło
3
nie pomaga, a przynajmniej nie w moim przypadku
arcy
1
To zadziałało dla mnie. Nie
usunąłem
5

Działa to po usunięciu powiązanej zależności z lokalnego repozytorium maven

/user/.m2/repository/path
Prawda
źródło
To działa jak urok
Jadda
3

Jeśli używasz Nexusa jako repozytorium proxy, ma ono ustawienie „Nie znaleziono pamięci podręcznej TTL” z wartością domyślną 1440 minut (lub 24 godzin). Obniżenie tej wartości może pomóc (Repozytoria> Konfiguracja> Ustawienia ważności).

Zobacz dokumentację aby uzyskać więcej informacji.

chipiik
źródło
2

Jak mam ten problem,

Kiedy zmieniłem z Eclipse Juno na Luna i sprawdziłem moje projekty maven z repozytorium SVN, miałem te same problemy podczas tworzenia aplikacji.

Co próbowałem Próbowałem wyczyścić lokalne repozytorium, a następnie ponownie zaktualizować wszystkie wersje za pomocą opcji -U. Ale mój problem trwał.

Następnie poszedłem do okna -> Preferencje -> Maven -> Ustawienia użytkownika -> i kliknąłem przycisk Reindex w Lokalnym repozytorium i czekam na reindex.

To wszystko, problem został rozwiązany.

Lyju I Edwinson
źródło
4
To nie odpowiada na pytanie OP.
8bitjunkie
2

Aby w końcu odpowiedzieć na pytanie tytułowe: To jest (ustawienie po stronie klienta) w (projekt, profil lub ustawienia)

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

... tag.

(Obecnie maven: 3.6.0, ale przypuszczam, że możliwe są „dalekie wstecz” kompatybilne):

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

Bieżąca ocena tego tagu (maven 3.6.0) jest realizowana w następujący sposób:

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

..z:

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

... gdzie lastModifiedjest (zmodyfikowany plik lokalny) „zmodyfikowany znacznik czasu” artefaktu / każdego z nich.


W szczególności dla interval:xustawienia:

  • dwukropek :nie jest to ścisłe - dowolny znak „non-empty” może to zrobić ( =, ...).
  • wartości ujemne x < 0powinny dawać „nigdy”.
  • interval:0 Zakładałbym „drobiazgowo” (0–59 sekund lub więcej…) interwał.
  • wyjątki od formatu liczb dają 24 * 60minuty (~ „codziennie”).

.. patrz: DefaultUpdatePolicyAnalyzer , DefaultMetadataResolver # resolMetadata () i RepositoryPolicy

xerx593
źródło
1

Dla użytkowników Intellij działało dla mnie:

Kliknij pakiet prawym przyciskiem myszy

Maven > Reimport 

i

Maven > Generate Sources and Update Folders
Emerica
źródło
0

Nieco odpowiednie. Dostawałem

„[BŁĄD] Nie udało się wykonać celu w projekcie testprojektu: Nie można rozwiązać zależności dla projektu moja_nazwa: jar: 1.0-0: Nie można znaleźć mojej_nazwy-rdzenia: pakiet: 1.0-0 w http://repo1.maven.org/maven2pamięci podręcznej w lokalnym repozytorium, rozdzielczość nie będzie ponawiane próby, dopóki nie upłynie interwał aktualizacji centrali lub aktualizacje zostaną wymuszone -> [Pomoc 1] ”

Ten błąd został spowodowany przypadkowym użyciem Maven 3zamiast Maven 2. Po prostu pomyślałem, że może to komuś zaoszczędzić trochę czasu, ponieważ moja pierwsza wyszukiwarka google doprowadziła mnie do tej strony.

sdanzig
źródło
2
Co się stanie, jeśli Twój projekt zmusi Cię do korzystania z Maven 3? Czy masz jakieś pojęcie, co zmieniło się między dwiema wersjami?
Xr.
1
To właśnie był mój problem. Nie mam pojęcia, dlaczego Maven 3 różni się tak bardzo od 2. Dziękujemy za opublikowanie tego i oszczędzanie mi marnowania czasu na szukanie rozwiązania.
CatsAndCode
jak zainstalować maven2 zamiast maven3?
tryliony
Bardzo ogólne pytanie ... jaki system operacyjny? W systemie Ubuntu możesz wykonać polecenie „sudo apt-get install maven2” ... lub w dowolnym systemie Linux / UNIX, możesz po prostu pobrać archiwum i skompilować je samodzielnie, dodając je do swojej ścieżki. Spróbuj: shameerarathnayaka.blogspot.com/2012/01/…
sdanzig
To działało dla mnie i w rzeczywistości odsyłam do tego z mojej odpowiedzi tutaj .
shiri
0

Maven ma ustawienia updatePolicy określające częstotliwość sprawdzania aktualizacji w repozytorium lub synchronizację repozytorium ze zdalnym.

  • Domyślna wartość updatePolicy to codziennie.
  • Inne wartości mogą być zawsze / nigdy / XX (określając interwał w minutach).

Poniższy przykładowy kod można dodać do pliku ustawień użytkownika maven w celu skonfigurowania 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>
VYSAKHAN SREEKUMARAN KASTHURI
źródło
3
To nie odpowiada na pytanie OP. OP jest jasne, że rozumieją, na czym polega problem i jak zaktualizować lokalne repozytorium m2. OP pyta, gdzie znajduje się interwał i jak go zmienić. W ogóle nie ma wzmianki o żadnym IDE. Nie przeczytałeś pytania.
8bitjunkie
@ 8bitjunkie to jest odpowiedź dość bezpośrednio pytanie: If client-side, how do I configure it?. Ta odpowiedź nie dotyczy żadnej funkcji IDE. Jest to konfiguracja tylko repozytorium mvn. Jest updatePolicyto interwał, o który prosi OP.
montrivo
Może to być zaakceptowana odpowiedź @ cprice404.
montrivo
0

W moim przypadku rozwiązanie było głupie: właśnie miałem niepoprawne wersje zależności.

Maria Pomazkina-Karpikova
źródło
0

Miałem ten problem, a wyczerpujące opisy zaproponowane w tym pomogły mi go naprawić.

Drugim zadeklarowanym problemem był mój problem. Użyłem repozytorium innej firmy, które właśnie dodałem, do repositoryczęści pliku pom w moim projekcie. Dodaję te same informacje z repozytorium, pluginrepositoryaby rozwiązać ten problem.

epcpu
źródło
0

Miałem podobny błąd z innym artefaktem.

<...> zostało buforowane w lokalnym repozytorium, rozwiązanie nie będzie ponawiane, dopóki nie upłynie interwał aktualizacji centrali lub aktualizacje nie zostaną wymuszone

Żadne z wyżej opisanych rozwiązań nie działało dla mnie. W końcu rozwiązałem to w IntelliJ IDEA przez Plik> Unieważnij pamięć podręczną / Uruchom ponownie ...> Unieważnij i uruchom ponownie .

NoraT
źródło
0

W moim przypadku miałem wiele projektów

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

Kiedy zrobiłem „mvn clean install” z katalogu „domainProject”, dostałem komunikat o błędzie.

Kiedy zrobiłem „mvn clean install” z katalogu „projectRoot”, problem zniknął.

ChetPrickles
źródło