当前位置: 首页 > 知识库问答 >
问题:

Gradle:在Spring引导依赖管理插件中访问版本声明

陶裕
2023-03-14

我有一个SpringBoot项目,我尝试使用SpringBoot依赖项管理插件来使用提供的依赖项版本。

插件模拟了mavens BOM行为,这意味着它以某种方式从maven父项目中检索libs的版本(我不确定这是如何实现的,但通常版本取自pom.xml)。它确实具有用于为com.fasterxml.jackson.dataformat组中的工件设置版本的jackson.version属性。

我的项目使用来自同一组的工件,但是它不包括在BOM中(jackson-dataformat-yaml),但我想使用相同的jackson版本。

我尝试添加这样的编译依赖:

compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${jackson.version}"

但构建失败的原因是:

无法为DefaultDependencyHandler类型org.gradle.api.internal.artifacts.dsl.dependencies.对象获取未知属性jackson。

问:有没有办法进入酒店?或者我怎样才能重用lib版本?

更新我不确定我为什么不从一开始就尝试这个,但它很有效:

compile "com.fasterhtml" target="_blank">xml.jackson.dataformat:jackson-dataformat-yaml"

但是,我不知道为什么会这样(工件没有在任何地方声明)。

共有3个答案

姜玉泽
2023-03-14

这是因为当(例如,${a.b})用于groovy中的字符串插值,它将其视为前缀 作为具有以下属性的对象 。因此在${a.b}中,对象a应该具有属性b,否则它将失败。在您的示例中,jacksonString的一个实例,它没有版本属性。要解决此问题,您可以使用例如jacksonVersionMap。请看这里的演示。

庄新翰
2023-03-14

但是,我不知道为什么会这样(工件没有在任何地方声明)。

因此,您不使用任何版本是一个问题,但它是如何工作的?

实际上gradle使用了一些规则。具体如下:

>

另一方面,它将使用存储库的第一级或第二级层次结构来获取最新版本。

从spring文档中,

Maven的依赖管理包括物料清单(bom)的概念。bom是一种特殊的pom,用于控制项目依赖的版本,并提供一个中心位置来定义和更新这些版本。

有关更多信息,您可以通过本教程:Gradle依赖关系与没有版本号的罐

plugins {
    id 'org.springframework.boot' version '1.5.8.RELEASE'
    id 'java'
}


repositories {
    jcenter()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

>

  • https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-build-systems.html

    在没有提供版本的情况下,一些gradle依赖项是如何工作的

  • 艾宁
    2023-03-14

    在使用工作示例更新问题后,我将尝试回答为什么它可以工作而不指定版本:

    您所指的pom.xml包含依赖关系

    <dependency>
        <groupId>com.fasterxml.jackson</groupId>
        <artifactId>jackson-bom</artifactId>
        <version>${jackson.version}</version>
        <scope>import</scope>
        <type>pom</type>
    </dependency>
    

    ... 以下是指pom。jackson bom项目中的xml,该项目又包含以下依赖项:

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>${jackson.version.dataformat}</version>
    </dependency>
    

    ...然后指定jackson-dataformd-yaml工件的版本...

     类似资料:
    • 我正在使用Gradle的Spring Boot框架。我知道,为了包含一些Spring依赖项,我可以引用“starters”而不显式定义版本;该版本将由我选择的Spring Boot版本控制,它是Spring Boot Gradle插件的版本。示例(省略非相关的分级代码): 请注意,没有为我的应用程序依赖项定义显式版本。 我如何确保我为那些依赖项使用的版本与我的其他Spring Boot依赖项兼容?

    • 主要内容:声明依赖关系,依赖关系配置,外部依赖,存储库,发布文件构建脚本定义了构建项目的过程; 每个项目包含一些依赖项和一些发表项。依赖性意味着支持构建项目的东西,例如来自其他项目的所需文件以及类路径中的外部(如或)。发布表示项目的结果,如测试类文件和构建文件,如文件。 负责构建和发布结果。 发布基于定义的任务。 可能希望将文件复制到本地目录,或将其上传到远程Maven或lvy存储库,或者可以在同一个多项目构建中使用另一个项目的文件。 发布的过程称为发布。 声

    • War插件增加了名为providedCompile和providedRuntime的两个依赖配置.这两个配置有相同的作用域在编译或者运行时的配置,不同之处在于是否会将war文件归档.很重要的一点是它们都会提供配置传递.比如在任意的provided配置中添加了commons-httpclient:commons-httpclient:3.0,该依赖依赖于commons-codec,因为这个一个”pr

    • Java 插件给项目增加了许多关于依赖的配置, 如下所示, 这些配置被分配给许多任务, 比如 compileJava 和 test 等配置 表22.5.Java插件-依赖配置 名称 扩展 被使用时运行的任务 含义 compile - compileJava 编译时的依赖 runtime compile - 运行时的依赖 testCompile compile compileTestJava 编译测

    • 如何编写自定义gradle插件来处理自定义存储库中自定义模块描述符中的依赖关系?gradle文档说了以下内容,但我还没有找到任何可以告诉我如何操作的内容。 即使您的项目使用的是自定义依赖关系管理系统或类似Eclipse的东西。类路径文件作为依赖关系管理的主数据,编写Gradle插件以在Gradle中使用此数据非常容易。 我一直在为ATG项目维护一个定制的常春藤解析器(源自此项目),但Gradle最

    • 问题内容: 我在应用程序中使用Webpack,在其中创建两个入口点- 所有我的JavaScript文件/代码的bundle.js,以及所有库(如jQuery和React)的vendor.js。为了使用以jQuery为依赖项的插件,并且我也希望在vendor.js中使用它们,我该怎么做?如果这些插件具有多个依赖项怎么办? 目前,我正在尝试在此处使用此jQuery插件-https: //github.