Gradle:Spring启动依赖管理插件中的访问版本声明

时间:2017-10-25 13:07:30

标签: spring-boot gradle build.gradle maven-bom

我有春季启动项目,我尝试使用spring boot dependency-management plugin来使用提供的依赖版本。

插件“模拟”专家的BOM行为,这意味着它以某种方式从maven父项目中检索libs的版本(我不确定这是多么可行,但通常版本来自pom.xml)。它具有com.fasterxml.jackson.dataformat属性,用于为jackson-dataformat-yaml组中的工件设置版本。

我的项目使用来自同一组的工件,但它没有包含在BOM(compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${jackson.version}" )中,但我想使用相同的jackson版本。

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

compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml"

但是构建失败了:

  

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

问:有没有办法进入该物业?或者我如何重用lib版本?

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

{{1}}

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

3 个答案:

答案 0 :(得分:1)

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

您要引用的pom.xml包含依赖项

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

...引用jackson-bom项目中的以下pom.xml,后者又包含以下依赖项:

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

...反过来又指定了jackson-dataformat-yaml工件的版本......

答案 1 :(得分:0)

之所以会发生这种情况,是因为在groovy中的字符串插值中使用.(例如${a.b})时,它会将.作为一个对象,它具有一个跟随{{1}的属性的对象}。因此,在.对象${a.b}中应该具有属性a,否则它将失败。在您的示例中,bjackson的实例,并且没有版本属性。要解决它,你可以使用例如StringjacksonVersion。查看演示{{3}}。

答案 2 :(得分:0)

  

但是我不知道为什么会这样(工件没有声明   任意位置)。

所以关注的是你没有使用任何版本,但它是如何工作的?

实际上gradle使用一些规则。这些如下:

  1. Gradle将使用传递依赖关系管理来指定实际版本。

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

  3. 来自spring documentation

  4.   

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

    有关详细信息,请参阅本教程:Gradle dependencies with jars that have no version number

    1. spring-boot-gradle-plugin也可用,并提供创建可执行jar和从源运行项目的任务。它还提供dependency management,除了其他功能之外,允许您省略由Spring Boot管理的任何依赖项的版本号
    2. 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")
      }
      

      资源链接:

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

      2. How are some gradle dependencies working with no version supplied