Dave Stenglein
Dave Stenglein

Reputation: 1420

How do I include an empty directory in a maven assembly?

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>

Upvotes: 38

Views: 23311

Answers (3)

Christopher
Christopher

Reputation: 2512

This always works for me:

<fileSets>
  <fileSet>
    <directory>.</directory>
    <outputDirectory>logs</outputDirectory>
    <excludes>
      <exclude>*/**</exclude>
    </excludes>
  </fileSet>
</fileSets>

Upvotes: 52

Ashok Kumar Jha
Ashok Kumar Jha

Reputation: 11

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

Upvotes: 1

Raghuram
Raghuram

Reputation: 52635

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.

Upvotes: 19

Related Questions