gpt4 book ai didi

gradle - 如何从gradle中的目录创建war文件

转载 作者:行者123 更新时间:2023-12-03 03:58:41 25 4
gpt4 key购买 nike

我正在编写一个任务来解压缩一个 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 .所以你需要重写你的deleteJars任务,正确配置它。看看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"
}

关于gradle - 如何从gradle中的目录创建war文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50868896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com