2016-02-23 120 views
4

我需要從我的webapp war輸出中排除兩個.jar文件。該文件的build.gradle看起來是這樣的:Gradle - 從WAR文件夾中排除罐子?

apply plugin: 'java' 
apply plugin: 'war' 
apply plugin: 'appengine' 

dependencies { 
    appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.30' 
    compile 'javax.servlet:servlet-api:2.5' 
    compile project(':farms') 
} 

war { 
    exclude("**/bad1.jar") 
    exclude("**/bad2.jar") 
} 

項目「農場」是什麼,是包括廣口瓶「bad1.jar」和「bad2.jar」。儘管在輸出戰中我不需要他們。我嘗試添加的排除塊沒有任何效果。

如何阻止添加這些罐子?

回答

0

我不知道,如果排除支持懶惰,但我會嘗試這樣的:

excludes {['**/bad1.jar', '**/bad2.jar']} 

別的東西,你能做到這一點我以前做過的設置從只有你想要的文件。

/** 
* Get a FileTree using a String array of includePatterns and String array of excludePatterns 
* @return FileTree 
*/ 
ext.getFiles = {List includePattern=null, List excludePattern=null -> 
    FileTree fileTree = project.fileTree(dir: project.getRootDir()) 
    if (includePattern) { 
     includePattern.each { 
      fileTree.include(it) 
     } 
    } 
    if (excludePattern) { 
     excludePattern.each { 
      fileTree.exclude(it) 
     } 
    } 
    return fileTree 
} 

在你的戰爭任務

from { getFiles(includePattern, excludePattern).files } 

這會懶洋洋地得到匹配您的includePattern的任何文件,並排除那些不匹配您的excludePattern的任何文件。此外,.files會使結果變平。如果不需要,然後將其刪除。請注意,這將搜索整個項目結構,將該集合更改爲:dir:project.getRootDir()以不同的方式。

2

這爲我在過去的工作:

war { 
    rootSpec.exclude("**/bad1.jar") 
    rootSpec.exclude("**/bad2.jar") 
}