如何使用没有提供版本的gradle依赖项

时间:2017-01-16 12:34:04

标签: gradle

据我所知,gradle在设置依赖项时需要版本号,但允许使用部分通配符。例如,如果我想要Guava,我就不能这样做,因为它失败了:

compile('com.google.guava:guava')

必须(例如):

compile('com.google.guava:guava:21.0')

但是,我正在学习Spring,它有以下几点:

compile("org.springframework.boot:spring-boot-starter")
compile("org.springframework:spring-web")
compile("com.fasterxml.jackson.core:jackson-databind")

这些依赖项如何在没有提供版本的情况下工作?

是否因为以下原因,但我认为只有我的插件'org.springframework.boot'需要这些行:

buildscript {
 repositories {
    mavenCentral()
 }
 dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.3.RELEASE")
 }
}

4 个答案:

答案 0 :(得分:15)

值得一提的是,该技巧称为BOM物料清单),可以在 spring内的相关POM文件中检查实际版本-boot-dependencies 包。这在Spring Boot官方文档中提到:Build Systems

Spring提供的另一种方式(对于非Boot项目)是通过Spring Platform BOM实际提供the following dependencies的版本。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE'
    }
}

apply plugin: 'io.spring.dependency-management'

dependencyManagement {
    imports {
        mavenBom 'io.spring.platform:platform-bom:Athens-SR2'
    }
}

答案 1 :(得分:8)

TL; DR - spring boot使用自定义依赖项解析器。

使用以下代码应用的spring boot插件:

apply plugin: 'spring-boot'

处理没有版本列出的依赖项。此逻辑在this类中实现,该类将其委托给hereDependencyManagementPluginFeatures已应用getResourceAsStream

答案 2 :(得分:5)

spring boot gradle plugin documentation声明如下:

  

您声明的spring-boot gradle插件的版本   确定spring-boot-starter-parent bom的版本   导入(这可确保构建始终可重复)。你应该   始终将spring-boot gradle插件的版本设置为实际版本   您希望使用的Spring Boot版本。

答案 3 :(得分:1)

Spring Boot Dependency Management Plugin是不必要的。
您可以使用build-in Gradle BOM support代替Spring Boot Dependency Management Plugin

例如:

    plugins {
        id 'java'
        id 'org.springframework.boot' version '2.1.0.RELEASE'
    }
    repositories {
        jcenter()
    }
    dependencies {
        implementation platform('org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE')

    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    }

以及对于多模块项目: 在根 build.gradle 中:

plugins {
    id 'java-library'
    id 'org.springframework.boot' version '2.1.0.RELEASE'
}


allprojects {
    apply plugin: 'java-library'

    repositories {
        jcenter()
    }
}

dependencies {
    implementation project(':core')
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

core / build.gradle

 dependencies {
    api platform('org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE')
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}