如何从 gradle 中的目录创建 war 文件
How to create a war file from a directory in gradle
我正在编写一个任务来解压缩 war 文件,删除一些 jar,然后从解压缩的文件夹中创建一个 war。
task unzipWar(type: Copy){
println 'unzipping the war'
def warFile = file("${buildDir}/temp/libs/webapps/service-app.war")
def warOutputDir = file("$buildDir/wartemp")
from zipTree(warFile)
into warOutputDir
}
task deleteJars(type: Delete){
println 'deleting the logging jars'
file("$buildDir/wartemp/WEB-INF/lib/slf4j-api-1.7.5.jar").delete();
file("$buildDir/wartemp/WEB-INF/lib/logback-classic-1.1.7.jar").delete();
file("$buildDir/wartemp/WEB-INF/lib/logback-core-1.1.7.jar").delete();
}
task createWar(type: War){
destinationDir = file("$buildDir")
baseName = "service-app"
from "$buildDir/wartemp"
dependsOn deleteJars
}
出于某种原因,jar 文件没有被删除,并且正在创建 war 文件,其中仅包含 MANIFEST.MF
,没有其他内容。我在这里错过了什么?
首先要注意的是,您的 createWar
任务依赖于 deleteJars
任务,但 deleteJars
不依赖于 unzipWar
。看起来,如果您调用 createWar
任务,它不会调用 unzipWar
任务,并且没有任何内容可以复制或删除。请注意,您有一个 MANIFEST.MF
文件,因为它是由 createWar
任务生成的。
第二件事是您试图在构建的配置阶段删除一些文件,尽管您的 unzipWar
将在执行阶段完成它的工作。因此,您的删除任务将在文件解压缩之前尝试删除这些文件。您可以阅读有关构建生命周期 in the official userguide. So you need to rewrite your deleteJars
task, to configure it properly. Take a look into the docs 的内容,它有一个如何操作的示例。
所以如果你调用一个
file("$buildDir/wartemp/WEB-INF/lib/slf4j-api-1.7.5.jar").delete();
它会在调用时尝试删除您的文件,因为这不是一项任务 属性,而是配置中的一项操作。
要配置它,您必须执行以下操作:
task deleteJars(type: Delete) {
delete "$buildDir/wartemp/WEB-INF/lib/slf4j-api-1.7.5.jar", "$buildDir/wartemp/WEB-INF/lib/logback-classic-1.1.7.jar", "$buildDir/wartemp/WEB-INF/lib/logback-core-1.1.7.jar"
}
我正在编写一个任务来解压缩 war 文件,删除一些 jar,然后从解压缩的文件夹中创建一个 war。
task unzipWar(type: Copy){
println 'unzipping the war'
def warFile = file("${buildDir}/temp/libs/webapps/service-app.war")
def warOutputDir = file("$buildDir/wartemp")
from zipTree(warFile)
into warOutputDir
}
task deleteJars(type: Delete){
println 'deleting the logging jars'
file("$buildDir/wartemp/WEB-INF/lib/slf4j-api-1.7.5.jar").delete();
file("$buildDir/wartemp/WEB-INF/lib/logback-classic-1.1.7.jar").delete();
file("$buildDir/wartemp/WEB-INF/lib/logback-core-1.1.7.jar").delete();
}
task createWar(type: War){
destinationDir = file("$buildDir")
baseName = "service-app"
from "$buildDir/wartemp"
dependsOn deleteJars
}
出于某种原因,jar 文件没有被删除,并且正在创建 war 文件,其中仅包含 MANIFEST.MF
,没有其他内容。我在这里错过了什么?
首先要注意的是,您的 createWar
任务依赖于 deleteJars
任务,但 deleteJars
不依赖于 unzipWar
。看起来,如果您调用 createWar
任务,它不会调用 unzipWar
任务,并且没有任何内容可以复制或删除。请注意,您有一个 MANIFEST.MF
文件,因为它是由 createWar
任务生成的。
第二件事是您试图在构建的配置阶段删除一些文件,尽管您的 unzipWar
将在执行阶段完成它的工作。因此,您的删除任务将在文件解压缩之前尝试删除这些文件。您可以阅读有关构建生命周期 in the official userguide. So you need to rewrite your deleteJars
task, to configure it properly. Take a look into the docs 的内容,它有一个如何操作的示例。
所以如果你调用一个
file("$buildDir/wartemp/WEB-INF/lib/slf4j-api-1.7.5.jar").delete();
它会在调用时尝试删除您的文件,因为这不是一项任务 属性,而是配置中的一项操作。
要配置它,您必须执行以下操作:
task deleteJars(type: Delete) {
delete "$buildDir/wartemp/WEB-INF/lib/slf4j-api-1.7.5.jar", "$buildDir/wartemp/WEB-INF/lib/logback-classic-1.1.7.jar", "$buildDir/wartemp/WEB-INF/lib/logback-core-1.1.7.jar"
}