Gradle - 从WAR文件夹中排除jar?

时间:2016-02-23 20:26:56

标签: gradle war

我需要从webapp war输出中排除两个.jar文件。 build.gradle文件如下所示:

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"。在输出战中,我不需要它们。我尝试添加的排除块无效。

如何阻止这些罐子被添加?

2 个答案:

答案 0 :(得分:3)

过去这对我有用:

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

答案 1 :(得分:0)

我不确定排除是否支持懒惰,但我会尝试这样做:

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

我以前做过的其他事情就是将from设置为只有你想要的文件。

/**
 * 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()更改为不同的内容。