2016-02-23 78 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") 
}