我有一个构建管道,我想在从依赖列表中将它复制到一个单独的文件夹后运行一个特定的jar(带有一些args)。
目前,我正在执行以下操作:
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"
}
但它失败了Expected directory '...' to contain exactly one file, however, it contains no files.
,因为我猜错serverPath
是在配置阶段设置的,当时文件尚未被复制。我该如何解决这个问题?
答案 0 :(得分:1)
当你应该在configuration
阶段执行逻辑时,你会遇到在execution
阶段执行逻辑的常见错误。
试试这个
task copyToLib(type: Copy, dependsOn: classes) {
...
doLast {
ext.serverPath = ...
}
}
如果是我,我会在serverPath
内计算run
而不是copyToLib
。也许您可以使用closure
来延迟计算。
例如:
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"
}