maven profiles多环境配置

转载。 https://blog.csdn.net/runbat/article/details/81747874

今天做了一个小项目,需要配置开发、测试、预发布、生产四套环境配置文件,正常是用配置中心的,但是我的项目还没上线,所以想下maven的profiles+filters,我看了下官网对profiles的介绍,官网profiles地址,一个字,累。

开始吧,要想实现多环境打包,总共分6步

步骤一、在src/main 下创建filters文件夹,maven文件目录结构里建议有filters文件夹(感兴趣的可以自己查下maven文件结构),这个和filters配合使用

步骤二、编写profiles, 这里需要说明两点 1:<properties>节点里的名字[profile-name] 这个可以自己定义,后面的<filter>节点要用到

2:  <activation><activeByDefault>true</activeByDefault></activation> 默认激活环境,一定要有,不然${profile-name}会报异常

  1.  
    <profiles>
  2.  
    <profile>
  3.  
    <id>dev</id>
  4.  
    <properties>
  5.  
    <profile-name>dev</profile-name>
  6.  
    </properties>
  7.  
    </profile>
  8.  
    <profile>
  9.  
    <id>test</id>
  10.  
    <properties>
  11.  
    <profile-name>test</profile-name>
  12.  
    </properties>
  13.  
    <activation>
  14.  
    <activeByDefault>true</activeByDefault>
  15.  
    </activation>
  16.  
    </profile>
  17.  
    <profile>
  18.  
    <id>prod</id>
  19.  
    <properties>
  20.  
    <profile-name>prod</profile-name>
  21.  
    </properties>
  22.  
    </profile>
  23.  
    <profile>
  24.  
    <id>pre</id>
  25.  
    <properties>
  26.  
    <profile-name>pre</profile-name>
  27.  
    </properties>
  28.  
    </profile>
  29.  
    </profiles>

步骤三、编写filters ,再次强调${profile-name} 是<profile>的properties里的自定义的名字,profiles 必须指定默认激活环境,参看步骤二

  1.  
    <build>
  2.  
    <filters>
  3.  
    <filter>src/main/filters/application_${profile-name}.properties</filter>
  4.  
    </filters>
  5.  
    ...... 省略其它配置
  6.  
    <build>

步骤四、在build里添加<resources>,maven打包默认会把src/main/resources下的文件都打包,并且指定是否要开启filtering,设置为true 会加载filters文件夹下符合要求的文件中的值

  1.  
    <resources>
  2.  
    <resource>
  3.  
    <directory>src/main/resources</directory>
  4.  
    <filtering>true</filtering>
  5.  
    <excludes>
  6.  
    <exclude>src/main/resources/application_backup.properties</exclude>
  7.  
    </excludes>
  8.  
    </resource>
  9.  
    </resources>

步骤五、在build里添加maven打包插件,我使用了maven-assembly-plugin自定义打包插件,它需要自定义一个xml文件,

<descriptor>src/main/assembly/package.xml</descriptor>
  1.  
    <plugin>
  2.  
    <artifactId>maven-assembly-plugin</artifactId>
  3.  
    <version>3.1.0</version>
  4.  
    <executions>
  5.  
    <execution>
  6.  
    <id>make-assembly</id>
  7.  
    <phase>package</phase>
  8.  
    <goals>
  9.  
    <goal>single</goal>
  10.  
    </goals>
  11.  
    <configuration>
  12.  
    <descriptors>
  13.  
    <descriptor>src/main/assembly/package.xml</descriptor>
  14.  
    </descriptors>
  15.  
    </configuration>
  16.  
    </execution>
  17.  
    </executions>
  18.  
    </plugin>

package.xml文件

  1.  
    <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
  2.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.  
    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
  4.  
    <id>${profile-name}</id>
  5.  
    <formats>
  6.  
    <format>zip</format>
  7.  
    </formats>
  8.  
    <includeBaseDirectory>false</includeBaseDirectory>
  9.  
    <fileSets>
  10.  
    <fileSet>
  11.  
    <directory>${basedir}/src/main/resources/</directory>
  12.  
    <includes>
  13.  
    <include>application.properties</include>
  14.  
    </includes>
  15.  
    <outputDirectory>config</outputDirectory>
  16.  
    <filtered>true</filtered>
  17.  
    </fileSet>
  18.  
    <fileSet>
  19.  
    <directory>${basedir}/target/</directory>
  20.  
    <includes>
  21.  
    <include>${project.artifactId}-${project.version}.jar</include>
  22.  
    </includes>
  23.  
    <outputDirectory>.</outputDirectory>
  24.  
    </fileSet>
  25.  
    <fileSet>
  26.  
    <directory>${basedir}/target/scripts/</directory>
  27.  
    <includes>
  28.  
    <include>*.sh</include>
  29.  
    </includes>
  30.  
    <directoryMode>755</directoryMode>
  31.  
    <outputDirectory>bin</outputDirectory>
  32.  
    </fileSet>
  33.  
    <fileSet>
  34.  
    <directory>${project.build.outputDirectory}/docs</directory>
  35.  
    <includes>
  36.  
    <include>*.*</include>
  37.  
    </includes>
  38.  
    <outputDirectory>docs</outputDirectory>
  39.  
    </fileSet>
  40.  
    </fileSets>
  41.  
    </assembly>

