一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

使用Maven插件修改工程版本号

时间:2016-07-15 编辑:简简单单 来源:一聚教程网

当Maven下面的子模块比较多的时候,每次修改工程的版本号都是一件非常的痛苦的事情,因为子模块都引用了顶级父模块的pom,所以虽然在父模块中定义了工程的版本号,但每个子模块中要显示地指定父模块的版本号,否则无法找到父模块的pom。举例如下:
./pom.xml

 

 代码如下 复制代码


     com.example.framework
     lingseeframework
     pom
     1.0.2-SNAPSHOT
 
    
         3.0.2-SNAPSHOT
    

 
    
         common
    

 
    
        
            
                 com.example.framework
                 common
                 ${framework.version}
            

 
        

    

 

./common/pom.xml

 
    
         com.example.framework
         framework
         1.0.2-SNAPSHOT
         ..
    

     common
 

Maven Release Plugin中有一个release:update-versions 指令可以自动更新maven工程及子工程的版本号,并且也会自动更新framework.version属性的值,但唯一有问题的是其版本号只能以-SNAPSHOT结尾,即使使用developmentVersion参数指定了不带SNAPSHOT结尾的版本号也不行,如使用

 mvn release:update-versions -DautoVersionSubmodules=false -DdevelopmentVersion=1.0.3
命令执行之后,所有的版本号都变成了1.0.3-SNAPSHOT,而不是1.0.3。不过有人hack了代码,在release:update-versions中增加了一个releaseVersion参数,可以设定正式版的版本号,项目地址为:https://github.com/ge0ffrey/maven-release,可以下载下来进行编译使用。

另外还有一个专门用来修改项目版本号的Maven插件:Versions Maven Plugin,使用起来也非常方便,只要在父工程目录下执行下面的命令即可:

 mvn versions:set -DnewVersion=1.0.3
后面的版本名称不限于SNAPSHOT类型,可以任意设置,但这个插件最大的问题就是无法自动修改framework.version的属性的值。

另外,在查阅资料的过程中在statck overflow上发现了有人利用Maven AntRun Plugin设置了一个可以交互输入版本号的方式,即创建了一个profile,代码如下:

 

 代码如下 复制代码

        
             change-version
            
                 validate
                
                    
                         org.apache.maven.plugins
                         maven-antrun-plugin
                         1.7
                        
                        
                            
                                 org.apache.ant
                                 ant
                                 1.8.4
                            

                            
                                 org.codehaus.plexus
                                 plexus-utils
                                 1.5.15
                            

                        

                        
                            
                                 catch-new-version
                                
                                     run
                                

                                 validate
                                
                                    
                                        
                                        
                                    

                                    
                                     true
                                

                            

                        

                    

                    
                         org.codehaus.mojo
                         versions-maven-plugin
                         2.2
                        
                            
                                 set-new-version
                                
                                     set
                                

                                 validate
                                
                                     false
                                     ${new-user-version}
                                

                            

                        

                    

                

            

        

    
 

使用的时候指定profile为change-version即可,为了不使每个子模块都出现input对话框,在执行mvn命令的时候加上 -N 参数。但这种方式依然无法修改framework.version属性的值,如果在antrun中将new-user-version修改为framework.version或者给其赋值的话都无法成功,也就是无法覆盖已经存在的maven的属性值。

综合来说,两种方式都无法完美地实现三个要求,即自动修改父工程及所有子工程的的版本号、版本号不限于SNAPSHOT和自动修改framework.version的属性,现在看来只有重新编译ge0ffrey修改的maven release插件才能满足要求。

热门栏目