关于Java:将Spring Boot jar名称传递给Gradle Groovy脚本

Pass Spring Boot jar name to Gradle Groovy script

我有一个gradle脚本,在生成SpringBoot jar文件后运行:

1
2
3
4
task runScript (dependsOn: 'bootJar', type: JavaExec) {
    main = 'postpackage'
    classpath = sourceSets.main.runtimeClasspath
}

到目前为止,gradle脚本仅显示一条消息:

1
println"hello world from groovy version ${GroovySystem.version}"

这在我的版本中正常工作。

gradle runScript

Task :runScript hello world from groovy version 2.4.15

我想要的是这样的:

1
println"hello world generated jar file name is ${jarFileName}"

我想要做的是传入SpringBoot生成的jar名称,或者传入build/libs/my-service-0.1.1.jar中的jar名称或其他名称。

因此它将打印:

hello world generated jar file name is my-service-0.1.1.jar

我该怎么做?

这是我尝试的方法:

postpackage.groovy:

1
2
3
println"hello world from groovy version ${GroovySystem.version}"

println"hello world from groovy version $bootJar.archiveName"

build.gradle:

1
2
3
4
task runScript (dependsOn: 'bootJar', type: JavaExec) {
    main = 'postpackage'
    classpath = sourceSets.main.runtimeClasspath
}

这是错误:

Task :runScript FAILED
hello world from groovy version 2.4.15 Exception in thread"main"
groovy.lang.MissingPropertyException: No such property: bootJar for
class: postpackage
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:66)


您应该能够将bootjar称为" jar"。

打印语句示例:

1
println"hello world from groovy version ${jar.archiveName}"

答案:

通过build.gradle传递参数,如下所示:

1
2
3
4
5
task runScript (dependsOn: 'bootJar', type: JavaExec) {
    main = 'postpackage'
    classpath = sourceSets.main.runtimeClasspath
    args"${bootJar.archiveName}"
}

在脚本中像这样引用它:

1
2
3
println"hello world from groovy version ${GroovySystem.version}"

println"hello world from groovy version ${args[0]}"

工作正常:

:bootJar UP-TO-DATE :runScript hello world from groovy version 2.4.15

hello world from groovy version my-service-0.1.1.jar

1
2
3
BUILD SUCCESSFUL in 2s
5 actionable tasks: 1 executed, 4 up-to-date
12:36:00 PM: Task execution finished 'runScript'.