Maven - 如何包含空目录

mic*_*son 30 java directory maven

默认情况下,在构建过程中,maven会删除空目录.
你知道是否可以在pom中指定一个参数来指示maven在生成的target/test-classes文件夹中包含空目录吗?

Von*_*onC 35

根据这张票MRESOURCES-36,应该有一个<includeEmptyDirs>元素,但仅适用于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>
Run Code Online (Sandbox Code Playgroud)

对于Maven版本,其中包含旧版本的Resources插件:

在此问题得到解决之前,这是我成功使用的解决方法.
将此插件元素添加到project/build/plugins您的pom.xml,并更改mkdir任务中的目录.

您可以<mkdir>为多个目录提供多个元素.该mkdir任务不执行任何操作,如果目录已经由资源插件复制.

<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>
Run Code Online (Sandbox Code Playgroud)

这最初来自openejb项目中的openejb-standalonepom.xml.


khm*_*ise 15

为什么在target/test-classes下需要空文件夹?

另一方面,您可以使用程序集插件在zip/tar.gz文件中创建空文件夹.

只需在程序集描述符中创建一个引用现有文件夹的条目(在本例中为src/main/resources/bin ...

<fileSet>
  <directory>src/main/resources/bin</directory>
  <outputDirectory>/logs</outputDirectory>
  <directoryMode>0755</directoryMode>
  <excludes>
    <exclude>*</exclude>
  </excludes>
</fileSet>
Run Code Online (Sandbox Code Playgroud)

以上适用于.tar.gz和zip文件.只有在创建.tar.gz文件时才需要上面的directoryMode.

第二种可能性是在你的文件夹结构中创建一个空文件夹,它包含在程序集插件中(如zip,tar.gz等)... BTW:zip,tar.gz允许空文件夹.

  • 你得到我的+1,因为我需要这个组装技巧,但为什么你质疑OP的需求? (5认同)