我有一个构建管道,在这里我希望在将特定的jar (带有一些args)复制到依赖项列表中的单独文件夹后,运行该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"
}但是使用Expected directory '...' to contain exactly one file, however, it contains no files.会失败,因为我猜测serverPath是在配置阶段设置的,当时文件还没有被复制。我该如何解决这个问题呢?
发布于 2017-08-15 18:57:45
当您应该在execution阶段执行逻辑时,却在configuration阶段执行逻辑,这是一个常见的错误。
尝尝这个
task copyToLib(type: Copy, dependsOn: classes) {
...
doLast {
ext.serverPath = ...
}
}如果是我,我会在run中计算serverPath,而不是在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"
}https://stackoverflow.com/questions/45691404
复制相似问题