参考spring-boot在gradle ssh插件中组装的jar

Reference spring-boot assembled jar in gradle ssh plugin

我想在 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 属性,它已被弃用并发出警告:

The baseName property has been deprecated. This is scheduled to be removed in Gradle 7.0. Please use the archiveBaseName property instead.

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

建议的 archiveBaseName 无效,例如

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

产出

task ':myproject:jar' property 'archiveBaseName'-1.0.12.jar

废弃的baseName属性returns一个String,而新的archiveBaseNamereturns一个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() 调用 returns 来自提供商的 RegularFile.getAsFile() 调用将其转换为正常的 File