Gradle 与 Spring Boot 应用程序的多项目依赖关系
Posted
技术标签:
【中文标题】Gradle 与 Spring Boot 应用程序的多项目依赖关系【英文标题】:Gradle multiproject dependency with spring boot application 【发布时间】:2018-08-29 02:32:10 【问题描述】:我的 Spring Boot 项目结构如下:
client-stp-grid-publisher:
+---.build.gradle
+---.client-stp-grid-publisher-acceptance
| +---build.gradle
+---.client-stp-grid-publisher-core
| +---build.gradle
client-stp-grid-publisher-acceptance 需要由task ':client-stp-grid-publisher-core:bootRepackage'
创建的可执行jar 来启动进程
在运行验收测试以测试完整流程之前。所以我正在运行核心项目的bootRepackage task
,然后复制可执行jar
到acceptance-test project build/tmp directory
。
验收测试也使用项目':client-stp-grid-publisher-core'
中的一些类。
因为task ':client-stp-grid-publisher-core:bootRepackage'
在task ':client-stp-grid-publisher-acceptance:test'
之前首先被执行
一些使用核心项目中的类的测试失败了。
如果我将核心项目构建限制为distZip task
,那么验收项目下的所有测试都会通过。
我在使用 bootRepackage 运行验收测试时遇到错误:
failure message="java.lang.NoClassDefFoundError: Lcom/markets/efx/client/stp/builder/GridDealsObjectBuilder;"
type="java.lang.NoClassDefFoundError">java.lang.NoClassDefFoundError: Lcom/markets/efx/client/stp/builder/GridDealsObjectBuilder
但我的要求需要 bootRepackage 以便我可以从验收测试项目运行可执行 jar。
如果我能获得有关如何解决问题的建议或一些解决方法以达到要求,这将非常有帮助? 谢谢,
【问题讨论】:
【参考方案1】:您不必手动复制 jar。
settings.gradle:
include 'client-stp-grid-publisher'
include 'client-stp-grid-publisher-acceptance'
include 'client-stp-grid-publisher-core'
'client-stp-grid-publisher-acceptance' 的 build.gradle
...
dependencies
compile project(":client-stp-grid-publisher-core")
...
我建议阅读有关使用 gradle 设置多模块项目的内容: https://spring.io/guides/gs/multi-module/
【讨论】:
这些我已经在你提到的项目中了。问题是核心项目任务 bootRepackage 创建胖可执行 jar。所以理想情况下 bootRepackage 应该在验收测试测试用例运行之前运行。但在这种情况下,测试用例会因 NoClassDefFoundError 而失败。以上是关于Gradle 与 Spring Boot 应用程序的多项目依赖关系的主要内容,如果未能解决你的问题,请参考以下文章
无法加载驱动程序类:com.mysql.jdbc.Driver 与 Gradle 和 Spring Boot
Dockerfile 和 Docker Compose 与 Java Spring Boot、Gradle 和 PostgreSQL [重复]
将 lombok 与 gradle 和 spring-boot 一起使用
spring boot gradle 插件、应用程序插件和 gradle 2.3 包装器