2015-07-20 110 views
0

我有一个工作的gradle构建文件,它将一个jar文件构建到/ build/libs目录中。这工作正常。但是,我想添加一个任务,它接受这个jar文件并将其打包到一个现有的war文件中(进入WEB-INF/libs目录里面)。我如何添加此任务?Gradle:如何将输出jar文件添加到现有war文件中

+0

为了你自己的理智的好,不这样做!修改war的WEB-INF/libs目录是改变已经构建的web应用程序的依赖关系,这可能会让你很难找到并解决错误,这取决于你如何改变jar。当你的jar改变了一些重要的事情时,声明你的jar是该战争的依赖并重建战争更安全(也更容易)。这样,如果您的依赖关系jar确实改变了打破战争的方式,那么在部署战争之前,您将确切地知道发生了什么。 –

+0

我明白了这一点,并了解其中的含义。在这种情况下,它通常更安全,我不想重建现有的战争。 – cwittah

回答

0

我这样做是这样的:

def originalWar = file("../release/${sesame_version}/war/openrdf-sesame.war") 
def outputDir = "./build/war" 
def outputDirSesame = "$outputDir/sesame" 

task extractWar(type: Copy) { 
    from zipTree(originalWar) 
    into "$outputDirSesame" 
    outputs.upToDateWhen { false } 
} 

task copyJar(type: Copy, dependsOn: extractWar) { 
    from "./build/libs" 
    into "$outputDirSesame/WEB-INF/lib" 
    outputs.upToDateWhen { false } 
} 

task buildWar(type: Zip, dependsOn: copyJar) { 
    archiveName "openrdf-sesame.war" 
    destinationDir file("$outputDir") 
    from "$outputDirSesame" 
    outputs.upToDateWhen { false } 
} 

build.dependsOn buildWar 
相关问题