前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >maven依赖的版本管理

maven依赖的版本管理

作者头像
pollyduan
发布2019-11-04 14:08:16
发布2019-11-04 14:08:16
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

使用变量进行管理

定义一个版本号的变量

代码语言:javascript
代码运行次数:0
运行
复制
<properties>
	<spring-framework-version>4.3.7.REALEASE</spring-framework-version>
</properties>

所有spring的jar版本都使用变量来定义版本:

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${spring-framework-version}</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>${spring-framework-version}</version>
  <scope>test</scope>
</dependency>

使用maven的dependencyManagement管理

单个jar的管理

代码语言:javascript
代码运行次数:0
运行
复制
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
  </dependencies>
</dependencyManagement>

在引用依赖时,不需要填写版本。

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
</dependency>

在一个项目中,这样做的必要性不大,这种机制一般用于maven项目继承,子项目可以直接使用简化的依赖配置,从而确保和父项目版本一致。

这里有一个问题,如果我们配置了:

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-jpa</artifactId>
  <version>1.10.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>4.3.7.RELEASE</version>
  <scope>test</scope>
</dependency>

会发现依赖树中,spring-test是4.3.7,而spring-data-jpa中依赖的其他spring子项目确实4.2.8,这经常会导致一些莫名其妙的问题,比如spring-test异常等等。

这个问题在使用下面的pom来管理时就可以避免了,针对spring-data-jpa项目尤其要注意。

pom管理jar集合的版本

以Spring为例,它包含大量的子项目,为了保持不同子项目的版本一致,官方提供了一个pom专门来管理版本。

代码语言:javascript
代码运行次数:0
运行
复制
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-framework-bom</artifactId>
      <version>4.3.7.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

那么大部分一级项目,都可以直接如下引用依赖了。

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <scope>test</scope>
</dependency>

之所以说大部分,如spring-data下面的子项目是Spring子项目中的一个子集。它提供了自己的pom包。

代码语言:javascript
代码运行次数:0
运行
复制
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-releasetrain</artifactId>
      <version>Hopper-SR4</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>
  </dependencies>
</dependencyManagement>

它的版本不同于普通的版本号,如1.11.7.RELEASE这种,而是独立的版本体系,具体版本参见:https://github.com/spring-projects/spring-data-commons/wiki/Release-planning

这个字符串的版本号,实际上又对应了真实的版本号,如:

代码语言:javascript
代码运行次数:0
运行
复制
Hopper-SR4 <-> 1.10.4.RELEASE

具体的版本对应查询前面的文档。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用变量进行管理
  • 使用maven的dependencyManagement管理
    • 单个jar的管理
    • pom管理jar集合的版本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档