我在Maven POM文件中有以下几行
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.4.0</version>
</dependency>
在MAVEN信息库中,在https://mvnrepository.com/artifact/com.querydsl/querydsl-jpa/4.2.1上
表明querydsl-api
取决于slf4j-api
版本1.6.1
。
在MAVEN构建应用程序时,使用哪个版本的slf4j-api
?
加载Java应用程序后,使用哪个版本的slf4j-api
?
如果在slf4j-api
之前定义querydsl-jpa
会发生什么?
如果slf4j-api
中使用的querydsl-jpa
版本低于应用程序POM文件中定义的版本会发生什么?
答案 0 :(得分:1)
这都是关于 Maven依赖关系调解的。
Maven根据您的依赖关系构建一棵树,并将该树合并为一个列表。在此列表中,每个依赖项只能出现一次。因此,如果树中有多个不同的版本,Maven需要选择一个。
Maven有一个“最近依赖性”标准规则,该规则大致指出:直接依赖性比第一级可传递依赖性要重要,后者比第二级可传递依赖性要重要,等等。
无法定义其他规则,但是可以在pom的<dependencyManagement>
部分中指定版本。该版本将覆盖所有传递定义的版本。
最困难的部分是弄清楚哪个版本是“正确的”,即与所有用例兼容。没有自动的方法。