步骤六、打包 -P 指定打包环境,-Dmaven.test.skip=true 跳过测试,不然的话会检查配置文件是否能正常连接等等,比如会测试zk是否可用啊什么的,如果不可以打包会失败的。开发环境和线上肯定是隔离的,所以要指定跳过检查。生成的包在项目目录下的target文件夹下,mvn package会生成target文件夹  mvn clean会清除target文件夹的内容。

mvn package -P [profile-name] -Dmaven.test.skip=true

maven profiles多环境配置的更多相关文章

  1. Eclipse Maven profiles 多环境配置,测试环境与开发环境分开打包

    1.将开发环境.测试环境.生产环境的配置文件分开存放,如下图: 2.在Maven中配置不同的环境打包配置文件的路径,配置如下: <profiles> <profile> < ...

  2. maven的多环境配置

    <profiles> <profile> <id>dev</id> <activation> <activeByDefault> ...

  3. Jenkins Jenkins结合GIT Maven持续集成环境配置

    Jenkins结合GIT Maven持续集成环境配置   by:授客 QQ:1033553122 安装Git插件 1 安装Git客户端 1 安装JAVA JDK及MAVEN 2 Jenkins JDK ...

  4. Maven为不同环境配置打包

    在开发过程中经常要遇到为不同的环境打包,这里面最主要的问题在于,不同环境的配置是不一样的,如果为不同环境打包每次都手工修改配置,那不但工作量大,而且很容易出错.如果用ant的话,用变量加上replac ...

  5. Maven 多套环境配置

    在Java开发中会配置不同环境,可通过Maven的profile指定不同的环境配置,pom.xml配置如下: <project xmlns="http://maven.apache.o ...

  6. Java(JDK/Tomcat/Maven)运行环境配置及工具(idea/eclipse)安装

    Java (计算机编程语言) Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. Java语 ...

  7. SpringBoot Profiles 多环境配置及切换

    目录 前言 默认环境配置 多环境配置 多环境切换 小结 前言 大部分情况下,我们开发的产品应用都会根据不同的目的,支持运行在不同的环境(Profile)下,比如: 开发环境(dev) 测试环境(tes ...

  8. maven 多套环境 配置(开发、测试、预发、正式)

    接上一节继续,项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local).(开发小组内自测的)开发环境(dev).(提供给测试团队的)测试环境(test).预发布环境(pre ...

  9. Maven安装与环境配置(Windows)

    1.下载安装包 在Maven官网下载最新版的安装包:http://maven.apache.org/download.cgi 2.解压安装包 3.配置Maven环境变量 配置M2_HOME环境变量,指 ...

随机推荐

  1. Intellij IDEA 从入门到上瘾 图文教程

    1. IDEA VS Eclipse 核心术语比较 ​ 由下图可见:两者最大的转变就在于工作空间概念的转变,并且在IDEA当中,Project和 Module是作为两个不同的概念,对项目结构是具有重大 ...

  2. redis主从复制读写分离

    主从复制,读写分离 Master/Slave 是什么 master写入 slave读取 能干嘛 读写分离,更加安全,性能提升 怎么玩 一主二仆.薪火相传.反客为主 周明老师,能够把长篇大论总结的很精辟 ...

  3. localstorage 必知必会

    做项目中发现localstorage在不同的域名下是不能相互访问的,于是找到了以下这篇文章,对localStorage做一个深入的了解 HTML API localstorage在浏览器的API有两个 ...

  4. 利用iterm2,在命令行预览图片,服务器也是可以的

    1.首先你本地电脑上要安装iterm2软件,我们这里使用brew安装 这个是一定要装的,因为能在命令行渲染出图片文件全靠它,其实不是服务器渲染出来的,而是iterm2 官方网站:https://www ...

  5. etcd,flannel,docker relationship---and k8s

    journalctl -xe voidcn.com/article/p-qufvdmpq-bqn.html etcd more etcd.confETCD_NAME=default ETCD_DATA ...

  6. vue+elementui搭建后台管理界面(5递归生成侧栏路由)

    有一个菜单树,顶层菜单下面有多个子菜单,子菜单下还有子菜单... 这时候就要用递归处理 1 定义多级菜单 修改 src/router/index.js 的 / 路由 { path: '/', redi ...

  7. Oracle的存储的三大物理文件

      分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一. ...

  8. 方法重载与invokevirtual字节码指令的关系

    1.方法重载 创建MyTest5类 public class MyTest5 { public void test(Grandpa grandpa){ System.out.println(" ...

  9. 对pdf中的图片进行自动识别

    对pdf中的图片进行自动识别 商务合作,科技咨询,版权转让:向日葵,135—4855__4328,xiexiaokui#qq.com 原理:增强扫描 效果:自动识别所有图片中的文字,可以选择.复制,进 ...

  10. viewSwitcher 切换视图

    通过VIewSwitcher切换视图.这个用到了baseAdapter,还是不太懂,先记个笔记. <RelativeLayout xmlns:android="http://schem ...