2010-04-09 71 views
27

默認情況下,在構建過程中,maven將刪除空目錄。
是否知道在pom中是否可以指定參數來指示maven在生成的target/test-classes文件夾中包含空目錄?Maven - 如何包含空目錄

回答

31

根據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> 

Maven的版本,其中包括一箇舊版本的資源插件:

直到這個問題是固定的,這裏是我已經成功地使用一種變通方法。
將此插件元素添加到您的pom.xml中的project/build/plugins中,並更改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

尼斯(和你有我+1),但我忘了發表評論:也許澄清,2.3是資源插件的版本,而不是Maven的本身(和antrun解決方法是的發佈之前有用資源插件版本2.3) – 2010-04-09 12:56:25

+0

@帕斯卡爾:你是對的,我更新了我的答案,以更好地反映你的評論。 – VonC 2010-04-09 14:41:26

+0

我試過這個在'scr \ main \ webapp \'中的空文件夾,它不能與插件版本2.6(使用上面的第一種方法)一起工作。應該是? – Bizmarck 2013-12-02 15:58:03

2

我們通常會通過在任何需要創建但在構建時沒有有用內容的目錄中包含一個空佔位符文件來解決此問題。

這也具有不允許空目錄的概念的文件格式(例如zip文件)仍將創建正確的目錄結構的優點。

14

爲什麼你需要在目標/測試類下的空文件夾?

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

只需創建在彙編描述符中引用了一個現有的文件夾(在這種情況下的src /主/資源/ bin中的條目......

<fileSet> 
    <directory>src/main/resources/bin</directory> 
    <outputDirectory>/logs</outputDirectory> 
    <directoryMode>0755</directoryMode> 
    <excludes> 
    <exclude>*</exclude> 
    </excludes> 
</fileSet> 

上述工程確定爲.tar.gz和zip文件當成文件如果你創建.tar.gz文件,只需要上面的目錄模式

第二種可能是在你的文件夾結構中創建一個包含在程序集插件中的空文件夾(如zip,tar.gz等)... BTW:zip,tar.gz允許空文件夾。

+4

您獲得了我的+1,因爲我需要這種組裝技巧,但您爲什麼質疑OP的需求? – Superole 2012-04-10 09:51:48

1

我用Assembly插件像khmarbaise建議,但要得到它的工作,我需要使用Ant風格的排除,以確保沒有文件或目錄悄悄潛入檔案:

<excludes> 
    <exclude>**/*</exclude> 
</excludes> 
1

如果它不工作因爲你可以使用Maven資源插件2.7

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.7</version> 
      <configuration> 
       <includeEmptyDirs>true</includeEmptyDirs> 
      </configuration> 
     </plugin> 
+0

請爲OP添加信息 – JackWhiteIII 2015-06-29 12:59:20

+0

這是什麼意思? – Belkasmi 2015-07-01 14:38:14