ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简介 这个插件是用来修改pom的版本的,几乎是所有的版本号,比如工程,依赖和插件等等。 maven的版本管理经验,所有依赖都有一个root-pom来统一管理。 这样的话,每发一个release的包,其实就应该同时也修改了root-pom中这个包的版本号,这样,其他工程才能依赖到最新的代码。那么修改root-pom版本号的任务就可以交给versions插件。 这个可以放在jenkins中作为一个post-action来处理。每构建一个release包就触发一次root-pom修改 ~~~ <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <version>2.3</version> </plugin> </plugins> ~~~ # 常用命令 **修改本工程的版本号:** ~~~ mvn versions:set -DnewVersion=xxx ~~~ 然后install生成包 ~~~ mvn clean install -Dmaven.test.skip=true ~~~ **回滚:** versions的任何目标,最终都会先记录一个pom.xml.versionsBackup文件暂存改动,可以使用 `mvn versions:revert`来回滚,这样就会恢复成`pom.xml.versionsBackup`文件的样子同时删除`pom.xml.versionsBackup`。 当然也可以`mvn versions:commit`来提交修改,删除`pom.xml.versionsBackup`文件 **修改依赖的版本:** * versions:use-next-release在pom中搜索所有新版本的非快照版本,并将它们替换为下一个版本。 * versions:use-latest-releases 在pom中搜索所有新版本的非快照版本,并用最新版本替换它们。 * versions:use-next -SNAPSHOT在pom中搜索所有新的非快照版本,并将它们替换为新的快照版本。 * versions:use-latest-snapshots在pom中搜索所有最新的非快照版本,并将它们替换为最新的快照版本。 * versions:use-next-versions在pom中搜索更新版本的所有版本,并用新版本替换它们。 * versions:use-latest-versions在pom中搜索所有更新的版本,并用最新的版本替换它们。 其实主要就这六个。前四个只会修改pom中的release依赖版本号,修改为下一个release或者snapshot。后两个会修改所有的依赖为下一个或者最新的版本号。 注意2.0版本的下一个snapshot为2.1-SNAPSHOT而非3.0-SNAPSHOT。 当然可以指定修改特定的依赖的版本号,通过添加`-Dincludes=group:artifact`即可,并且支持通配符。 另外,默认会修改dependency和dependencyMangement的版本号,可以加参数限定: ~~~ mvn versions:use-next-releases -DprocessDependencies=false mvn versions:use-next-releases -DprocessDependencyManagement=false ~~~ # 修改pom中的property 可以使用set-property目标来修改pom中定义的property。这个在修改root-pom中的依赖版本会很有用。因为一般root-pom中的依赖的版本都是通过property来定义的,这样通过修改property就能修改依赖版本了,更新一个工程之后修改root-pom会很有用。 ~~~ <dependency> <groupId>com.liyao</groupId> <artifactId>libJar</artifactId> <version>${lib.version}</version> </dependency> <lib.version>1.0-SNAPSHOT</lib.version> ~~~ ~~~ mvn versions:set-property -Dproperty=lib.version -DnewVersion=1.1-SNAPSHOT ~~~ # 参数介绍 |参数 |默认值 |说明 | | --- | --- | --- | |allowSnapshots |false |是否更新-snapshot快照版| |artifactId |${project.artifactId} |指定artifactId | |generateBackupPoms |true |是否备份pom文件 | |groupId |${project.groupId} |指定groupId | |newVersion | |设置的新版本号 | |nextSnapshot |false |更新版本号为下一个快照版本号| |oldVersion |${project.version} |指定需要更新的版本号可以使用缺省‘*’| |processAllModules |false |是否更新目录下所有模块无论是否声明父子节点| |processDependencies |true |是否更新依赖其的版本号| |processParent |true |是否更新父节点的版本号| |processPlugins |true |是否更新插件中的版本号| |processProject |true |是否更新模块自身的版本号| |removeSnapshot |false |移除snapshot快照版本,使之为release稳定版| |updateMatchingVersions |true |是否更新在子模块中显式指定的匹配版本(如/项目/版本)。| # 版本控制 ## 修改全模块版本号 修改版本的时候,必须规范模块中pom.xml文件的编写,显式声明其父子节点信息(`<parent></parent>|<modules></modules>`),需要修改全部模块的版本号为1.0.1-SNAPSHOT,可以在最顶层的根目录,如产品主干在src下,cmd进入根目录,运行命令 ~~~ mvn versions:set -DoldVersion=* -DnewVersion=1.0.1-SNAPSHOT -DprocessAllModules=true -DallowSnapshots=true ~~~ 修改后输入: ~~~ mvn clean install -DskipTests ~~~ 成功后,输入: ~~~ mvn dependency:tree -Dverboss -Dincludes=${project.groupId}:${project.artifactId} ~~~ 检查工程的依赖树是否全部依赖了1.0.1-SNAPSHOT的base模块 如果全部模块版本号都改为了:1.0.1-SNAPSHAOT,即修改成功。 若修改失败,可是使用命令回退版本号: ~~~ mvn versions:revert ~~~ 若确认版本,可使用命令: ~~~ mvn versions:commit ~~~ 修改版本所产生的backup文件会自动删除。 ## 修改模块版本 若开需要推进某模块版本号,或有问题需要回退某模块的版本,或者区域分支想更新某模块为新版本,例如修改base模块的版本号为1.0.1-SNAPSHOT,cmd命令行进入模块目录。 ~~~ mvn versions:set -DnewVersion=1.0.1-SNAPSHOT -DprocessAllModules=true -DallowSnapshots=true ~~~ 即可修改该模块及依赖该模块的版本号为1.0.1-SNAPSHOT,其中参数-DallowSnapshots=true,表示允许release版修改为snapshot版。 加上参数`-DprocessAllModules=true`表示该模块下的子模块及依赖其的版本号都改成`1.0.1-SNAPSHOT`。 ## 修改指定模块版本号 如果想修改指定模块的版本号即整个模块中依赖其的版本号,比如`groupId:groupId:{artifact}`的版本号修改为1.0.2-SNAPSHOT,可以运行命令: ~~~ mvn versions:set -DgroupId=${groupId} -DartifactId=${artifact} -DoldVersion=* -DnewVersion=1.0.2-SNAPSHOT -DallowSnapshots=true ~~~ 其中,artifactId、groupId和version在maven中形成三维坐标以指定模块,而在这里指定`-DgroupId=${groupId} -DartifactId=${artifact}` 确定制定修改的模块为`${groupId}:${artifact}`。 如果不希望修改依赖mongodb的模块也修改mongodb的版本号,可以使用参数-DprocessDependencies=false取消依赖其的修改,从而只修改xxx工程的版本号: ~~~ mvn versions:set -DgroupId=${groupId} -DartifactId=xxx -DoldVersion=* -DnewVersion=1.0.2-SNAPSHOT -DallowSnapshots=true -DprocessDependencies=false ~~~ # 快照版与正式版切换 有些时候我们会先用SnapShot版本,当他发布正式版本的时候,我们就需要换过来,例如 ~~~ <dependency> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-core-api</artifactId> <version>1.0-alpha-7-SNAPSHOT</version> </dependency> ~~~ 然后我们执行 ~~~ mvn versions:unlock-snapshots ~~~ 版本就可以变成,SNAPSHOT就去掉了 ~~~ <dependency> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-core-api</artifactId> <version>1.0-alpha-7</version> </dependency> ~~~ 也可以指定具体的库进行更新 ~~~ mvn versions:use-releases -Dincludes=org.codehaus.plexus:plexus-utils ~~~ 默认情况下dependencyManagment和dependencies区域内的版本都会被更新,需要指定特定版本的话就需要使用 ~~~ mvn versions:use-releases -DprocessDependencies=false mvn versions:use-releases -DprocessDependencyManagement=false ~~~