它一定很明显,但由于某种原因,我在仔细观察了几个小时后就错过了它。
我正在使用 Gradle 5.1.1 构建一个遵循六边形架构的多模块 Spring Boot 项目,所以我有几个这样的适配器 rest-adapter
gradle.build
文件如下:
import org.springframework.boot.gradle.plugin.SpringBootPlugin
apply plugin: 'java-library'
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
mavenBom SpringBootPlugin.BOM_COORDINATES
}
}
dependencies {
implementation project(':domain-api')
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
我可以 build 它,没问题。
在另一个模块中,我想依赖这个适配器。例如在我的
acceptance-test
模块 :import org.springframework.boot.gradle.plugin.SpringBootPlugin
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
mavenBom SpringBootPlugin.BOM_COORDINATES
}
}
dependencies {
implementation project(':domain')
implementation project(':domain-api')
implementation project(':rest-adapter')
}
所以在
acceptance-test
,因为我依赖于 rest-adapter
,我希望获得可用的“spring web”依赖项 - 好吧,我没有,因为我无法使用 org.springframework.http.HttpStatus
:Task :acceptance-test:compileJava FAILED
C:\Users\vf\IdeaProjects\hexagonal-spring-boot-java\acceptance-test\src\main\java\packageName\MyClass.java:3: error: package org.springframework.http does not exist import org.springframework.http.HttpStatus; ^
我怀疑这是因为我使用 Spring Boot 启动器作为依赖项,所以我在
rest-adapter
中尝试了这个。反而 :dependencies {
implementation project(':domain-api')
implementation group: 'org.springframework', name: 'spring-web'
compile "javax.servlet:javax.servlet-api:4.0.1"
//implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
但我得到了同样的结果。
我真的在这里变得一无所知。这不是我第一次使用 Spring Boot 做 Gradle 多节点项目,即使与我的其他项目进行比较,我也看不出有任何区别。
知道这里可能出什么问题吗?
最佳答案
我是 Gradle 的新手。所以也许有更好的方法可以做到这一点,但我会尝试回答
我认为问题在于子项目的传递依赖被另一个子项目访问,我们需要使其 api
而不是 implementation
.
在 rest-adapter 中,它的内部依赖项在验收测试中可用,就像在这种情况下一样implementation 'org.springframework.boot:spring-boot-starter-web'
将其更改为 api
IE。api 'org.springframework.boot:spring-boot-starter-web'
https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation
关于spring-boot - 未导入gradle传递依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61069430/