Quando maven dice "la risoluzione non verrà ritentata finché non sarà trascorso l'intervallo di aggiornamento di MyRepo", dove viene specificato tale intervallo?


587

Con Maven, occasionalmente ho colpito un artefatto che proviene da un repository di terze parti che non ho ancora creato o incluso nel mio repository.

Riceverò un messaggio di errore dal client maven che dice che non è possibile trovare un artefatto:

Impossibile trovare org.jfrog.maven.annomojo: maven-plugin-anno: jar: 1.4.0 in è http://myrepo:80/artifactory/repostato memorizzato nella cache nel repository locale, la risoluzione non verrà ritentata finché non sarà trascorso l'intervallo di aggiornamento di MyRepo o gli aggiornamenti non saranno forzati -> [ Aiuto 1]

Ora, io capisco che cosa questo significa, e può semplicemente ri-eseguire il mio comando con -U, e le cose di solito lavoro multa da lì in poi .

Tuttavia, trovo questo messaggio di errore estremamente poco intuitivo e sto cercando di risparmiare un po 'di mal di testa ai miei colleghi.

Sto cercando di capire se c'è un posto in cui posso modificare questa update intervalimpostazione.

  1. Quello update intervalche è menzionato in questo messaggio di errore è un'impostazione lato client o lato server?
  2. Se lato client, come si configura?
  3. Se lato server, qualcuno sa come / se Nexus / Artifactory espongono queste impostazioni?

11
Ho ricevuto lo stesso messaggio di errore dopo aver aggiunto un'altra dipendenza al mio pom.xml. Per me questo è chiaramente un ERRORE. Non capisco perché questo accada! Se aggiungo dipendenze al mio progetto ed eseguo mvn compile, dovrei semplicemente scaricare i file jar. Questo comportamento è totalmente senza senso!
Robert Reiz,


L'ho appena sperimentato e dopo tutte le risposte che ho letto, un altro passo in più è reimportare il progetto in Eclipse (nel mio caso). Era troppo strano che Eclipse continuasse a infastidirmi con un plugin che non era nel mio pom.xml.
Incognito,

Una domanda importante per me !! Grazie compagno!
Mr. Noddy,

Per me, si è scoperto che un repository particolare era collegato a GitHub e l'URL è andato offline (ottenendo 404). Ho aggiornato il repository sul nostro server interno e ha funzionato.
cbmeeks,

Risposte:


286

Ho usato per risolvere questo problema eliminando la corrispondente directory artefatto non riuscita nel mio repository locale. La prossima volta che eseguo il comando maven, il download di artefatti viene nuovamente attivato. Pertanto direi che è un'impostazione lato client.

Lato Nexus (lato repository server), questo problema è stato risolto configurando un'attività pianificata. Lato client, questo viene fatto usando -U, come hai già sottolineato.


7
"Uso per risolvere questo problema eliminando la corrispondente directory artefatto non riuscita nel mio repository locale." Questo ha funzionato per me. Sto usando anche Netbeans.

16
Se Maven nota che l'artefatto memorizzato nella cache non è valido, perché non può risolverlo da solo?
Stefan,

1
che cosa significa "configurare un'attività pianificata" e "questo viene fatto usando -U", puoi per favore metterli in termini oggettivi dell'interfaccia utente Eclipse?
user2568374,

1
Presumo che tu intenda Eclipse IDE. La teoria è che è necessario scaricare l'ultimo SNAPSHOT. Per fare ciò è necessario aggiungere il parametro '-U' al comando maven, ad esempio mvn clean compile -U. Ora, puoi eseguire questo comando maven tramite la riga di comando o tramite Eclipse spuntando la casella 'aggiorna sempre l'istantanea'. Non sono sicuro, io uso intellij in questi giorni. La parte "configurazione di un'attività pianificata" si riferisce a una particolare configurazione che desideri avere sul tuo server Nexus. Quest'ultimo non ha nulla a che fare con Eclipse in quanto tale.
Christian Achilli,

10
Ciò non risponde alla domanda effettiva dei PO.
8bitjunkie,

116

è possibile eliminare la corrispondente directory artefatto non riuscita nel repository locale. E puoi anche semplicemente usare -Ul'obiettivo. Farà il lavoro. Funziona con Maven 3. Quindi non è necessario eseguire il downgrade a Maven 2.


2
Perché pasticciare con la configurazione del repository quando può essere così semplice?
Koraktor,

9
Si prega di leggere attentamente la domanda prima di rispondere. OP chiede come impostare l'intervallo di tempo, non come forzare un aggiornamento.
i3ensays

2
Non è una risposta alla domanda, ma questo è ciò di cui le persone hanno bisogno quando colpiscono questa eccezione. Perché quando stai lavorando su uno sviluppo lib locale, la cosa migliore è eliminare tale lib invece di lasciare che l'intervallo ti confonda.
McVkr,

Dovremmo avere repository validi aggiunti sotto ~/.m2/settings.xml/<repositories>per risolvere questo problema con le opzioni -U
Kanagavelu Sugumar

64

