2

我想在 gradle 中创建一个自定义任务,它将组装好的 jar 上传到远程服务器。

我最好的工作结果是

doLast {
    ssh.run {
        def jarFile = "${jar.baseName}-${version}.jar"
        session(remotes.role('qa')) {
            put from: file("build/libs/${jarFile}"), into: "/home/${user}"
            execute("sudo cp ${jarFile} /usr/share/feedserver/", pty: true)
            ...
        }
    }
}

但是,这使用了 jar.baseName 属性,该属性已被弃用并发出警告:

baseName 属性已被弃用。这计划在 Gradle 7.0 中删除。请改用 archiveBaseName 属性。

替换它的正确方法是什么?

建议的 archiveBaseName 不起作用,例如

task updateOnQA(dependsOn: bootJar) {
    doLast {
        def jarFile = "${jar.archiveBaseName}-${version}.jar"
        print "${jarFile}";
    }
}

输出

任务':myproject:jar'属性'archiveBaseName'-1.0.12.jar

4

1 回答 1

3

不推荐使用的baseName属性返回 a String,而新属性返回archiveBaseNamea Provider<String>。要从提供者那里获取实际值,您必须调用.get(). 属性也是如此version,它已被名为archiveVersion.

如果您想使用这些新属性,您可以将您的任务更新为:

task updateOnQA(dependsOn: bootJar) {
    doLast {
        def jarFile = "${jar.archiveBaseName.get()}-${archiveVersion.get()}.jar"
        print "${jarFile}"
    }
}

但是,如果您正在寻找 jar 文件的实际路径,则可以使用:

put from: jar.archiveFile.get().getAsFile(), into: "/home/${user}"

在这里,第一个调用从提供者.get()返回 a ,然后调用将其转换为普通的。RegularFile.getAsFile()File

于 2019-11-14T15:32:08.913 回答