如何在Spring Boot Gradle中指定Launcher?

How to specify the Launcher in Spring Boot Gradle?

Spring 启动器中有三个启动器:JarLauncher/PropertiesLauncher/WarLauncher。 对于可执行 jar,默认情况下将使用 JarLauncher。现在我想改用 PropertiesLauncher,这样我就可以使用外部 classpath。我怎么能指定是 spring boot gradle 插件?

根据此文档的 D3.1 D.3.1 Launcher manifest,我可以像这样在 MANIFEST.MF 中指定主要 class:

Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.mycompany.project.MyApplication

然而,在Spring Boot Gradle中,下面的代码片段实际上指定了Start-Class,而不是Main-Class:

springBoot {
    mainClass = "com.sybercare.HealthServiceApplication"
}

我需要手动创建 MANIFIEST.MF 还是有更好的方法?

谢谢!

添加 layout 属性:

springBoot{
    mainClass = "com.sybercare.HealthServiceApplication"
    layout = "ZIP"
}

layout = ZIP 触发 SpringBoot 使用 PropertiesLauncher

布局属性 默认为基于存档类型(jar 或war)的猜测。对于 PropertiesLauncher,布局是 ZIP(即使输出可能是 jar 文件)。

https://docs.spring.io/autorepo/docs/spring-boot/1.2.0.M2/maven-plugin/usage.html

其他答案现已过时。目前的答案似乎是:

tasks.getByName<BootJar>("bootJar") {
    manifest {
        attributes("Main-Class" to "org.springframework.boot.loader.PropertiesLauncher")
    }
}

根据https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#packaging-executable.configuring.properties-launcher