Ho avuto un problema correlato, ma la risposta di Raghuram ha aiutato. (Non ho ancora abbastanza reputazione per votare la sua risposta). Sto usando Maven in bundle con NetBeans e stavo ottenendo lo stesso "... è stato memorizzato nella cache nel repository locale, la risoluzione non verrà ritentata finché non sarà trascorso l'intervallo di aggiornamento di Nexus o gli aggiornamenti non saranno forzati -> [Help 1]" errore .

Per risolvere questo problema ho aggiunto <updatePolicy>always</updatePolicy>al mio file delle impostazioni (C: \ Programmi \ 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
Non ha aiutato nel mio caso.
arcy

64

Ciò che accade fondamentalmente è che, secondo l'aggiornamento predefinitoPolicy of maven.Maven recupererà i vasetti dal repository su base giornaliera.Quindi se durante il 1 ° tentativo la tua internet non funzionasse, non proverebbe a recuperare di nuovo questo vaso fino alle 24 ore trascorse.

Risoluzione:

O usare

mvn -U clean install

dove -U forzerà l'aggiornamento del repository

o usare

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

nel tuo settings.xml


39

Secondo il riferimento delle impostazioni :

updatePolicy: questo elemento specifica la frequenza con cui gli aggiornamenti dovrebbero tentare di verificarsi. Maven confronterà il timestamp del POM locale (memorizzato nel file dei metadati di un repository) con il telecomando. Le scelte sono: sempre, giornaliero (predefinito), intervallo: X (dove X è un numero intero in minuti) o mai.

Esempio:

<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
Grazie per la risposta; tuttavia, ho sperimentato un po 'con l'impostazione "updatePolicy" e sembra che non abbia alcun effetto sull'errore "Not Found" / "Failure Cached" / "non verrà tentato".
cprice404

23

Mentre puoi risolverlo con un'installazione pulita (sovrascrivendo eventuali dipendenze memorizzate nella cache) come suggerisce @ Sanjeev-Gulgani con mvn -U clean install

È anche possibile rimuovere semplicemente la dipendenza cache che causa il problema

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

Vedi mvn docs per maggiori informazioni.


9

Questo errore a volte può essere fuorviante. 2 cose che potresti voler controllare:

  1. Esiste un JAR effettivo per la dipendenza nel repository? Il tuo messaggio di errore contiene un URL di dove sta effettuando la ricerca, quindi vai lì e quindi passa alla cartella che corrisponde alla tua dipendenza. C'è un barattolo? In caso contrario, è necessario modificare la dipendenza. (ad esempio, potresti indicare una dipendenza principale di livello superiore, quando dovresti puntare a un progetto secondario)

  2. Se il barattolo esiste sul repository remoto, è sufficiente eliminare la copia locale. Sarà nella tua home directory (a meno che tu non abbia configurato diversamente) in .m2 / repository (ls -a per mostrare nascosto se su Linux).


4
Questo non è rilevante per la domanda di OP. Il motivo per cui viene mostrato l'errore non è il punto. OP vuole sapere come impostare l'intervallo di tentativi.
8bitjunkie,

1
Questo potrebbe essere un problema implicito dietro il posto di OP e si è rivelato essere il mio problema. Alla fine ho avuto un refuso nel mio <groupId> che rivedendo l'opzione uno mi ha portato sulla strada giusta.
James Oravec,

1
La domanda è: come impostare l'intervallo?
smilyface,

7

Se si utilizza Eclipse, accedere a Windows -> Preferenze -> Maven e deselezionare la casella di controllo "Non aggiornare automaticamente le dipendenze dai repository remoti".

Funziona anche con Maven 3.


1
verificato per: eclipse: Juno Service Release 2. m2e: v 1.3.1
user77115

8
Questo non risponde alla domanda di OP.
8bitjunkie,

5

Devi eliminare tutti i file "_maven.repositories" dal tuo repository.


3
non aiuta, o almeno non nel mio caso
arcy

1
Ha funzionato per me. Non li ho cancellati tutti, però, solo quello in quella specifica cartella delle dipendenze
Piyin,

5

Funziona dopo aver eliminato la dipendenza correlata dal repository di maven locale

/user/.m2/repository/path

Funziona come un incantesimo
Jadda,

3

Se usi Nexus come repository proxy, ha l'impostazione "Not Found Cache TTL" con valore predefinito 1440 minuti (o 24 ore). La riduzione di questo valore può essere d'aiuto (Archivi> Configurazione> Impostazioni di scadenza).

Vedi la documentazione per maggiori informazioni.


2

Come ho avuto questo problema,

Quando sono passato da Eclipse Juno a Luna e ho verificato i miei progetti maven dal repository SVN, ho avuto gli stessi problemi durante la creazione delle applicazioni.

Cosa ho provato? Ho provato a ripulire il repository locale e quindi aggiornare di nuovo tutte le versioni utilizzando l'opzione -U. Ma il mio problema è continuato.

Quindi sono andato su Finestra -> Preferenze -> Maven -> Impostazioni utente -> e ho fatto clic sul pulsante Reindex in Repository locale e attendo che avvenga il reindex.

Questo è tutto, il problema è stato risolto.


4
Questo non risponde alla domanda di OP.
8bitjunkie,

2

Per rispondere finalmente alla domanda sul titolo: È (un'impostazione lato client) in (progetto, profilo o impostazioni)

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

... tag.

I valori possibili (attualmente, maven: 3.6.0, ma suppongo compatibili "molto indietro") sono:

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

L'attuale valutazione (maven 3.6.0) di questo tag è implementata come segue:

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

..con:

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

... dove si lastModifiedtrova il "file locale" "timestamp modificato" di un / ciascun artefatto sottostante.


In particolare per l' interval:ximpostazione:

  • i due punti :non è che una rigorosa - qualsiasi carattere "non vuoto" potrebbe farlo ( =, , ...).
  • valori negativi x < 0dovrebbero cedere a "mai".
  • interval:0 Vorrei assumere un intervallo "minuzioso" (0-59 secondi o superiore ...).
  • le eccezioni del formato numerico si traducono in 24 * 60minuti (~ "giornalmente").

..vedi: DefaultUpdatePolicyAnalyzer , DefaultMetadataResolver # resolmetadata () e RepositoryPolicy


1

Per gli utenti Intellij, per me ha funzionato:

Fare clic con il tasto destro sul pacchetto

Maven > Reimport 

e

Maven > Generate Sources and Update Folders

0

Un po 'rilevante .. Stavo diventando

"[ERRORE] Impossibile eseguire l'obiettivo sul progetto test progetto: Impossibile risolvere le dipendenze per il progetto myjarname: jar: 1.0-0: impossibile trovare myjarname-core: bundle: 1.0-0 in è http://repo1.maven.org/maven2stato memorizzato nella cache nel repository locale, la risoluzione non sarà riprovato fino a quando l'intervallo di aggiornamento di central non è trascorso o gli aggiornamenti non sono forzati -> [Guida 1] "

Questo errore è stato causato dall'utilizzo accidentale Maven 3invece di Maven 2. Ho solo pensato che potesse salvare qualcuno un po 'di tempo, perché la mia ricerca iniziale su Google mi ha portato a questa pagina.


2
Cosa succede se il tuo progetto ti obbliga a utilizzare Maven 3? Hai qualche idea su cosa sia cambiato tra le due versioni?
Xr.

1
Questo è esattamente il mio problema. Non ho idea del perché Maven 3 sia così diverso da 2. Grazie per aver pubblicato questo e risparmiarmi di perdere altro tempo a cercare una soluzione.
CatsAndCode

come installare maven2 invece di maven3?
trilioni il

Domanda molto generica .. quale sistema operativo? Per Ubuntu, puoi fare "sudo apt-get install maven2" ... o per qualsiasi Linux / UNIX, puoi semplicemente scaricare l'archivio e compilarlo tu stesso, aggiungendolo al tuo percorso. Prova: shameerarathnayaka.blogspot.com/2012/01/…
sdanzig

Questo ha funzionato per me e in effetti ricollego a questo dalla mia risposta qui .
Shiri,

0

Maven ha le impostazioni di updatePolicy per specificare la frequenza per controllare gli aggiornamenti nel repository o per mantenere il repository sincronizzato con il telecomando.

  • Il valore predefinito per updatePolicy è giornaliero.
  • Altri valori possono essere sempre / mai / XX (specificando l'intervallo in minuti).

L'esempio di codice seguente può essere aggiunto al file delle impostazioni utente di Maven per configurare 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
Questo non risponde alla domanda di OP. OP è chiaro che comprendono qual è il problema e come aggiornare il loro repository m2 locale. OP chiede dove si trova l'intervallo e come modificarlo. Non viene menzionato alcun IDE. Non hai letto la domanda.
8bitjunkie,

@ 8bitjunkie Questa risposte abbastanza direttamente alla domanda: If client-side, how do I configure it?. Questa risposta non riguarda alcuna funzione IDE. È solo la configurazione del repository mvn. Il updatePolicyè l'intervallo il PO chiede circa.
montrivo,

Questa potrebbe essere la risposta accettata @ cprice404.
montrivo,


0

Ho avuto questo problema e le descrizioni complete proposte in questo mi hanno aiutato a risolverlo.

Il secondo problema dichiarato è stato il mio problema. Ho usato un repository di terze parti che avevo appena aggiunto per fare la repositoryparte del file pom nel mio progetto. Aggiungo le stesse informazioni sul repository pluginrepositoryper risolvere questo problema.


0

Ho avuto un errore simile con un artefatto diverso.

<...> è stato memorizzato nella cache nel repository locale, la risoluzione non verrà ritentata finché non sarà trascorso l'intervallo di aggiornamento di central o gli aggiornamenti non saranno forzati

Nessuna delle soluzioni sopra descritte ha funzionato per me. Alla fine l'ho risolto in IntelliJ IDEA con File> Cache non valide / Riavvia ...> Non valido e riavvia .


0

Nel mio caso ho avuto più progetti

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

Quando ho eseguito "mvn clean install" dalla directory "domainProject", ho ricevuto l'errore.

Quando ho eseguito "mvn clean install" dalla directory "projectRoot", il problema è scomparso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.