Gradle - 复制任务完成后导出 属性
Gradle - export property after copy task finishes
我有一个构建管道,我想在其中 运行 一个特定的 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
是在文件尚未复制的配置阶段设置的。我该如何解决这个问题?
您犯了一个常见错误,即在 configuration
阶段执行逻辑,而您应该在 execution
阶段执行逻辑。
试试这个
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"
}
我有一个构建管道,我想在其中 运行 一个特定的 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
是在文件尚未复制的配置阶段设置的。我该如何解决这个问题?
您犯了一个常见错误,即在 configuration
阶段执行逻辑,而您应该在 execution
阶段执行逻辑。
试试这个
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"
}