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 ...
随机推荐
- Java安全之基于Tomcat实现内存马
Java安全之基于Tomcat实现内存马 0x00 前言 在近年来红队行动中,基本上除了非必要情况,一般会选择打入内存马,然后再去连接.而落地Jsp文件也任意被设备给检测到,从而得到攻击路径,删除we ...
- Vue.js的基础学习
Vue.js的基础网上很多,这里不记录 开始正式页面的开发 1.页面加载时请求数据 methods: { post() { //发送post请求 this.$http.post('../../ashx ...
- Fiber 树的构建
我们先来看一个简单的 demo: import * as React from 'react'; import * as ReactDOM from 'react-dom'; class App ex ...
- 其实 Linux IO 模型没那么难
文章首发于公众号「陈树义」及个人博客 shuyi.tech,欢迎关注访问. 博主个人独立站点开通啦!欢迎点击访问:https://shuyi.tech IO 其实就是 Input 和 Output,在 ...
- 入门Kubernetes - 滚动升级/回滚
一.前言 上一篇文章中对yaml文件格式进行了解,并对k8s中各种主要资源通过yaml创建时的定义模板.接来下就进一步学习k8s的各种特点.并应用在示例中. 接下来先实现.Net Core Api程序 ...
- 第1章:Kubernetes 系统基础
51.1.kubernetes介绍: 1.什么是kubernetes: (1)Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. (2)使 ...
- 24、配置Oracle下sqlplus历史命令的回调功能
24.1.前言: 1.在oracle服务器上使用默认的sqlplus写sql命令时,如果写错了一个字母需要修改时,是无法通过 退格键消除错误的字母的,只能另起一行,重新写sql语句,而且也不能通过键盘 ...
- 21、oracle打开和关闭归档日志的方法
21.1.介绍: 在实际应用中,我们需要实现对数据的备份,其实现方式主要有冷备份和热备份两种,现在我们主要讨论热备份的具体操作. 热备份也称为联机备份,在数据库的存档模式下进行备份,oracel数据库 ...
- 删除有序数组中的重复项II
题目描述 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素最多出现两次,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组 并在使用O(1)额外空间的条件下 ...
- 暑假自学java第十二天
1, 创建String 字符串 Java 中的字符串是一连串的字符,与其他计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理.将字符串作为内置的对象处理,允许Jav ...