2012-11-05 39 views
6

我有一個Java web應用程序,其中我有一些文件夾內的標準webapp源目錄(src/main/webapp),我不想複製到戰爭(explodedpackaged)。如何排除文件被maven複製到爆炸戰中

我不希望這些文件複製的原因之一是我們在爆炸戰爭中的.js和.css文件上運行YUI JS & CSS極小化器&壓縮器​​。我想要排除的文件在壓縮階段會產生錯誤。我不希望他們加入戰爭的另一個原因是他們支持測試Web應用程序中的單頁JS應用程序(它們是依賴於node/angular.js的客戶端JS測試腳本)。

下面是從POM.xml的相關章節:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <executions> 
    <execution> 
     <id>parent-resources</id> 
     <configuration> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
     <overlays> 
     </overlays> 
     <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
     </configuration> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exploded</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

我都試過了,沒有成功,使用warSourceExcludes排除某些路徑,但無濟於事。我使用的示例如下所示,其中client/是直接在文件夾src/main/webapp下:

<configuration> 
    ... 
    <warSourceExcludes> 
    <excludes> 
     <exclude> 
     client/ 
     </exclude> 
    </excludes> 
    </warSourceExcludes> 
    ... 
</configuration> 

什麼是排除某些路徑的正確途徑,或單個文件,Web應用程序源目錄中被列入爆炸的戰爭?

UPDATE

從@maba我更新了配置如下建議繼:

<configuration> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <overlays> 
    </overlays>         
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
    <warSourceExcludes>client/</warSourceExcludes> 
</configuration> 

的文件夾,client/,仍然得到跨越複製。有任何想法嗎?

+1

warSourceExcludes被記錄爲一個逗號分隔的字符串,所以不應該在沒有任何XML 。 http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html –

+0

問題已更新,以反映正確的使用 - 但仍然不適用於我。 – Kris

+0

我懷疑我的'pom.xml'還有一個問題。我會考慮是否這幾周原始項目從原型 – Kris

回答

6

感謝@alexksandr & @maba爲他們的答案 - 雖然正確並沒有完全解決我的問題。

該解決方案似乎是 - 雖然我不確定這是爲什麼 - 但配置部分沒有拿起時,它被放在execution部分。

把我原來的pom。XML和再保理它,使其工作得到:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <overlays> 
    </overlays> 
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
    <warSourceExcludes>client/</warSourceExcludes> 
    </configuration> 
    <executions> 
    <execution> 
     <id>parent-resources</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exploded</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

重要細節似乎是配置應該在插件的最高水平,而不是execution段內 - 雖然很明顯在xml我第一次嘗試使用warSourceExcludes的方式是偏離目標(請參閱更新部分之前的原始問題)。

+0

這就是maven插件的工作原理。它們有一個配置綁定在命令行執行的構建**或**配置中執行。看一看['maven-dependency-plugin'](https://maven.apache.org/plugins/maven-dependency-plugin/usage.html)爲例。關於兩個配置部分的不同之處非常具體。您的要求並不完全清楚。但很高興你現在有一個工作配置。 – maba

+0

感謝您的澄清 - 如果我沒有正確描述問題(可能是由於我沒有真正獲得Maven的更好的細節),apollogies。但再次感謝maba @aleksandr的幫助! – Kris

+0

如果您發現我們的答案有用/有幫助,請立即提供。並接受你自己的答案,如果這是你發現的最佳解決方案。 – maba

1

您的warSourceExcludes是錯誤的。這裏是maven-war-plugin說關於warSourceExludes什麼:

逗號分隔的標記列表複製warSourceDirectory的內容時要排除。

所以你的情況,這是你的配置應該是什麼樣子:

<configuration> 
    ... 
    <warSourceExcludes>client/</warSourceExcludes> 
    ... 
</configuration> 

這也意味着,如果你想添加一些更多的排除,只需添加它們用逗號分隔:

<configuration> 
    ... 
    <warSourceExcludes>client/,otherDir/,evenMoreDir/</warSourceExcludes> 
    ... 
</configuration> 
+0

生成嗨,首先感謝您的答覆。剛試過你的建議沒有運氣,將更新我的問題,包括我已經嘗試過。謝謝 – Kris

+0

我試着用你的設置,我在'target'中得到一個以'-work'結尾的文件夾,並且在那個文件夾中沒有'client'目錄。 – maba

+0

你想用相同的佈局創建一場戰爭嗎?或者爆炸的戰爭是你想要的唯一結果? – maba

1

爲了排除從文件夾中使用通配符的所有文件一樣,client/**

<configuration> 
<failOnMissingWebXml>false</failOnMissingWebXml> 
<overlays> 
</overlays>         
<webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
<warSourceExcludes>client/**</warSourceExcludes> 
</configuration> 
2

我找不到任何的< warSourceExcludes>然而< packagingExcludes其工作,配置>做的工作:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
     <packagingExcludes>excludeMe/**</packagingExcludes> 
    </configuration> 
    </plugin> 
+0

這就解決了我的問題,即使使用,minify-maven-plugin也會保留連接文件在我的.war文件中。 – Cesar

+0

請注意''packagingExcludes'只能從'.war'文件中排除,而不是從爆炸文件夾中排除 – jediz