如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars

Posted

技术标签:

【中文标题】如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars【英文标题】:How to generate 2 jars from one gradle project with different dependencies using sring boot plugin 2.0.x 【发布时间】:2019-03-20 02:45:01 【问题描述】:

我正在尝试将我的项目迁移到最新版本的 Spring 和 Spring Boot。在我遇到这个问题之前,一切都很顺利。

我们的一个项目生成了两个版本的最终 Jar,一个具有最小依赖项的普通可运行版本,另一个具有所有额外模块。

当我使用 Spring Boot 1.5.x 版本时,解决方案很简单,我们使用了 'customConfiguration`

当我使用旧插件时,我的配置文件看起来或多或少像这样

bootRepackage 
    customConfiguration = "addons"



dependencies 
    compile "my.org:core-lib:1.0.0"
    addons  "my.org:extra-lib:1.0.0"

现在bootRepackagebootJar 取代,它不拥有customConfiguration 的属性。这是否可以在最新版本的插件中执行,如果可以,那么请有人指出我正确的方向。

【问题讨论】:

这不会构建两个单独的 jar,因为 bootRepackage 将覆盖由 jar 任务生成的 jar。如果您对行为的描述是准确的,那么您的构建配置肯定比您在此处显示的要多。 【参考方案1】:

bootJar 是 Jar 类的子类,所以你可以在这里使用 Jar 任务的配置。

例子:

configurations 
    //second jar's configuration
    addons


dependencies 
    ....
    // sample dependency
    addons group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.1'


task customJar(type: org.springframework.boot.gradle.tasks.bundling.BootJar)
    baseName = 'custom-spring-boot'
    version =  '0.1.0'
    mainClassName = 'hello.Application'
    from 
        // this is your second jar's configuration
        configurations.addons.collect  it.isDirectory() ? it : zipTree(it) 
    

    with bootJar

// add a dependency to create both jars with gradle bootJar Command
bootJar.dependsOn customJar 

(有更简单的方法可以做到这一点,我不知道)

【讨论】:

我希望有另一种方法,因为我不太喜欢这种解决方案。在旧版本中它是如此漂亮和干净。我赞成它,如果我找不到更好的东西,那么我会接受它。谢谢 @user902383 为什么你不喜欢这个解决方案?没有其他的了。 @Opal 也许我表达自己错了,我对解决方案没有问题,但对 plugin.way 所做的更改感觉更干净。但正如我所说,如果这只是一种方式,我很乐意接受它

以上是关于如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 spring-boot gradle 插件进行 proguard

迁移到 Spring Boot 2.0.x 时全局 CORS 配置中断

如何使用 Spring Boot“bootJar”插件创建 gradle 任务以生成爆炸性战争?

如何排除依赖项被 Spring Boot 的依赖项管理插件固定?

无法理解 Spring Boot 如何使用 maven 管理集成测试。它是不是使用故障安全插件?

Spring Boot 2.1 MVC 日志记录