我有春季启动项目,我尝试使用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}}
但是我不知道为什么会这样(工件没有在任何地方声明)。
答案 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
,否则它将失败。在您的示例中,b
是jackson
的实例,并且没有版本属性。要解决它,你可以使用例如String
或jacksonVersion
。查看演示{{3}}。
答案 2 :(得分:0)
但是我不知道为什么会这样(工件没有声明 任意位置)。
所以关注的是你没有使用任何版本,但它是如何工作的?
实际上gradle使用一些规则。这些如下:
Gradle将使用传递依赖关系管理来指定实际版本。
另一方面,它将使用存储库的第一级或第二级层次结构来获取最新版本。
Maven的依赖管理包括a的概念 物料清单(bom)。 bom是一种特殊的pom 控制项目依赖项的版本并提供一个 定义和更新这些版本的中心位置。
有关详细信息,请参阅本教程:Gradle dependencies with jars that have no version number
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") }