maven依赖的版本管理

使用变量进行管理

定义一个版本号的变量

<properties>
    <spring-framework-version>4.3.7.REALEASE</spring-framework-version>
</properties>

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

<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的管理

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
  </dependencies>
</dependencyManagement>

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

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
</dependency>

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

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

<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专门来管理版本。

<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>

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

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <scope>test</scope>
</dependency>

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

<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

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

Hopper-SR4 <-> 1.10.4.RELEASE

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

时间: 2024-09-20 00:24:52

maven依赖的版本管理的相关文章

Maven依赖的配置

Maven的依赖配置有基本的groupId,artifactId和version等元素组成,其实一个依赖声明可以包含如下的  一些元素      <project>          ...          <dependencies>              <dependency>                  <groupId>...</groupId>                  <artifactId>...&

关于maven依赖apklib问题

问题描述 关于maven依赖apklib问题 我有Android项目需要使用到第三方的组件,比如github上的PullToRefresh,我把代码clone到本地,用Maven安装到本地资源库,可是当我引用该组件的.apklib的时候,项目报错,提示未找到相应的类文件,引用如下: <dependency> <groupId>com.github.chrisbanes.pulltorefresh</groupId> <artifactId>library&l

关于maven依赖引入多少个jar包问题?

问题描述 关于maven依赖引入多少个jar包问题? 10C 我有这样的疑问我项目中依赖了spring-context的时候项目中能自动导入: 但是当我依赖的是就只能引入一个jar包:我能不能在maven的中央仓库中查询到某个依赖会引用多少个jar包进来?还有就是我怎么实现只要在pom文件引用一个dependency就能把hibernate的所以相关jar引进来? 解决方案 你得groupid artifactid等这些都会确定唯一的jar ,不会引入多个jar的. maven仓库 hibern

maven依赖关系中Scope的作用

原文:http://peak.iteye.com/blog/299225 maven依赖关系中Scope的作用 Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值:     * compile,缺省值,适用于所有阶段,会随着项目一起发布.     * provided,类似compile,期望JDK.容器或使用者会提供这个依赖.如servlet.jar.     *

深入实践Spring Boot1.3.1 Maven依赖管理

1.3.1 Maven依赖管理 使用Maven,通过导入Spring Boot的starter模块,可以将许多程序依赖包自动导入工程中.使用Maven的parent POM,还可以更容易地管理依赖的版本和使用默认的配置,工程中的模块也可以很方便地继承它.例如,使用1.2.1节创建的工程,修改pom.xml文件,使用如代码清单1-1所示的简单Maven配置,基本上就能为一个使用Spring Boot开发框架的Web项目开发提供所需的相关依赖. 代码清单1-1 Spring Boot Web基本依赖

eclipse 导入jar包 和maven依赖关系问题

问题描述 eclipse 导入jar包 和maven依赖关系问题 eclipse已经导入jar包就可以用到里面的内容了,那要maven的依赖关系还用什么用 解决方案 如果导入了,不用maven也可以.不过maven感觉方便一些.

Maven 依赖 spring-web 对战 spring-webmvc

Maven 依赖 spring-web 对战 spring-webmvc 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 如果我单独包含 spring-webmvc ,那么 spring-web

class-idea 14 maven依赖问题

问题描述 idea 14 maven依赖问题 包已经依赖,为什么调用类的时候根本无法提示出来,直接写也不报错,就是不提示,很受煎熬 解决方案 IDEA下Maven依赖包下载不下来的问题解决方案 解决方案二: 这个配了吗

spring-多个模块项目使用maven依赖,在做Junit单元测试时,其他模块的类不能注入

问题描述 多个模块项目使用maven依赖,在做Junit单元测试时,其他模块的类不能注入 如题: 我们当前通过maven依赖,依赖了多个模块,在做junit单元测试时我们的单元测试类中 引入了其他模块声明的服务类或者是Dao类,通过@Autowired注入,spring无法对该类注入 请大神解答一下 解决方案 你倒是贴一下你的spring配置文件啊