254 votes

Comment vider le cache d'Apache Maven ?

Récemment, Apache Maven semble avoir des problèmes de mise en cache. L'exécution d'installations propres sur nos projets utilisant Windows Vista ou Windows 7 produit parfois des artefacts avec les mêmes données qu'une construction précédente, alors que les fichiers de l'artefact le plus récent auraient dû être mis à jour.

Existe-t-il un moyen de vider ce cache pour forcer maven à toujours déclencher une construction propre de l'artefact local qui doit être construit ?

En particulier, nous avons des problèmes pour construire une application web avec le plugin war. La version de Maven est 3.0.3. La version du plugin War est 2.1.1.

6voto

PedoDorf Points 1

Utilisez mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true si vous avez des plugins maven comme l'un des modules. Sinon, Maven essaiera de les recompiler, téléchargeant ainsi à nouveau les dépendances.

2voto

Maximilian Schulz Points 333

Comme certaines réponses l'ont souligné, parfois vous voulez vraiment supprimer le dépôt local entièrement, par exemple, il pourrait y avoir certains artefacts qui ne peuvent pas être purgés car ils ne sont plus référencés par le pom.

Si vous voulez que cette suppression soit intégrée 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>

-1voto

Haakon Løtveit Points 755

J'ai eu le même problème, et j'ai écrit une ligne unique en shell pour le faire.

rm -rf $(mvn help:evaluate -Dexpression=settings.localRepository\
                       -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN -B \
                       -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn | grep -vF '[INFO]')/*

Je l'ai fait en une seule ligne parce que je voulais avoir un projet Jenkins pour simplement exécuter ceci quand j'en avais besoin, ainsi je n'aurais pas à me connecter à des trucs, etc. Si vous vous autorisez un shell-script pour cela, vous pouvez l'écrire plus proprement :

#!/usr/bin/env bash
REPOSITORY=$(mvn help:evaluate \
  -Dexpression=settings.localRepository \
  -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN \
  -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
  --batch-mode \
  | grep -vF '[INFO]')

rm -rf $REPOSITORY/*

Cela devrait fonctionner, mais je n'ai pas testé tout ce script. (J'ai testé la première commande, mais pas l'ensemble du script.) Cette approche a l'inconvénient d'exécuter d'abord une grosse commande compliquée. Elle est idempotente, vous pouvez donc la tester par vous-même. La suppression est sa propre commande après, et cela vous permet de tout essayer et de vérifier qu'elle fait ce que vous pensez qu'elle fait, parce que vous ne devriez pas faire confiance aux commandes de suppression sans vérification. Cependant, il est intelligent pour une bonne raison : il est portable. Elle respecte votre fichier settings.xml. Si vous exécutez cette commande, et que vous dites à maven d'utiliser un fichier xml spécifique (l'argument -s ou --settings), cela fonctionnera toujours. Vous n'avez donc pas besoin de faire des efforts pour vous assurer que tout est identique partout.

C'est un peu laborieux, mais c'est une façon décente de faire des affaires, IMO.

-9voto

Codiee Points 1160

Il existe donc quelques commandes que vous pouvez utiliser pour le nettoyage.

 1. mvn clean cache   
 2. mvn clean install 
 3. mvn clean install -Pclean-database

La suppression du dossier de dépôt de .m2 peut également aider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X