为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 gradle + spring boot 1.5 构建子模块的可执行 jar

如何使用 gradle + spring boot 1.5 构建子模块的可执行 jar

桃花长相依 2021-06-21 09:10:35
我有一个多模块项目:Root project 'platform'+--- Project ':api'+--- Project ':common'在:common模块中,我包含了所有的依赖项,在:api模块中,我只有apply(plugin = "org.springframework.boot")dependencies {  implement(project(":common"))}问题是,当我构建:api模块时,从 jar 文件中我看不到 jar 文件中的任何依赖项,BOOT-INF/libs/只有BOOT-INF/classes/. 当我使用 java -jar 运行 jar 时,它为:common模块中的一个类显示 NoClassFound 。gradle :api:bootRun 工作良好。我应该做任何其他配置吗?我正在使用 gradle 4.9 kotlin dsl 和 spring boot 插件 1.5.15.RELEASE
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

原因是spring boot 1.5 gradle plugin只针对gradle 2 & 3,不支持implementation配置(gradle 4引入)。


基于此文档,它描述了在默认情况下只compile和runtime配置都包括在内。话虽如此,可以包含自定义配置以使其工作。


如果您查看此处图示的gradle 5 的 gradle 配置层次结构,它runtimeClasspath是实现的根,因此具有可运行 jar 所需的所有依赖项。


这意味着对于 spring boot 1.5,您可以将其指向自定义配置以使其正确构建可运行的 jar:


构建.gradle:


bootRepackage {

    customConfiguration = 'runtimeClasspath'

}

build.gradle.kts:


import org.springframework.boot.gradle.repackage.RepackageTask


// more of the build file


tasks {

    "bootRepackage"(RepackageTask::class) {

        setCustomConfiguration("runtimeClasspath")

    }

}


查看完整回答
反对 回复 2021-06-23
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

原来这是因为 spring-boot-plugin 1.5.x 不知何故无法识别implement(project(:common)),通过更改compile(project(:common))它可以正常工作。


查看完整回答
反对 回复 2021-06-23
  • 2 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信