gradle - 如何从gradle中的目录创建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
}
出于某种原因,jars 没有被删除,war 文件正在被创建,它只包含MANIFEST.MF
,没有别的。我在这里想念什么?
解决方案
首先要注意的是,您的createWar
任务取决于deleteJars
任务,但deleteJars
不取决于unzipWar
. 看来,如果您调用createWar
任务,它不会调用unzipWar
任务,也不会复制或删除任何内容。请注意,您有一个MANIFEST.MF
文件,因为它是由createWar
任务生成的。
第二件事是您试图在构建的配置阶段删除一些文件,尽管您unzipWar
将在执行阶段完成它的工作。因此,您的删除任务将尝试在它们被解压缩之前删除这些文件。您可以在官方用户指南中阅读有关构建生命周期的信息。所以你需要重写你的deleteJars
任务,正确配置它。看看文档,它有一个如何做的例子。
所以如果你打电话给
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"
}
推荐阅读
- c# - 为什么我无法连接到我的服务器(连接尝试失败)
- python - Cython 函数比纯 python 花费更多时间
- php - 使用 oracle 和 php 将大文件上传到 BLOB
- python-3.x - 替换模块中的包导入
- javascript - 嵌套异步查询
- cordova - 错误:无法转换程序 - ionic2
- ios - 在模拟设备上使用 iOS 11 NEHotspotConfiguration 功能,而不仅仅是物理设备
- java - MySQLNonTransientConnectionException,无法连接到数据库
- authentication - 带有 JWT 身份验证登录错误的 ionic 3
- asp.net-mvc - 我是否需要使用 Windows 身份联合实用程序来创建可识别声明的 asp.net Web 应用程序?