Maven Dependency Version:pom依赖版本固定或自动升级
先介绍过Maven的依赖调节机制。
可选依赖(Optional dependencies)
被依赖的项目主动不把可以传递的依赖传递下去,好比卖车的主动声明自己不会让买车的人买这辆车附加的保险业务。下面在解决思路中会举例说明。
解决思路
有了上面的知识背景,考虑使用Maven提供的Optional和Exclusions来控制依赖的传递。
A
-> B
D
-> A
-> B
Optional 定义后,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖才行。
- A/pom.xml
<dependency>
<groupId>com.bar</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<optional>true</optional>
</dependency>
这种情况下,A对B的依赖将不会传递给D.
就近原则
依赖调节是为了解决版本不一致的问题(multiple versions),并采起就近原则(nearest definition)。
举例来讲,A项目经过依赖传递依赖了两个版本的D:
A -> B -> C -> ( D 2.0 ) ,
A -> E -> ( D 1.0 )
那么最终A依赖的D的version将会是1.0,由于1.0对应的层级更少,也就是更近。maven
除了咱们经常使用的<version>1.1.0</version>,在声明依赖版本的时候,能够经过表达式灵活地配置版本号。
例如配置jar包x的<version>标签支持以下几种语法:
1.0: 推荐依赖版本,此版本号可能会被覆盖。 [1.0]: 强制依赖此版本。
还能够控制依赖的版本范围:
(,1.0]: x <= 1.0 [1.2,1.3]: 1.2 <= x <= 1.3 [1.0,2.0): 1.0 <= x < 2.0 [1.5,): x >= 1.5
同时声明多个版本范围也是能够的,只要用逗号分隔便可:
(,1.0],[1.2,): x <= 1.0 或者 x >= 1.2
当你不但愿依赖某个版本的时候,能够声明为:
(,1.1),(1.1,)
举例来讲,你想依赖Apache的commons-math3的最新稳定版,并且不想每次有了新的版本手动去升级pom.xml,能够使用以下<version>配置:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>[3.+,)</version>
</dependency>
编译项目,你会看到项目中依赖的版本为当前(2019/03/04)最新的正式版:3.6.1。
固然,这么作是有风险的,由于自动升级版本可能引入未知的修改。
除非你信任这个项目的发布者,相信其发布的新版本都是向下兼容的,这样才能保证自动升级到最新版本之后不会出问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!