2010-04-09 21 views
27

De forma predeterminada, durante el proceso de creación maven está eliminando los directorios vacíos.
¿Sabe si se puede especificar un parámetro en el pom para indicarle a maven que incluya directorios vacíos en la carpeta generada de target/test-classes?Maven - cómo incluir directorios vacíos

Respuesta

31

De acuerdo con this ticket MRESOURCES-36, debe haber un elemento <includeEmptyDirs>, pero solo para Maven Resources Plugin 2.3.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.3</version> 
    <configuration> 
    <includeEmptyDirs>true</includeEmptyDirs> 
    </configuration> 
</plugin> 

Para las versiones de Maven que incluía una versión anterior del complemento Recursos:

Hasta que este problema se soluciona, aquí es una solución que he estado usando con éxito.
Agregue este elemento de complemento al project/build/plugins en su pom.xml, y cambie el directorio en la tarea mkdir.

Puede tener múltiples elementos <mkdir> para múltiples directorios. La tarea mkdir no hace nada si el directorio ya ha sido copiado por el complemento de recursos.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>create-empty-directory</id> 
     <phase>process-classes</phase> 
     <goals> 
     <goal>run</goal> 
     </goals> 
     <configuration> 
     <tasks> 
      <mkdir dir="${basedir}/target/classes/empty" /> 
     </tasks> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Este originalmente vinieron del openejb-standalone pom.xml en el proyecto openejb.

+1

Niza (y tienes mi +1), pero se me olvidó para dejar un comentario: puede que aclarar que 2.3 es la versión del plug-in de recursos, no Maven en sí (y la solución antRun era útil antes de la liberación del versión 2.3 del plugin Resource) –

+0

@Pascal: lo tiene, y he actualizado mi respuesta para reflejar mejor sus comentarios. – VonC

+0

He intentado esto con una carpeta vacía en 'scr \ main \ webapp \' y no funciona con la versión 2.6 (usando el primer enfoque anterior). ¿Deberia? – Bizmarck

2

Por lo general, hemos solucionado este problema al incluir un archivo de marcador de posición vacío en los directorios que necesitamos crear pero que no tienen contenido útil en tiempo de compilación.

Esto también tiene la ventaja de que los formatos de archivo (por ejemplo, archivos zip) que no permiten el concepto de directorios vacíos seguirán creando la estructura de directorios correcta.

14

¿Por qué necesita carpetas vacías en target/test-classes?

Por otro lado, puede usar el complemento de ensamblaje para crear carpetas vacías en archivos zip/tar.gz.

Basta con crear una entrada en su descriptor de montaje que hace referencia a una carpeta existente (en este caso src/main/resources/bin ...

<fileSet> 
    <directory>src/main/resources/bin</directory> 
    <outputDirectory>/logs</outputDirectory> 
    <directoryMode>0755</directoryMode> 
    <excludes> 
    <exclude>*</exclude> 
    </excludes> 
</fileSet> 

Los trabajos anteriores de los archivos .tar.gz y de la cremallera como bien. El modo de directorio anterior solo es necesario si crea archivos .tar.gz.

La segunda posibilidad es crear una carpeta vacía en su estructura de carpetas que se incluye con el complemento de ensamblaje (como zip, tar.gz, etc.) ... Por cierto: zip, tar.gz permitir carpetas vacías.

+4

obtiene mi +1 porque necesitaba este truco de ensamblaje, pero ¿por qué cuestiona las necesidades del OP? – Superole

1

He utilizado el plugin Asamblea como khmarbaise sugirió, sino para conseguir que funcione necesitaba usar un estilo de hormiga Excluir para asegurarse de que no hay archivos o directorios se deslizaron en el archivo:

<excludes> 
    <exclude>**/*</exclude> 
</excludes> 
1

Si no está funcionando para usted puede usar Maven Resources Plugin 2.7.

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.7</version> 
      <configuration> 
       <includeEmptyDirs>true</includeEmptyDirs> 
      </configuration> 
     </plugin> 
+0

Agregue información para el OP – JackWhiteIII

+0

¿Qué quiere decir con eso? – Belkasmi

Cuestiones relacionadas