36

In what must be a common occurence, I need to include an empty directory in an assembly. In my case it is logs/.

I've tried different variations in the assembly descriptor like:

<fileSet>
  <directory>${basedir}/target</directory>
  <includes>
    <include>doesntexist</include>
  </includes>
  <outputDirectory>/logs</outputDirectory>
  <fileMode>0644</fileMode>
</fileSet>

and the directory just gets pruned.

I tried to exclude as well, but that still included lots of stuff:

<fileSet>
  <directory>${basedir}/target</directory>
  <excludes>
    <exclude>*</exclude>
  </excludes>
  <outputDirectory>/logs</outputDirectory>
  <fileMode>0644</fileMode>
</fileSet>
Dave Stenglein
  • 1,400
  • 1
  • 11
  • 14

3 Answers3

50

This always works for me:

<fileSets>
  <fileSet>
    <directory>.</directory>
    <outputDirectory>logs</outputDirectory>
    <excludes>
      <exclude>*/**</exclude>
    </excludes>
  </fileSet>
</fileSets>
Christopher
  • 2,260
  • 18
  • 24
  • thanks for his usefull sample. In addition, if your input 'directory` rely on a build subdirectory, don't forget to forward empty directories at resources step too: cf.https://stackoverflow.com/questions/2605747/maven-how-to-include-empty-directories – boly38 Jun 15 '17 at 09:12
19

Courtesy, this SO answer and with some trial and error, the following one seems to work for me...

<fileSet>
  <directory>src/main/assembly</directory>
  <outputDirectory>/logs</outputDirectory>
  <excludes>
    <exclude>*</exclude>
  </excludes>
</fileSet>

The key seems to be to ensure that <directory> tag specifies a valid/existing folder, which does not have any subfolders.

Community
  • 1
  • 1
Raghuram
  • 49,195
  • 9
  • 101
  • 120
1
<fileSets>
    <fileSet>
        <directory>./EMPTY_DIRECTORY_NAME</directory>
        <outputDirectory>/REQUIRED_DIRECTORY_NAME in Assembly </outputDirectory>
        <excludes>
            <exclude>*/**</exclude>
        </excludes>
    </fileSet>
</fileSets>

e.g.

<fileSets>
    <fileSet>
        <directory>./Logs</directory>
        <outputDirectory>/Feed</outputDirectory>
        <excludes>
          <exclude>*/**</exclude>
        </excludes>
    </fileSet>
</fileSets>

In this case even though there are some content inside Logs directory, it will not be included in assembled binary in Feed directory.