2009-10-12 15 views
8

¿Cómo eliminar los artefactos de construcción generados del directorio de destino de Maven? Maven genera un archivo jar o war para el directorio de destino. Me gustaría eliminar ese archivo después de que maven haya instalado el archivo jar/war en el repositorio local (es decir, después de que maven haya ejecutado el objetivo de 'instalación'). La eliminación podría ocurrir en el objetivo de instalación o en un objetivo separado que ejecuto manualmente.¿Cómo eliminar artefactos de construcción generados del directorio de destino de Maven?

Tenga en cuenta que me gustaría dejar intactas otras partes del directorio de destino, por ejemplo, target/site y target/surefire-reports.

+1

Por curiosidad, ¿cuál es la razón detrás de esto? –

+0

He visto esto antes cuando alguien quiere crear un artefacto como un archivo EXE NSIS pero está usando el tipo artefacto jar porque tiene un conjunto conveniente de enlaces de ciclo de vida, o si no les importa el artefacto intermedio (por ejemplo, el archivo jar desde el que se produce el exe.) –

+0

Básicamente estoy ejecutando la construcción maven dentro de un servidor de integración continua, y solo me interesan los informes y otras cosas que se instalan en el repositorio local. El resto de los archivos está desperdiciando espacio y mis archivos jar son bastante grandes. –

Respuesta

18

Sólo tiene que utilizar el plugin limpio y ejecutar una ejecución después de la fase de instalación:

<plugin> 
    <artifactId>maven-clean-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
     <id>auto-clean</id> 
     <phase>install</phase> 
     <goals> 
      <goal>clean</goal> 
     </goals> 
     <configuration> 
      <filesets> 
      <fileset> 
       <directory>${project.build.outputDirectory}</directory> 
       <includes> 
       <include>**/*.jar</include> 
       </includes> 
      </fileset> 
      </filesets> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
+0

+1 para el filtro, pero el elemento de directorio debe ser $ {project.build.outputDirectory} para permitir valores reemplazados –

+5

Necesitaba eliminar solo un directorio en particular de los resultados. Desde la versión 2.3, el complemento elimina todo el directorio de manera predeterminada a menos que especifique la propiedad excludeDefaultDirectories dentro de la etiqueta . – Danny

0

No hay nada integrado en Maven que pueda hacer esto. Puede usar el complemento antrun para ejecutar un script Ant luego de la instalación que borre el artefacto, o use el complemento exec para usar la línea de comando para eliminar el artefacto, o escriba su propio complemento.

Sugiero que hay poco valor, en su caso, al hacer cualquiera de estas cosas. Maven está diseñado para colocar artefactos intermedios y finales en target para hacer que las construcciones subsiguientes sean más eficientes. La razón por la cual no hay nada disponible para hacer esto ya es un indicador de que esto tiene poco valor. Si tiene valor para usted, tiene algunas opciones.

+1

Bueno, eso no es cierto. Ver la respuesta de Domi. Habiendo dicho eso, todavía me pregunto por qué uno haría esto. –

0

Yo sé que soy un poco tarde. Pero creo que el problema era que un proyecto maven archiva los artefactos automáticamente. En mi caso, desactivé el archivo automático y simplemente archivé los artefactos manualmente usando las acciones de compilación posteriores. De esta forma, solo se archivan los artefactos en los que estoy interesado. Estoy dispuesto a dejar los artefactos generados en el disco hasta que se ejecute la próxima compilación.

Cuestiones relacionadas