首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制任务完成后Gradle -导出属性

复制任务完成后Gradle -导出属性
EN

Stack Overflow用户
提问于 2017-08-15 18:52:09
回答 1查看 462关注 0票数 1

我有一个构建管道,在这里我希望在将特定的jar (带有一些args)复制到依赖项列表中的单独文件夹后,运行该jar。

目前,我正在做以下工作:

代码语言:javascript
复制
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是在配置阶段设置的,当时文件还没有被复制。我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-15 18:57:45

当您应该在execution阶段执行逻辑时,却在configuration阶段执行逻辑,这是一个常见的错误。

尝尝这个

代码语言:javascript
复制
task copyToLib(type: Copy, dependsOn: classes) {
    ...
    doLast {
        ext.serverPath = ...
    }
}

如果是我,我会在run中计算serverPath,而不是在copyToLib中。也许您可以使用closure来延迟计算。

例如:

代码语言:javascript
复制
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"
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45691404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档