42 votes

Nettoyage du référentiel local Maven sur la machine de construction

Sur un serveur de build CI, le référentiel Maven local remplit le système de fichiers de manière répétitive (après quelques jours). Quelle stratégie font les autres pour supprimer le référentiel local dans un tel cas? -Max

27voto

Rich Seller Points 46052

La dépendance Maven plugin a une purge-local-dépôt de l'objectif qui permet de supprimer les dépendances pour un projet donné, à partir d'un référentiel local, si c'est courir le dire une fois par jour sur chaque projet, les captures d'écran ne s'accumule pas.


Sinon il y a un plus de la terre brûlée approche que l'on pourrait prendre. Comme le problème est généralement la horodaté instantané des artefacts, vous pouvez utiliser le maven-antrun-plugin pour supprimer tous les fichiers qui correspondent à la collection de ressources patron.

Par exemple (à noter qu'il peut avoir besoin de quelques ajustements, comme je l'ai fait de mémoire):

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <phase>package</phase>
      <configuration>
        <tasks>
          <delete>
            <fileset dir="${settings.localRepository}">
              <include name="**/*.jar"/>
              <exclude name="**/*.pom"/>
              <exclude name="**/*.war"/>
              <exclude name="**/*.ear"/>
              <exclude name="**/*.md5"/>
              <exclude name="**/*.sha"/>
              <!--any other extensions?...-->
              <!--match the timestamp pattern-->
              <containsregexp expression="[0-9]{8}.[0-9]{6}-[0-9]+"/>
            </fileset>
          </delete>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

19voto

Dominic Mitchell Points 5719

Si vous utilisez hudson, vous pouvez configurer un travail planifié pour supprimer simplement le référentiel entier une fois par jour ou quelque chose du genre. J'ai un travail appelé hudson-maven-repo-clean qui a cette configuration:

  • Construire / Exécuter shell: rm -rf ~hudson/.m2/repository
  • Construire des déclencheurs / Construire périodiquement: 0 0 * * *

4voto

Justin Searls Points 3078

En plus de purger-local-dépôt (qui se lit à moi comme une option nucléaire, car il offre un excludes configuration plutôt explicite includes), jetez un oeil à la suppression d'un Projet Artefact mojo. Je suis à la recherche pour la mettre en œuvre maintenant, comme mon exact de cas d'utilisation est d'effacer de la grande GUERRE et de l'OREILLE clichés qui sont en cours de construction sur mon implant (et parfois de la station de travail sur les machines.

3voto

cemonds Points 100

Nous utilisons en particulier pour ce but de construire-helper plugin. Dans notre société mère pom est la suppression de-projet-artefact objectif incorporé dans le profil de notre hudson construit. De cette façon, toutes les anciennes versions de cet artefact sont supprimés avant l'installation de la actuellement de version.

...
<profile>
  <id>hudson</id>
  <activation>
    <property>
      <name>BUILD_TAG</name>
    </property>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>remove-old-artifacts</id>
            <phase>package</phase>
            <goals>
              <goal>remove-project-artifact</goal>
            </goals>
            <configuration>
              <removeAll>true</removeAll>
            </configuration>
          </execution>
        </executions>
      </plugin>
  ...

L'utilisation de removeAll défini à true permet d'effacer toutes les autres instantanés à l'exception de celui de votre travail. Cela peut être dangereux car il peut signifier instantanés pour une branche sera anéanti ainsi.

Par exemple, si vous disposez d'un instantané 1.0.0.18-INSTANTANÉ représentant de la TÊTE et instantané 1.0.1.17-CLICHÉ représentant une branche, l'exécution de ce plugin avec 1.0.0.18-INSTANTANÉ de construire effacer le 1.0.1.17-dossier de capture instantanée.

Pour contourner ce scénario, le removeAll doit être définie sur false.

1voto

Nous avons employé un peu différente (et sournois) technique. Tous les artefacts qui construisent des "grandes choses" (les Oreilles, les Guerres, les Goudrons) ont leurs déployer emplacement remplacé comme suit:

<properties>
   <discard-me-in-bit-bucket>file://${basedir}/target/_DELETEME</discard-me-in-bit-bucket> 
</properties>

<distributionManagement>
  <repository>
    <id>upload-InternalSite</id>
    <name>SoftwareLibrary External</name>
    <url>${discard-me-in-bit-bucket}</url>
    <layout>legacy</layout>
    <uniqueVersion>false</uniqueVersion>
  </repository>
  <snapshotRepository>
    <id>upload-InternalSite</id>
    <name>Repository Name</name>
    <url>${discard-me-in-bit-bucket}</url>
    <layout>legacy</layout>
    <uniqueVersion>false</uniqueVersion>
  </snapshotRepository>
</distributionManagement>

Cette stratégie provoque le déployer pour objectif de mettre les choses dans le répertoire cible, ce qui est détruit par la prochaine opération de NETTOYAGE. Pour obtenir encore plus agressif, nous avons un postbuild étape qui fait cela:

find -type d -name '*_DELETEME' -exec rm -rf '{}' ';' -prune || echo $?

Nous employons encore une stratégie de plus, trop de. Dans Hudson/Jenkins nous fournir un fichier de settings de la place .m2 référentiel dans l'espace de travail pour le travail. Cela nous permet de supprimer l'ensemble du référentiel avant ou après le travail. Il fait aussi des artefacts visibles dans l'espace de travail qui facilite le débogage de certains problèmes.

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