我有一个构建管道,我想在将特定的 jar (带有一些参数)复制到依赖项列表中的单独文件夹后运行它。
目前我正在执行以下操作:
task copyToLib(type: Copy, dependsOn: classes) {
into "$buildDir/server"
from(configurations.compile) {
include "webapp-runner*"
}
ext.serverPath = fileTree("$buildDir/server/").include("webapp-runner-*.jar").getSingleFile()
}
task run(type: Exec, dependsOn: [copyToLib, war]) {
mustRunAfter copyToLib
executable 'java'
args '-jar', copyToLib.serverPath, war.archivePath, '--port', "$port"
}
但是它失败了,预期目录'...'只包含一个文件,但是,它不包含文件。
因为我猜测serverPath
是在文件尚未复制时的配置阶段。我该如何解决这个问题?
最佳答案
您犯了一个常见错误,即在配置
阶段执行逻辑,而实际上应该在执行
阶段执行逻辑。
试试这个
task copyToLib(type: Copy, dependsOn: classes) {
...
doLast {
ext.serverPath = ...
}
}
如果是我,我会在 run
中计算 serverPath
,而不是在 copyToLib
中。也许您可以使用闭包
来延迟计算。
例如:
task run(type: Exec, dependsOn: [copyToLib, war]) {
def pathClosure = {
fileTree("$buildDir/server/").include("webapp-runner-*.jar").singleFile
}
mustRunAfter copyToLib
executable 'java'
args '-jar', pathClosure, war.archivePath, '--port', "$port"
}
关于java - Gradle - 复制任务完成后导出属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691404/