web-dev-qa-db-fra.com

Comment effacez-vous la mémoire cache d'Apache Maven?

Récemment, Apache Maven semble avoir des problèmes de cache. L'exécution d'installations propres sur nos projets sous Windows Vista ou Windows 7 génère parfois des artefacts avec les mêmes données que lors de la construction précédente, même si les fichiers les plus récents auraient dû être mis à jour.

Existe-t-il un moyen d'effacer ce cache pour forcer Maven à toujours déclencher une construction propre de l'artefact local à construire?

En particulier, nous avons des problèmes pour créer une application Web avec le plug-in War. La version Maven est 3.0.3. La version du plugin War est 2.1.1.

177
MetroidFan2002

Supprimez les artefacts (ou le référentiel local complet) de c:\Users\<username>\.m2\repository à la main.

193
palacsint

Pour nettoyer le cache local, essayez d’utiliser le plug-in de dépendance.

  1. mvn dependency:purge-local-repository: Il s'agit d'une tentative de suppression des fichiers du référentiel local, mais il s'agit toujours de remplir et de remplir le référentiel local une fois les éléments supprimés.
  2. mvn dependency:purge-local-repository -DreResolve=false: Ceci évite la re-résolution des dépendances mais semble aller parfois au réseau.
  3. mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false: Ceci a été ajouté par Paweł Prażak et semble bien fonctionner. J'utiliserais le troisième si vous voulez que le référentiel local soit vidé, et le premier si vous souhaitez simplement jeter le référentiel local et récupérer les dépendances.
155
Brian C.

Avez-vous vérifié/modifié les paramètres updatePolicy de vos référentiels dans votre settings.xml .

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) au distant. Les choix sont les suivants: toujours, quotidien (par défaut), intervalle: X (où X est un entier en minutes) ou jamais.

Essayez de le régler sur always.

12
FrVaBe

Je voudrais faire ce qui suit:

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end

Les drapeaux indiquent à Maven de ne pas essayer de résoudre les dépendances ni d’atteindre le réseau. Supprimer ce que vous voyez localement.

Et pour faire bonne mesure, ignorez les erreurs (--fail-at-end) jusqu'à la fin. Ceci est parfois utile pour les projets qui ont un ensemble de dépendances quelque peu perturbé ou qui reposent sur un référentiel interne quelque peu perturbé (cela se produit).

8
luis.espinal

Cela fonctionne sur Spring Tool Suite v 3.1.0.RELEASE, mais j'imagine qu'il est également disponible sur Eclipse.

Après avoir supprimé les artefacts à la main (comme indiqué par palacsint ci-dessus) dans le répertoire /username/.m2, réindexez les fichiers en procédant comme suit:

Allez dans le menu Windows-> Préférences-> Maven-> Paramètres utilisateur.

Cliquez sur le bouton "Réindexer" à côté de la zone de texte "Référentiel local". Cliquez sur "Appliquer" puis "OK" et vous avez terminé.

6
Felby

Comme certaines réponses l'ont souligné, parfois vous voulez vraiment supprimer entièrement le référentiel local, par exemple, certains artefacts ne peuvent pas être purgés car ils ne sont plus référencés par le pom.

Si vous souhaitez incorporer cette suppression dans une phase maven, comme par exemple clean, vous pouvez utiliser le maven-clean-plugin et accéder au référentiel via les paramètres, par exemple:

 <plugin>
    <inherited>false</inherited>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.1</version>
    <executions>
        <execution>
            <phase>clean</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>Base clean is attached to deleting local maven cache</echo>
                    <echo>${settings.localRepository}</echo>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <inherited>false</inherited>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <filesets>
            <fileset>
                <directory>${settings.localRepository}</directory>
            </fileset>
        </filesets>
    </configuration>
</plugin>
2
Maximilian Schulz