1

我有一个构建管道,我想在将特定 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是在配置阶段设置的文件还没有被复制。我该如何解决这个问题?

4

1 回答 1

1

configuration当您应该在阶段中执行逻辑时,您正在陷入在阶段中执行逻辑的常见错误execution

尝试这个

task copyToLib(type: Copy, dependsOn: classes) {
    ...
    doLast {
        ext.serverPath = ...
    }
}

如果是我,我会计算serverPathinsiderun而不是 in copyToLib。也许您可以使用 aclosure来延迟计算。

例如:

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"
}
于 2017-08-15T10:57:44.793 回答