默认情况下,在构建过程中,maven会删除空目录 你知道是否可以在pom中指定一个参数来指示maven在生成的target / test-classes文件夹中包含空目录吗?
答案 0 :(得分:35)
根据this ticket 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>
对于包含较旧版本的Resources插件的Maven版本:
在修复此问题之前,这是我成功使用的解决方法 将此插件元素添加到
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>
这最初来自openejb项目中的 openejb-standalone pom.xml
。
答案 1 :(得分: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>
以上适用于.tar.gz和zip文件。只有在创建.tar.gz文件时才需要上面的directoryMode。
第二种可能性是在你的文件夹结构中创建一个空文件夹,它包含在程序集插件中(如zip,tar.gz等)... BTW:zip,tar.gz允许空文件夹。
答案 2 :(得分:2)
我们通常通过在我们需要创建但在构建时没有有用内容的任何目录中包含一个空的占位符文件来解决这个问题。
这也有一个好处,即不允许空目录概念的文件格式(例如zip文件)仍然会创建正确的目录结构。
答案 3 :(得分:1)
我使用了像khmarbaise建议的Assembly Plugin,但为了让它工作,我需要使用Ant风格的排除来确保没有文件或目录进入存档:
<excludes>
<exclude>**/*</exclude>
</excludes>
答案 4 :(得分:1)
如果它不起作用,可以使用 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>