maven依赖的版本管理

待我称王封你为后i 2022-01-13 11:05 610阅读 0赞

使用变量进行管理

定义一个版本号的变量

  1. <properties>
  2. <spring-framework-version>4.3.7.REALEASE</spring-framework-version>
  3. </properties>

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

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-webmvc</artifactId>
  4. <version>${spring-framework-version}</version>
  5. <scope>compile</scope>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework</groupId>
  9. <artifactId>spring-test</artifactId>
  10. <version>${spring-framework-version}</version>
  11. <scope>test</scope>
  12. </dependency>

使用maven的dependencyManagement管理

单个jar的管理

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>javax.servlet</groupId>
  5. <artifactId>javax.servlet-api</artifactId>
  6. <version>3.1.0</version>
  7. </dependency>
  8. </dependencies>
  9. </dependencyManagement>

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

  1. <dependency>
  2. <groupId>javax.servlet</groupId>
  3. <artifactId>javax.servlet-api</artifactId>
  4. </dependency>

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

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

  1. <dependency>
  2. <groupId>org.springframework.data</groupId>
  3. <artifactId>spring-data-jpa</artifactId>
  4. <version>1.10.4.RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework</groupId>
  8. <artifactId>spring-test</artifactId>
  9. <version>4.3.7.RELEASE</version>
  10. <scope>test</scope>
  11. </dependency>

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

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

pom管理jar集合的版本

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

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.springframework</groupId>
  5. <artifactId>spring-framework-bom</artifactId>
  6. <version>4.3.7.RELEASE</version>
  7. <type>pom</type>
  8. <scope>import</scope>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>

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

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-test</artifactId>
  4. <scope>test</scope>
  5. </dependency>

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

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.springframework.data</groupId>
  5. <artifactId>spring-data-releasetrain</artifactId>
  6. <version>Hopper-SR4</version>
  7. <scope>import</scope>
  8. <type>pom</type>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>

它的版本不同于普通的版本号,如1.11.7.RELEASE这种,而是独立的版本体系

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

  1. Hopper-SR4 <-> 1.10.4.RELEASE

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

发表评论

表情:
评论列表 (有 0 条评论,610人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Maven依赖管理

    定义maven坐标 每个maven工程都需要定义本工程的坐标,坐标是maven对jar包的身份定义。 <!--项目名称,定义为组织名+项目名,类似包名-->

    相关 Maven 依赖管理

    Maven 依赖管理 Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针...