让我们以项目A为例,其中包含依赖项(包括传递依赖项)。如果我查看依赖树,我看到最后在一条路径上,我有slf4j-api:1.6.4并且在另一条路径的末尾,我有slf4j:1.6.1。
我必须选择哪种依赖?如果我选择slf4j:1.6.4,我的类路径上没有版本1.6.1,我怎么知道版本1.6.4是否与使用版本1.6.1的代码兼容?
我不明白,因为最后我的类路径上只有一个slf4j版本。
由于
答案 0 :(得分:2)
Maven旨在管理这些传递依赖项,并确保类路径中只存在一个版本的jar。
dependency插件将演示Maven代表你做什么(通过各种POM拖曳并确定还有谁宣布对相同模块的依赖)。
[INFO] [dependency:tree]
[INFO] org.apache.maven.plugins:maven-dependency-plugin:maven-plugin:2.0-alpha-5-SNAPSHOT
[INFO] +- org.apache.maven.reporting:maven-reporting-impl:jar:2.0.4:compile
[INFO] | \- commons-validator:commons-validator:jar:1.2.0:compile
[INFO] | \- commons-digester:commons-digester:jar:1.6:compile
[INFO] | \- (commons-collections:commons-collections:jar:2.1:compile - omitted for conflict with 2.0)
[INFO] \- org.apache.maven.doxia:doxia-site-renderer:jar:1.0-alpha-8:compile
[INFO] \- org.codehaus.plexus:plexus-velocity:jar:1.1.3:compile
[INFO] \- commons-collections:commons-collections:jar:2.0:compile
通常选择最新版本的模块,这是有道理的,因为某些模块可能正在使用仅在最新版本的日志库中提供的方法。实际上,当依赖代码没有保持锁定步骤时,通常会删除导致编译问题的已弃用方法...
如果您想要更多地控制所选版本,则需要指定依赖版本范围,如下所示:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[3.8,4.0)</version>
<scope>test</scope>
</dependency>
此处描述了功能性:
希望这有帮助。