使用spring依赖管理无法解析依赖

Posted

技术标签:

【中文标题】使用spring依赖管理无法解析依赖【英文标题】:Using spring dependency management can't resolve dependency 【发布时间】:2021-07-05 19:36:01 【问题描述】:

您好,我在使用 spring 依赖管理插件时遇到了解决依赖问题

我有一个带有子项目的 gradle 项目,我正在使用这个配置。

build.gradle 文件

buildscript 
    repositories 
        mavenCentral()
    


plugins 
    id "io.spring.dependency-management" version '1.0.11.RELEASE' 
    id 'org.springframework.boot' version '2.4.4'


apply from: './main.gradle'

ma​​in.gradle 文件

subprojects 
    apply plugin: "java"
    apply plugin: "jacoco"
    apply plugin: 'io.spring.dependency-management'

    sourceCompatibility = JavaVersion.VERSION_1_8

    repositories 
        mavenCentral()
    

    dependencies 
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        testImplementation 'io.projectreactor:reactor-test'
        
        implementation 'io.projectreactor:reactor-core'
        implementation 'io.projectreactor.addons:reactor-extra'

        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testAnnotationProcessor 'org.projectlombok:lombok'
        testCompileOnly 'org.projectlombok:lombok'
    


    jacoco 
        toolVersion = '0.8.2'
    

如您所见,我正在尝试为项目中的每个子项目加载一些依赖项,例如 io.projectreactor:reactor-core

当我运行 gradle refresh 时,我在我的 intellij IDE 控制台上收到这条消息(对于每个子项目):

Could not resolve: org.projectlombok:lombok
Could not resolve: io.projectreactor:reactor-core
Could not resolve: io.projectreactor.addons:reactor-extra
Could not resolve: org.springframework.boot:spring-boot-starter-test
Could not resolve: io.projectreactor:reactor-test

如果我将版本显式放在依赖项块中,则 gradle resolve 没有问题,但我不希望这样

关于这个问题的任何想法?我该如何验证它?

Gradle Wrapper 版本:6.8.3(intellij 配置为使用默认 gradle wrapper)

感谢您的帮助

问候!

【问题讨论】:

您还需要 Spring Boot 插件,否则版本将无法解析。 【参考方案1】:

我解决了这个问题,正如@m-deinum 建议的那样,我在根项目的依赖项上缺少 spring-boot-gradle-plugin。

谢谢

【讨论】:

【参考方案2】:

将“org.springframework.boot”添加到每个子模块的build.gradleplugins 部分:

plugins 
    ...
    id 'org.springframework.boot'

在这种情况下您不需要指定版本,因为它已经在根build.gradle中指定了

【讨论】:

嗨@amseager 我在 main.gradle 文件的子项目块中添加了apply plugin: 'org.springframework.boot',这解决了在进行 gradle 刷新时出现的消息。但是现在我遇到了另一个问题,当运行 gradle build one subproject (domain-usecase) 时,它在另一个子项目 (domain-model) 中找不到类。我收到错误:包不存在。即使我在项目域用例上有dependencies implementation project(':domain-model')

以上是关于使用spring依赖管理无法解析依赖的主要内容,如果未能解决你的问题,请参考以下文章

即使依赖项存在于类路径中,Spring boot 仍显示“无法解析”

ivy 无法解析 org.springframework 依赖项

从 Spring Boot 1.5.10 迁移到 2.0.0 时无法解析依赖项

无法解析外部依赖 org.springframework.boot:spring-boot-starter: 因为没有定义存储库

如何为具有属性依赖项的 Spring Boot Application 类编写测试用例 - 无法解析占位符

MAVEN BUILD FAILURE - 无法解析项目 XYZ 的依赖关系