web-dev-qa-db-fra.com

Lorsque maven indique que "la résolution ne sera pas tentée tant que l'intervalle de mise à jour de MyRepo ne s'est pas écoulé", où cet intervalle est-il spécifié?

Avec maven, je rencontre parfois un artefact provenant d'un dépôt tiers que je n'ai pas encore construit ni inclus dans mon référentiel.

Je vais recevoir un message d'erreur du client maven disant qu'un artefact est introuvable:

Échec de la recherche de org.jfrog.maven.annomojo: maven-plugin-anno: jar: 1.4.0 dans http://myrepo:80/artifactory/repo ayant été mis en cache dans le référentiel local, la résolution ne sera pas tentée tant que l'intervalle de mise à jour de MyRepo n'aura pas été mis à jour. sont forcés -> [Aide 1]

Maintenant, I comprend ce que cela signifie, et peut simplement réexécuter ma commande avec -U, et les choses en général fonctionne bien à partir de là.

Cependant, je trouve ce message d'erreur extrêmement peu intuitif et j'essaie d'éviter à mes collègues des maux de tête.

J'essaie de déterminer s'il y a un endroit où je peux modifier ce paramètre update interval.

  1. Le update interval mentionné dans ce message d'erreur est-il un paramètre côté client ou côté serveur?
  2. Si côté client, comment puis-je le configurer?
  3. Si côté serveur, sait-on comment/si Nexus/Artifactory expose ces paramètres?
488
cprice404

J'avais l'habitude de résoudre ce problème en supprimant le répertoire d'échec de téléchargement correspondant dans mon dépôt local. La prochaine fois que j'exécuterai la commande maven, le téléchargement de l'artefact sera à nouveau déclenché. Par conséquent, je dirais que c'est un paramètre côté client.

Côté Nexus (côté repo du serveur), ce problème est résolu en configurant une tâche planifiée. Côté client, cela se fait avec -U, comme vous l'avez déjà souligné.

245

vous pouvez supprimer le répertoire d'artefact défaillant correspondant dans votre référentiel local. Et vous pouvez aussi simplement utiliser le -U dans le but. Cela fera le travail. Cela fonctionne avec maven 3. Donc, pas besoin de passer à maven 2.

104
kds

J'ai eu un problème connexe, mais la réponse de Raghuram a aidé. (Je n'ai pas encore assez de réputation pour voter sa réponse). J'utilise Maven fourni avec NetBeans et le même "" a été mis en cache dans le référentiel local, la résolution ne sera pas tentée jusqu'à ce que l'intervalle de mise à jour de Nexus soit écoulé ou que les mises à jour soient forcées -> [Aide 1] " .

Pour résoudre ce problème, j'ai ajouté <updatePolicy>always</updatePolicy> à mon fichier de paramètres (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>
60
MrDrews

Selon la politique de mise à jour par défaut de maven.Maven ira chercher les pots tous les jours dans le dépôt. Ainsi, si lors de la première tentative, votre connexion Internet ne fonctionnait pas, elle n'essaierait pas d'aller chercher ce pot jusqu'à 24 heures.

Résolution:

Soit utiliser

mvn -U clean install

où -U forcera la mise à jour du référentiel

ou utiliser

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

dans votre settings.xml

39
Sanjeev Guglani

Selon les réglages référence :

updatePolicy: Cet élément spécifie la fréquence à laquelle les mises à jour doivent tenter de se produire. Maven comparera l’horodatage du POM local (stocké dans le fichier maven-métadonnées d’un référentiel) et celui-ci. Les choix sont les suivants: toujours, quotidien (par défaut), intervalle: X (où X est un entier en minutes) ou jamais

Exemple:

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

