参考了网络上很多文章, 特此感谢.

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项目思考&实战的更多相关文章

  1. 【IDEA】本地新建Maven项目+配置Git和GitHub+代码上传和拉取到GitHub+其他IDEA和GitHub实战

    一.本地新建Maven项目并启动成功 1. 按照IDEA提供的模板,构建一个maven webapp的模板项目. 一路Next,到最后的finish.如下图. 2. 新建Tomcat,启动刚建立的项目 ...

  2. 《maven实战》笔记(2)----一个简单maven项目的搭建,测试和打包

    参照<maven实战>在本地创建对应的基本项目helloworld,在本地完成后项目结构如下: 可以看到maven项目的骨架:src/main/java(javaz主代码)src/test ...

  3. kubernetes下jenkins实战maven项目编译构建

    关于kubernetes环境的jenkins集群 在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下所示: 在kubernetes搭建jenk ...

  4. Maven实战(二)构建简单Maven项目

    上一节讲了maven的安装和配置,这一节我们来学习一下创建一个简单的Maven项目 1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:gene ...

  5. Maven实战(三)Eclipse构建Maven项目

    1. 安装m2eclipse插件    要用Eclipse构建Maven项目,我们需要先安装meeclipse插件    点击eclipse菜单栏Help->Eclipse Marketplac ...

  6. (转)Maven实战(三)Eclipse构建Maven项目

    1. 安装m2eclipse插件    要用Eclipse构建Maven项目,我们需要先安装meeclipse插件    点击eclipse菜单栏Help->Eclipse Marketplac ...

  7. (转)Maven实战(二)构建简单Maven项目

    上一节讲了maven的安装和配置,这一节我们来学习一下创建一个简单的Maven项目 1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:gene ...

  8. 096实战 在windows下新建maven项目

    1.拷贝settings到.m2文件下 2.修改文件 3.新建Project项目 4.转换为maven项目 config下转换 5.拷贝pom文件 <project xmlns="ht ...

  9. 【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架

    技术推荐 自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-pl ...

随机推荐

  1. docker-compose 部署 Apollo 自定义环境

    Apollo 配置中心是什么: ​ Apollo是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性. ...

  2. 解决“与 Microsoft Exchange 的连接不可用,Outlook 必须联机或已连接才能完成此操作”

    Microsoft Outlook 是一种用于发送和接收电子邮件的应用程序.由于其可靠性和各种使用类型,它在企业公司中非常受欢迎.Outlook 还可用于管理各种类型的个人数据,如日历约会.联系人.邮 ...

  3. R语言读取文件

    1.R语言读取文件,文件类型为.txt 直接使用read.table()即可,若不知道当前的工作目录,可以使用函数getwd()来查看 2.R语言读取文件,文件类型为.xlsx 方法一:可以把excl ...

  4. R的基本使用

    一.R的安装 1.进入R的官网,https://cran.r-project.org/ 2.下载对应的版 Downloaad R for Windows > base > Download ...

  5. Elasticsearch查询文档总数

    前言 在使用ES搜索的时候,或多或少都会面临查询数据总量的情况,下面介绍三种查询数据总量的方式. 其中,方案二解决了当结果数据总量超过1w时,由于ES默认设置(max_result_window:10 ...

  6. 32、JavaScript介绍

    32.1.JavaScript概述: 1.JavaScript的历史: 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名Scr ...

  7. c++11 线程间同步---利用std::condition_variable实现

    1.前言 很多时候,我们在写程序的时候,多多少少会遇到下面种需求 一个产品的大致部分流程,由工厂生产,然后放入仓库,最后由销售员提单卖出去这样. 在实际中,仓库的容量的有限的,也就是说,工厂不能一直生 ...

  8. 【问答分享第一弹】MySQL锁总结:MySQL行锁、表锁、排他锁、共享锁的特点

    大家好,我是小于哥哈.前几天能分享了第一期面试题,MySQL 中有哪几种锁 和 这些锁各有哪些特点 ,这道面试题是经常会被问到的一个面试题,大家反馈的都挺不错的.今天特此来总结一下. 首发于公众号[终 ...

  9. 一款好用的CRM系统为何很难被企业找到?

    如果您想要照明,买个灯具就能解决问题:如果您想要沟通,买个手机就能立刻打起电话:如果您要购买好用的CRM系统,那就没有这么简单了,无论是选型过程还是使用结果都十分复杂.做为想要使用CRM的潜在用户,您 ...

  10. linux 退出状态码

    状态码 描述 0 命令成功结束 1 一般性未知错误 2 不适合的shell 命令 123 命令不可执行 127 没找到命令 128 无效退出参数 128+x 与linux信号x相关的严重错误 130 ...