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包引入项目依赖,详见:
如何在Maven项目中引入自己的jar包
2.maven工程项目与项目之间的依赖方式
参考:https://blog.csdn.net/qq_28524127/article/details/80475398
首先看一下项目结构:
1、需要在父工程中把子工程为坐标引进来,同时标注父工程为pom工程:
2、同时在父工程中把子工程当作一个模块引进来
子工程的version可以写成
<version>${project.version}</version>
3、需要在每一个子项目中通过parent标签,标注为父工程,代表他需要依赖的父工程。同时拥有父工程的所有依赖:
问题:那这种形式的项目,怎么部署在Tomcat上啊?父工程也要部署在Tomcat上吗?还是只需要子工程部署在Tomcat上就可以了?
子工程部署在Tomcat上就可以了,会以jar的形式加载父工程
Maven版本管理的更多相关文章
- 10 Maven 版本管理
Maven 版本管理 一个健康的项目通常有一个长期.合理的版本演变过程.例如 Maven 本身的版本也比较多,如最早的 Maven1:Maven2 有 2.0.9.2.0.10.2.1.0.2.2.0 ...
- Maven学习总结(24)——Maven版本管理详解
Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习.而所说的稳定版本,理想状态下是项目到了某个比较稳定的状态,这个稳定包含了源代码和构建都要稳定. 一.如何衡量项目 ...
- Maven版本管理-Maven Release Plugin插件
一.什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基 ...
- 纯干货!华为软件开发云编译构建之Maven
一.Maven介绍 Maven是一个项目管理和整合的工具.Maven为开发者提供了一套完整的构建生命周期框架.开发团队基本不用花多少时间就能自动完成工程的基础构建配置,因为Maven使用了一个标准的目 ...
- Maven - 实例-1-手工创建Maven项目
1- 根据包结构创建maven项目目录 TestMaven - src - src/main/java/anliven/testmaven01/HelloMaven.java - src/test/j ...
- Maven 进阶
一.Maven 版本管理 Maven 的推荐版本号约定为:主版本号.次版本号.增量版本号-<里程碑版本> 开发中的版本要以 -SNAPSHOT 结尾,因为这种快照版本是支持 jar 包被覆 ...
- Maven基础命令
Maven 参数 -D 传入属性参数 -P 使用pom中指定的配置 -e 显示maven运行出错的信息 -o 离线执行命令,即不去远程仓库更新包 -X 显示maven允许的debug信息 -U 强制去 ...
- 【构建工具】《Maven实战》读书笔记
Maven是我们在做Java开发过程中用经常用到的一个辅助工具.本篇博客是我学习Maven的一个记录博客,学习过程主要参考<Maven实战>这本书.同时也参考了Maven的官方文档. 1. ...
- mvn常用指令记录
maven工程版本号更新: -------------------------------------------------------------------------------------- ...
随机推荐
- pypy安装与使用
首先安装pypy环境: yum install pypy -y yum install pypy-devel -y 然后安装pypy的pip:wget https://bootstrap.pypa.i ...
- Java基础 try...catch(多个异常) 多个异常采取同样的解决措施
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- MacOS Laravel 安装教程
一.到官网选择 Laravel 版本 根据个人的喜好选择安装的版本,我选择的是 5.8 https://laravel.com/docs/5.8/installation 以下是 Laravel 5. ...
- 通过sed -i ,通过准备好的sh脚本,来设置linux iptable白名单
通过准备好的sh脚本,来设置linux iptable白名单 特定字符串的行前插入新行 sed -i '/特定字符串/i 新行字符串' file #!/bin/bash del_stdin_buf() ...
- Linux目录结构和作用
转载自:https://blog.csdn.net/wangrongrongwq/article/details/79624797 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat ...
- kafka与Rocketmq的区别
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kaf ...
- phpexcel无法导出的解决方法
phpexcel无法导出的解决方法 <pre> set_time_limit(0); ini_set("memory_limit","512M"); ...
- Mysql 学习整理
1 创建数据库 1.1数据库基本结构 数据库:数据库是表的集合,带有相关的数据. 表:一个表是多个字段的集合. 字段:一个字段是一列数据,由字段名和记录组成 1.2创建数据库 create datab ...
- 使用qmlscene命令来快速查看编辑的qml文件的实际效果图
一片金灿灿的树叶落下来,仿佛飞来了许许多多翩翩起舞的黄蝴蝶. Qt SDK 提供 了 一个 命令行 环境, 给那些 有 特殊 需求 的 开发者, 方便 他们 在 不 使用 Qt Creator 集成 ...
- 手写IOC-SPRINGPMVC-CONNPOOL
(一) 手写IOC思路 1.扫包,将所有class文件加载到内存,判断类上是否加了ExtService注解,有就添加入map中 , map<String ,Object>: key是 ...