zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    hao947 : Mybatis resultMap配置插入和主键自增返回 : 好947
    VelocityTracker简单介绍
    Java中StringBuilder的清空方法比較
    jquery中的动画
    数据库索引的作用和长处缺点
    很具体GC学习笔记
    深入理解 JBoss 7/WildFly Standalone 模式启动过程
    curl命令具体解释
    【免费】iPhone上最好用的短信群发软件: 高速短信4.1
    Project interpreter not specified(eclipse+pydev)
  • 原文地址:https://www.cnblogs.com/itplay/p/13213543.html
Copyright © 2011-2022 走看看