• Maven 指定范围依赖


    许多大型的项目都已经模块化或组件化了,每个组件都可以自己进行版本发布,由于各组件之间有依赖关系,一个组件的版本号频繁修改(例如每个组件都遵从语义化版本控制语义化版本控制,当bugfix时修订版本号会频繁的进行修改),会引起依赖它的组件也需要及时修改依赖的版本号,这样既繁琐又低效。这时候可以通过指定范围依赖来解决,上层的组件可以不用关心下层的组件版本号修改(在不影响使用的前提下)。

    下面通过例子说明如何在maven项目中指定范围依赖,并进行编译。这里假设某个项目由A、B、C三个组件组成,其中A组件依赖于B组件。在A项目中指定对B组件的范围依赖,假设依赖B组件的2.3.*版本,即末尾版本号不管怎么修改,A组件都不需要关心,但在每次编译部署时希望能在maven repo里拉到最新的jar包。

    1. 在A组件中的指定B的版本依赖为一个范围区间[2.3.0,2.4.0),即表示了A组件依赖B组件的2.3.*版本。在pom.xml有关配置如下:
          <properties>
                    <b.version>[2.3.0,2.4.0)</b.version>
          </properties>
          <dependencies>
    	      <dependency>
    		      <groupId>org.xxx.xxx</groupId>
    		      <artifactId>B</artifactId>          
    		      <version>${b.version}</version>       
    	      </dependency>     
          </dependencies>
    

    2.按上述在pom文件中配置了依赖的版本范围,编译时需要对范围依赖进行处理,因为编译时maven会把在该区间内的所有jar包都拉到本地,我们需要指定使用该区间内最新版本的jar包进行编译组件A。

    1)需要添加一个插件:versions-maven-plugin,用来处理范围依赖中的最新版本。

            <build>
                 <plugins>
                      <plugin>
                          <groupId>org.codehaus.mojo</groupId>
                         <artifactId>versions-maven-plugin</artifactId>
                        <version>2.3</version>
                     </plugin>
                 </plugins>
            </build>
    

    2)执行命令:

          mvn versions:resolve-ranges
    

    ** 执行完该命令后,pom中指定的版本范围会被更新指定为该区间内的最新版本。在本例中此时**${b.version}的值会变成

    [2.3.0,2.4.0)中最新的版本号,例如2.3.7

    3)执行完上述命令后在进行编译部署等操作

       mvn clean install/package/deploy
    

    4) 将pom文件中的指定版本回滚到之前的指定范围区间

          mvn versions:revert
    

    由于在编译之前已经将指定的范围依赖更新成了特定的新版本,然后在本地进行编译,但是此时不能将项目中这个改动上传到远程项目,远程项目中应该是指定的范围依赖。

    因此需要恢复到原来的依赖范围状态,因此需要执行下mvn versions:revert进行回滚。此时 <b.version>2.3.7</b.version> 会被回滚成原始的版本 <b.version>[2.3.0,2.4.0)</b.version>

    总结下来一句话就是:开发时项目中指定了范围依赖,本地/CI编译步骤不再是简单的mvn compile/install/test/deploy,而是下面三个步骤:

           1.mvn versions:resolve-ranges
           2.mvn install/package/deploy
           3.mvn versions:revert
    
  • 相关阅读:
    python习题:操作mysql数据库,传入sql返回执行结果
    mysql-5.7.21-winx64.zip 下载安装
    Python用起来极度舒适的强大背后
    Python标准库映射类型与可散列数据类型的关系
    windows下《Go Web编程》之Go开发工具
    20行以内python代码画出各种减压图
    windows下《Go Web编程》之Go命令
    navicat连接Oracle数据库
    golang 报错illegal rune literal
    golang 缺少逗号报错问题
  • 原文地址:https://www.cnblogs.com/itplay/p/13213543.html
Copyright © 2020-2023  润新知