代码之家  ›  专栏  ›  技术社区  ›  user3690467

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

  •  1
  • user3690467  · 技术社区  · 8 年前

    我有一个构建管道,在将特定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

    1 回复  |  直到 8 年前
        1
  •  1
  •   lance-java    8 年前

    您陷入了在中执行逻辑的常见错误 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"
    }