Maven版本管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Maven版本管理
⼀.Maven项⽬打包的两种⽅式:
1.依赖⼯具⽐如eclipse
2.使⽤命令⾏:
使⽤cmd进⼊到pom对应的⽬录下:
执⾏:mvn clean install 指令。
⼆.如何优雅地修改多模块maven项⽬中的版本号?
当我们⽤maven建⽴⼀个项⽬时,包含了多个⼦model,我们想把⼀个⼦model打包deploy到私服上去,需要:
1.从⽗节点把整个project都deploy上去,这时别⼈才能拉去到你上传的model。
2.保证整个project中所有model的version是⼀致的。
对于version,我们可以使⽤-SNAPSHOT这种⽅式,这样所有model都是⼀致的,每次发布也不会有问题。但如果项⽬发展⽐较快,需要使⽤release版本发布,由于release版本每次deploy时版本号不能重复,所以就需要每次都修改⽗model的version和⼦model的parent中的version。这时,就会有以下问题需思考:
正式版不能重复发布,所以版本号每次上线都要更改
当项⽬中包含⼏个⼦模块时,通常我们想让⼦模块的版本号跟⽗项⽬的版本号⼀致
⼦模块也会相互依赖
最容易解决的是问题3,maven有⼀个内置属性${project.version}表⽰的是项⽬的版本号,当⼀个⼦模块依赖其他⼦模块时我们可以这样写:
<parent>
<groupId>parent-groupId</groupId>
<artifactId>parent-artifactId</artifactId>
<version>1.0.0</version>
<relativePath>..</relativePath>
</parent>
<artifactId>module-artifactId</artifactId>
<dependency>
<artifactId>other-module-artifactId</artifactId>
<groupId>other-module-groupId</groupId>
<version>${project.version}</version>
</dependency>
⼦POM的groupId和version可以省略,这样只要保证⼦模块的版本号都⼀致就不会有问题了。但是<parent>标签中的版本号还是要写,不然会报错,显然maven没有进化到这么智能的程度,或者可能会造成其他混乱⽽必须指定。⽽投机取巧地把<parent>标签中的版本号换成${project.version}也没有成功,因为必须先初始化<parent>标签才能知道${project.version}是多少。
但是maven除了内置属性之外还可以⾃定义属性,我们可以在⽗pom中这样写:
<groupId>parent-groupId</groupId>
<artifactId>parent-artifactId</artifactId>
<version>${parent-version}</version>
<properties>
<parent-version>1.0.0</parent-version>
</properties>
在⼦pom中这样写:
<parent>
<groupId>parent-groupId</groupId>
<artifactId>parent-artifactId</artifactId>
<version>${parent-version}</version>
<relativePath>..</relativePath>
</parent>
这样写达到了只修改⼀处的⽬的,但是在mvn install时会提⽰ <parent> 标签中的version不是⼀个常量,未来的版本可能不⽀持,⽽且各个⼦模块单独mvn install时可能会失败。
最终⽐较折中的解决⽅案是使⽤了maven的插件来解决,在⽗pom中这样写:
前边废话了⼀⼤堆,后边的才是重点
<groupId>parent-groupId</groupId>
<artifactId>parent-artifactId</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
</plugins>
</build>
只需要执⾏mvn -N versions:update-child-modules则会⾃动把⼦POM的<parent>标签中的version更新为和⽗POM⼀致。这样修改⼀处然后运⾏⼀下执⾏⼀下命令就可以达到统⼀修改版本号的⽬的了。(在⽗model上执⾏后,所有⼦model中parent中的version都会修改)
mvn versions:update-child-modules: ⾃动把⼦POM的<parent>标签中的version更新为和⽗POM⼀致
mvn versions:set -DnewVersion=0.0.2-SNAPSHOT:更新的⽗及⼦Module的版本号都改成了0.0.2-SNAPSHOT.
mvn versions:commit :如果没有在⽗pom⽤引⼊插件,Maven还会⽣成⼀个pom.xml.versionsBackup的备份⽂件,还需要mvn versions:commit提交
如果没有在⽗pom⽤引⼊插件,
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
Maven还会⽣成⼀个pom.xml.versionsBackup的备份⽂件,还需要mvn versions:commit提交
或者执⾏
mvn versions:set -DnewVersion=2.0.0-SNAPSHOT -f pom.xml
然后项⽬中的依赖以及聚集的依赖版本都会被⼀起更新,也可以采⽤通配符来进⾏匹配
mvn versions:set -DgroupId=org.apache.maven.* -DartifactId=* -DoldVersion=2.* -DnewVersion=2.1.0-SNAPSHOT
三.⼀个项⽬使⽤另⼀个项⽬
1.打成jar包引⼊项⽬依赖,详见:
2.maven⼯程项⽬与项⽬之间的依赖⽅式
⾸先看⼀下项⽬结构:
1、需要在⽗⼯程中把⼦⼯程为坐标引进来,同时标注⽗⼯程为pom⼯程:
2、同时在⽗⼯程中把⼦⼯程当作⼀个模块引进来