Maven – 如何包含空目录

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

根据此票MRESOURCES-36 ,应该有一个元素,但仅适用于Maven Resources Plugin 2.3

  org.apache.maven.plugins maven-resources-plugin 2.3  true   

对于包含较旧版本的Resources插件的Maven版本:

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

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

  org.apache.maven.plugins maven-antrun-plugin   create-empty-directory process-classes  run          

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

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

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

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

  src/main/resources/bin /logs 0755  *   

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

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

我们通常通过在我们需要创建但在构建时没有有用内容的任何目录中包含空占位符文件来解决此问题。

这也具有以下优点:不允许空目录概念的文件格式(例如zip文件)仍将创建正确的目录结构。

我使用了像khmarbaise建议的Assembly Plugin,但为了让它工作,我需要使用Ant风格的排除来确保没有文件或目录进入存档:

  **/*  

如果它不起作用,可以使用Maven Resources Plugin 2.7

   org.apache.maven.plugins maven-resources-plugin 2.7  true