【问题标题】:Multiple Gradle bootJar Configurations - Different mainClass Attributes?多个 Gradle bootJar 配置 - 不同的 mainClass 属性?
【发布时间】:2019-08-25 13:08:07
【问题描述】:

我有一个使用 .kts(Kotlin 风格)Gradle 构建文件的 Gradle/Spring Boot 构建。 (最后一部分可能无关紧要。)

我的 Spring Boot 应用程序有两个不同的类可以用来启动它,一个用于“客户端”模式,一个用于“服务器”模式。

我有一个 bootJar 任务,看起来像:

tasks.bootJar {
    mainClassName = "com.me.ClientApplication"
}

所以默认情况下,当我运行./gradlew build bootJar 时,我会得到一个客户端版本的JAR,当使用java -jar theJar.jar 运行时,它会执行ClientApplication 类。

但是,我还想发布一个 第二个 JAR,它具有不同的 mainClassName 并运行 com.me.ServerApplication

我应该如何处理这个问题?我对 Gradle 还很陌生 - 我应该将 mainClassName 提供给 ./gradlew 命令来覆盖它吗?或者我可以定义单独的任务,例如 clientBootJarserverBootJar,它们将产生单独的工件?

【问题讨论】:

    标签: spring-boot gradle kotlin


    【解决方案1】:

    由于您的配置是互斥的(不能有两个主文件),我会说有两个任务是最佳的:

    tasks.bootJarClient {
        mainClassName = "com.me.ClientApplication"
    }
    
    tasks.bootJarClient {
        mainClassName = "com.me.ServerApplication"
    }
    

    其他方法是使用属性,但如果你有更大的方差,它会更有意义。

    现在要创建一个自定义任务,在您的 build.gradle.kts 中添加一些类似这些内容的内容(没有专门使用 SpringBoot 对其进行测试):

    open class BootJarClient : BootJar() {
       override mainClassName = "YourClientClassName"
    }
    
    tasks.register<BootJarClient>("bootJarClient") {
        group = "Other"
    }
    
    // Server is basically the same
    

    属性的命名取自GitHub sources

    【讨论】:

    • 我应该如何将这些定义为新任务/定义? (对于bootJar 的子类)目前它们似乎被解释为尚不存在的任务的高级配置。 imgur.com/a/VAO4DiR
    • 明天给你答复,用GradleKT做了很类似的事情,需要得到这个代码。
    • 零仓促,感谢您引导我朝着正确的方向前进。我也在继续阅读这方面的内容。
    • 添加了自定义任务定义。不过,还没有检查BooJar 是否会自动解析。
    猜你喜欢
    • 2021-02-21
    • 2018-11-27
    • 2020-12-14
    • 2019-12-13
    • 2018-07-07
    • 1970-01-01
    • 2021-07-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多