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

我有一个多模块项目:


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


桃花长相依
浏览 237回答 2
2回答

GCT1015

原因是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 filetasks {    "bootRepackage"(RepackageTask::class) {        setCustomConfiguration("runtimeClasspath")    }}

料青山看我应如是

原来这是因为 spring-boot-plugin 1.5.x 不知何故无法识别implement(project(:common)),通过更改compile(project(:common))它可以正常工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java