spring-boot - 未导入gradle传递依赖项

标签 spring-boot gradle

它一定很明显,但由于某种原因,我在仔细观察了几个小时后就错过了它。

我正在使用 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/

相关文章:

spring-boot - 通过resttemplate.exchange传递的参数没有在服务端自动解码

java - @Document 中的 HashSet,其中实体使用唯一 ID,DuplicatekeyException

java - 在gradle的应用程序插件生成的启动脚本中,如何将程序名称传递给应用程序?

javascript - 在 UIManager 中找不到 "RNCSafeAreaView"

java - 使用 Spring Boot 连接拒绝的 Kubernetes 服务发现

部署到 Springboot 应用程序后,Angular 路由不起作用

android - 如何在android构建类型中设置不同的版本号?

gradle - 如何修复未解析的引用 : Gson?

java - spring 注解@ConditionalOnMissingBean 有什么作用?

gradle - 使用 Gradle 执行命令?