Cette erreur peut parfois être trompeuse. 2 choses à vérifier:

  1. Existe-t-il un fichier JAR pour la dépendance dans le référentiel? Votre message d'erreur contient une URL indiquant l'emplacement de la recherche. Allez-y, puis naviguez jusqu'au dossier qui correspond à votre dépendance. Y a-t-il un pot? Sinon, vous devez changer votre dépendance. (par exemple, vous pouvez pointer sur une dépendance parentale de niveau supérieur, alors que vous devriez pointer sur un sous-projet)

  2. Si le fichier JAR existe sur le référentiel distant, supprimez simplement votre copie locale. Ce sera dans votre répertoire personnel (à moins que vous n'ayez configuré différemment) sous .m2/repository (ls -a à afficher masqué si sous Linux).

8
MattC

Bien que vous puissiez résoudre ce problème avec une nouvelle installation (en remplaçant les dépendances mises en cache), comme @ Sanjeev-Gulgani le suggère avec mvn -U clean install

Vous pouvez également simplement supprimer la dépendance en cache à l'origine du problème avec

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

Voir mvn docs pour plus d'informations.

8
sfletche

Si vous utilisez Eclipse, sélectionnez Windows -> Préférences -> Maven et décochez la case "Ne pas mettre à jour automatiquement les dépendances à partir de référentiels distants".

Cela fonctionne aussi avec Maven 3.

7
ashoka

Vous devez supprimer tous les fichiers "_maven.repositories" de votre référentiel.

5
Riadh

Si vous utilisez Nexus en tant que référentiel de proxy, il possède le paramètre "TTL Cache Introuvable" avec la valeur par défaut 1440 minutes (ou 24 heures). Réduire cette valeur peut aider (Référentiels> Configuration> Paramètres d'expiration).

Voir documentation pour plus d'informations.

3
chipiik

Pour enfin répondre à la question du titre: C’est (paramètre côté client) dans (projet, profil ou paramètres)

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

... tag.

Le (actuellement, maven: 3.6.0, mais je suppose que les valeurs compatibles "très en arrière") sont:

/**
 * 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'évaluation actuelle (version 3.6.0) de cette balise est implémentée comme suit:

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

..avec:

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

... où lastModified est le "timestamp modifié" (fichier local) d'un/de chaque artefact sous-jacent.


En particulier pour le paramètre interval:x:

  • les deux points : ne sont pas si stricts - n'importe quel caractère "non vide" peut le faire (=, ...).
  • les valeurs négatives x < 0 devraient donner la valeur "jamais".
  • interval:0 Je supposerais un intervalle "minutieux" (0-59 secondes ou plus ...).
  • les exceptions de format numérique donnent 24 * 60 minutes (~ "quotidiennement").

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

2
xerx593

Cela fonctionne une fois que vous avez supprimé la dépendance associée de votre référentiel Maven local.

/user/.m2/repository/path
1
Pravin

Comment j'ai eu ce problème,

Lorsque je suis passé d’Eclipse Juno à Luna et que j’ai récupéré mes projets maven dans le dépôt SVN, j’ai eu les mêmes problèmes lors de la création des applications.

Qu'est-ce que j'ai essayé? J'ai essayé de nettoyer le référentiel local puis de mettre à jour toutes les versions à l'aide de l'option -U. Mais mon problème a continué.

Ensuite, je suis allé dans Fenêtre -> Préférences -> Maven -> Paramètres utilisateur -> et j'ai cliqué sur le bouton Réindexer sous Référentiel local et ai attendu que la réindexation se produise.

C'est tout, le problème est résolu.

1
Lyju I Edwinson

Quelque peu pertinent .. Je devenais

"[ERREUR] Echec de l'exécution de l'objectif sur le projet testproject: Impossible de résoudre les dépendances du projet nom_jar: jar: 1.0-0: Echec de la recherche du nom_jar: noyau: bundle: 1.0-0 dans http://repo1.maven.org/maven2 a été mis en cache dans le référentiel local. , la résolution ne sera pas tentée tant que l'intervalle de mise à jour de la centrale ne sera pas écoulé ou que les mises à jour ne seront forcées -> [Help 1] "

Cette erreur est due à l'utilisation accidentelle de Maven 3 au lieu de Maven 2. J'ai juste pensé que cela pourrait faire gagner du temps à quelqu'un, car ma recherche initiale sur Google m'a conduit à cette page.

0
sdanzig