Maven项目思考&实战
参考了网络上很多文章, 特此感谢.
Maven项目规范
- 同一项目中所有模块版本保持一致
- 子模块统一继承父模块的版本
- 统一在顶层模块Pom的节中定义所有子模块的依赖版本号,子模块中添加依赖时不要添加版本号
- 开发测试阶段使用SNAPSHOT
- 生产发布使用RELEASE或(无后缀)正式版
- 新版本迭代只修改父POM中的版本和子模块依赖的父POM版本
部署目标
- 正确
- 快速
- 简单
- 自动
善用工具
- 插件 versions-maven-plugin: 管理自身版本号, 依赖版本号
- 插件 maven-release-plugin: 自动升级版本, 提交代码, 打TAG
场景1: 独立项目(对外)的发布流程
- 确定/更新依赖模块版本(第三方)
- 发布服务器: 更新代码
- 准备发布: mvn -B -DskipTests=true release:clean release:prepare
- 本地准备: 修改版本号从snapshot到无后缀版本(或自定义)
- 本地准备: GIT仓库的新TAG: bfeaturemod-1.0.8
- 本地编译
- 本地准备: 更新版本号为下一个snapshot版本
- 本地准备: 提交
- 正式发布: mvn -DskipTests=true release:perform
- 发布最新的snapshot版本: mvn -DskipTests=true deploy
场景2: 内部项目永远snapshot
内部项目就很灵活了, 这里介绍一种发布流程.
前提条件
- 所有项目版本号永远是snapshot, 而且一般不升版本号, 为1.0-snapshot
- 生产仓库和开发仓库物理隔离
- 如果只有一台部署机器, 则只使用mvn install, 不使用deploy
- 每次发布都是全量发布(如果代码没有修改, 部署脚本(自己编写)会比较后自动跳过)
- 配置好依赖关系后, 会自动先compile和install依赖 (自己编写的部署脚本)
- 父子模块可以分别compile和install (被依赖的话会自动编译安装)
备注: 如果多台部署机器, 则需要deploy, 则需要激活Maven仓库的profile (区分生产和开发)
内部项目部署—发布步骤
- 如果有依赖项目, 则先发布依赖项目(人工或者脚本根据配置)
- 更新代码, 检查代码是否有更新, 如果没有更新则不发布
- 编译发布 mvn clean install –DskipTests=true
- 打TAG提交到GIT
- 部署: 复制包到远程服务器, stop/start
内部项目部署—支持的方式
- Web (jetty)
- Service(Assembly) +使用wrapper包装
- Spring Boot + Wrapper
- Command 自定义
- 自己扩展
需要自己准备脚本(复制粘贴), 依赖配置等(一次性)
内部项目部署配置—示例


场景3: 更复杂的项目开发部署
可以组合使用versions-maven-plugin , maven-release-plugin 来自动发布, 但会比较繁琐.

过于复杂, 则不推荐使用了.
总之要根据自己的实际情况做调整, 或者使用更好的工具更好的方法来解决.
Maven项目思考&实战的更多相关文章
- 【IDEA】本地新建Maven项目+配置Git和GitHub+代码上传和拉取到GitHub+其他IDEA和GitHub实战
一.本地新建Maven项目并启动成功 1. 按照IDEA提供的模板,构建一个maven webapp的模板项目. 一路Next,到最后的finish.如下图. 2. 新建Tomcat,启动刚建立的项目 ...
- 《maven实战》笔记(2)----一个简单maven项目的搭建,测试和打包
参照<maven实战>在本地创建对应的基本项目helloworld,在本地完成后项目结构如下: 可以看到maven项目的骨架:src/main/java(javaz主代码)src/test ...
- kubernetes下jenkins实战maven项目编译构建
关于kubernetes环境的jenkins集群 在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下所示: 在kubernetes搭建jenk ...
- Maven实战(二)构建简单Maven项目
上一节讲了maven的安装和配置,这一节我们来学习一下创建一个简单的Maven项目 1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:gene ...
- Maven实战(三)Eclipse构建Maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplac ...
- (转)Maven实战(三)Eclipse构建Maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplac ...
- (转)Maven实战(二)构建简单Maven项目
上一节讲了maven的安装和配置,这一节我们来学习一下创建一个简单的Maven项目 1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:gene ...
- 096实战 在windows下新建maven项目
1.拷贝settings到.m2文件下 2.修改文件 3.新建Project项目 4.转换为maven项目 config下转换 5.拷贝pom文件 <project xmlns="ht ...
- 【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架
技术推荐 自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-pl ...
随机推荐
- 关于使用Draw.io画数据库E-R图的说明
背景简介 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. diagrams.net是用于构建图表 ...
- ORA-12560: 解决TNS:协议适配器错误
1)安装成功,但无法连接数据库 2)网上查找原因:32位的不能运行64位的oracle,而且不会有64位的版本 3)解决办法:大致是修改客户端数据库为32位的(此方法OK) (1)解压instantc ...
- Java:TreeMap中LinkedHashMap和Map中HashMap的区别
一般情况下,我们用的最多的是HashMap,在Map 中插入.删除和定位元素,HashMap 是最好的选择. 但如果您要bai按自然顺序或自定义顺序遍历键,那么TreeMap会更好.如果需要输出的顺序 ...
- LVM拓展报错及处理
LVM拓展报错: root@ming:/# lvextend -L +100G /dev/ubuntu-vg/root Insufficient free space: 25600 extents ...
- 2021/2/5 关于new的一个教训
千万不要在类构造函数的初始化里new任何东西,这会导致析构函数delete一个野指针!构造函数一定要把所有的指针初始化为nullptr! 以下代码会报错(堆内存崩溃): Integer::Intege ...
- git常用命令自己梳理总结
一.新建代码库 # git-init - 创建一个空的 Git 存储库或重新初始化一个现有的存储库 $ git init # 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一 ...
- 测试基础(四)Jmeter基础使用
前言 通过测试基础(三) Jmeter安装 - 大风北吹 - 博客园 (cnblogs.com)安装完成Jmeter后,就可以使用Jmeter进行性能测试. 一.线程组 (1).线程组分类 Jmete ...
- yum的卸载和安装
安装精髓:报错就查,少包就按. 一.如果yum没有注册则需要卸载再安装第三方yum 1.卸载redhat的默认安装yum包 [root@dsl ~]#rpm –qa | grep yum [root@ ...
- CSP2020游记
初赛 这次考试完全没准备好啊-- Day0 (10.10) 本来打算看看初赛的内容 然后因为各种原因咕了-- 就做了一下洛谷的模拟卷 结果 \(40 \text{min}\) 得 \(80 \text ...
- 北京大公司:你是熟悉Map集合吗?
<对线面试官>系列目前已经连载30篇啦,这是一个讲人话面试系列 [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 &am ...