Maven - how to include empty directories

By default during the build process maven is removing the empty directories.
Do you know if a parameter can be specified in the pom to instruct maven to include empty directories in the generated target/test-classes folder?


Solution 1:

According to this ticket MRESOURCES-36, there should be a <includeEmptyDirs> element, but only for 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>

For Maven versions which included an older version of the Resources plugin:

Until this issue is fixed, here is a workaround I've been using successfully.
Add this plugin element into project/build/plugins in your pom.xml, and change the dir in the mkdir task.

You can have multiple <mkdir> elements for multiple directories. The mkdir task does nothing if the directory has already been copied by the resources plugin.

<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>

This originally came from the openejb-standalone pom.xml in the openejb project.

Solution 2:

Why do you need empty folders under target/test-classes?

On the other hand you can use the assembly plugin to create empty folders in zip/tar.gz files.

Just create an entry in your assembly descriptor which references an existing folder (in this case src/main/resources/bin...

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

The above works for .tar.gz and zip files as well. The directoryMode above is only needed if you create .tar.gz files.

The second possibility is to create an empty folder in your folder structure which is included with the assembly plugin (like zip, tar.gz etc.)...BTW: zip, tar.gz allow empty folders.