原文:https://www.cnblogs.com/adeng/p/7059588.html

痛点:

  在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环境对项目的需求也不相同。

  在此之前,我们往往需要手动去修改相对应的配置文件然后打成war,才能部署到相应的环境上。

  但是这样很容易出现问题,因为很容易出现少改或者漏改,造成不必要的麻烦

幻想:

  要是有一种东西,能让我们打war的时候指定一个参数,就能自动把项目编译成对应环境的war,那该有多幸福啊!!!

结果:这样的东西还真有,那就是maven-profile

一、项目src/main/resources目录下建立相对应的目录

比如笔者的

我建立了三个目录,分别是:dev,test,pro分别表示开发环境,测试环境,生产环境。当然还可能有更多的环境。针对不同的环境,我们的配置文件可能会有不同的设置,比如我的需求是,三个环境的项目常量设置,数据库连接设置,log设置都可能不同。

那我就分别在三个文件中配置了不同设置,在外面也有三个相对应的文件,其实在开发的过程中外面的三个和dev里面的三个应该是相同的。

公共配置直接放到src/main/resources下

二、POM中的配置

 1  <profiles>
2 <!--本地开发环境-->
3 <profile>
4 <id>dev</id>
5 <properties>
6 <profiles.active>dev</profiles.active>
7 </properties>
8 <activation>
9 <activeByDefault>true</activeByDefault>
10 </activation>
11 </profile>
12 <!--测试环境-->
13 <profile>
14 <id>test</id>
15 <properties>
16 <profiles.active>test</profiles.active>
17 </properties>
18 </profile>
19 <!--生产环境-->
20 <profile>
21 <id>pro</id>
22 <properties>
23 <profiles.active>pro</profiles.active>
24 </properties>
25 </profile>
26 </profiles>
27
28 <!--build部分-->
29 <build>
30 <finalName>xxx</finalName>
31 <sourceDirectory>src/main/java</sourceDirectory>
32 <testSourceDirectory>src/test/java</testSourceDirectory>
33 <resources>
34 <resource>
<!--项目的默认资源目录,但是要排除不必要的文件,想要指定加入的再下面的resource指定-->
35                 <directory>${project.basedir}/src/main/resources</directory>
36 <excludes>
37 <exclude>dbpool/**</exclude>
38 <exclude>dev/*</exclude>
39 <exclude>mbg/*</exclude>
40 <exclude>pro/*</exclude>
41 <exclude>test/*</exclude>
42 <exclude>readme.txt</exclude>
43 </excludes>
44 </resource>
45 <resource>
46 <directory>${project.basedir}/src/main/resources/${profiles.active}</directory>
47 <filtering>true</filtering>
48 </resource>
49 <resource>
50 <directory>${project.basedir}/src/main/java</directory>
51 <includes>
52 <include>**/*.xml</include>
53 </includes>
54 <!--是否替换资源中的属性-->
55 <filtering>true</filtering>
56 </resource>
57 </resources>
58 ...
59 </build>

3~26:我们设置了三个profile分别对应目录中的三个开发环境。

8~10:开发环境是默认激活的(activeByDefault为true),这样如果在不指定profile时默认是开发环境

34~44:项目的默认资源目录,但是要排除不必要的文件,想要指定加入的再下面的resource指定

45~48:根据当前激活的profile来把指定的配置文件加载到classpath下!!桥黑板:filtering标签一定要有,他的作用就是把src/main/resources的文件替换为dev|test|pro下的文件。(47行)

三、项目编译生成

所有需要的配置就完成了,通过在运行maven命令时指定不同的profile即可构建不同环境需要的war包或发布到不同的环境了 。如:

clean package -Ppro即构建出生产环境需要的war包

由于默认的profile是dev,所以如果我们不指定profile,那么加载就是开发环境dev下的配置文件了。即我们在本地开发测试时,不用关心profile的问题。

双击666,可以愉快的开发了,环境切换,游刃有余。

更详细的介绍:http://maven.apache.org/pom.html#Profiles

新增笔记:

在idea中设置maven执行命令,若找不到,路径如下:File->Settings->Keymap->Main menu->Run->Edit Confiturations...也可以自己添加一个快捷键,其实就在我们运行tomcat的的那个下拉按钮下。eclipse的请自行百度 “eclipse执行maven命令”

选好项目目录,配置好Commang line。然后,我们打包的时候就可以点击上面的运行按钮了,愉快的不要不要的。

题外话:在使用maven-3.3.3的打包的时候,有时候会出现如下错误

ATAL ERROR in native method: JDWP on raw monitor enter, jvmtiError=JVMTI_ERROR_INVALID_ENVIRONMENT(116)
JDWP exit error JVMTI_ERROR_WRONG_PHASE(112): on getting class status [../../../src/share/back/util.c:1265]
JDWP exit error JVMTI_ERROR_INVALID_ENVIRONMENT(116): on raw monitor enter [../../../src/share/back/util.c:1034]
ERROR: JDWP unable to dispose of JVMTI environment: JVMTI_ERROR_INVALID_ENVIRONMENT(116)

其实不影响项目的打包,这是maven,或者是jvm的bug,比如

笔者在更换至maven-3.5.0之后,问题解决!

四:排除WEB-INF下面的文件

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<warSourceExcludes>WEB-INF/list.html</warSourceExcludes>
</configuration>
</plugin>

(转载)maven profile多环境自动切换配置的更多相关文章

  1. maven profile多环境自动切换配置,配置分离,排除文件

    痛点: 在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环境对项目的需求也不相同. 在此之前,我们往往需要手动去修改相对应的配置文件然后打成war,才能部 ...

  2. Maven 整合 spring profile实现多环境自动切换

    Maven 整合 spring profile实现多环境自动切换 时间:2014-03-19 15:32来源:Internet 作者:Internet 点击:525次 profile主要用在项目多环境 ...

  3. SpringBoot入门教程(三)通过properties实现多个数据库环境自动切换配置

    前面的文章已经介绍了CentOS部署SpringBoot项目从0到1的详细过程,包括Linux安装ftp.Tomcat以及Java jdk的全部过程.这篇文章主要介绍关于springboot如何通过多 ...

  4. 大数据之路week05--day02(Maven安装,环境变量的配置及基本使用)

    今天我们就来学习一下maven,怎么说呢,maven更像是一种管理的工具,实现的原理是使用插件. 举个例子,比如说,一个公司需要做一个项目,这个项目又分成了很多的模块,每个模块又分成了许多的业务等等, ...

  5. maven auto-config 多环境自动打包

    摘自:http://doc.okbase.net/bjhecwq/archive/118121.html maven有许多优秀的插件,最近在研究打包中替换多重环境的配置,同事介绍使用阿里的auto-c ...

  6. [maven] 项目不同环境自动打包

    应用背景 项目需要发布到本地环境,测试环境和生产环境甚至不同的生产环境上.这时候配置文件的一些参数需要被频繁的修改来修改去.为了解决这样的繁琐工作,就得使用maven profile特性. 步骤 1. ...

  7. maven profile多环境动态配置文件使用

    pom.xml <profiles> <!-- =====开发环境====== --> <profile> <id>dev</id> < ...

  8. maven profile 多环境

    <profiles> <profile> <!-- 本地开发环境 --> <id>dev</id> <properties> & ...

  9. Maven + Spring 进行多环境自动切换功能

    在pom.xml的<project></project>的最下放写入如下代码: <!-- profiles setting start [mvn install -P x ...

随机推荐

  1. android window类

    Android的Window类(一) Android的GUI层并不复杂.它的复杂度类似于WGUI这类基于布局和对话框的GUI,与MFC.QT等大型框架没有可比性,甚至飞漫魏永明的MiniGUI都比它复 ...

  2. ajax提交数据遇到400异常,原因及解决方案

    开发中遇到的问题, ajax的URL写的正确但是确无法正常跳转, 开发者模式下显示请求400异常. 前后台代码如下 ------------------------------------------ ...

  3. RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第三篇【实例】

    http://blog.csdn.net/deadgrape/article/details/50579565 在这一篇里我先让大家看一下RF+APPIUM这个框架的实际运行时什么样子的,给大家一个直 ...

  4. MySQL Query Cache 相关的问题

    最近经常有人问我 MySQL Query Cache 相关的问题,就整理一点 MySQL Query Cache 的内容,以供参考. 顾名思义,MySQL Query Cache 就是用来缓存和 Qu ...

  5. JS中的call()(转)

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方 ...

  6. Servlet过滤器和监听器知识总结

    Servlet过滤器是 Servlet 程序的一种特殊用法,主要用来完成一些通用的操作,如编码的过滤.判断用户的登录状态.过滤器使得Servlet开发者能够在客户端请求到达 Servlet资源之前被截 ...

  7. [Beginning SharePoint Designer 2010]Chapter 3 分析SharePoint页面

    本章概要: 1.SharePoint中主要页面类型 2.SharePoint如何组织页面 3.如何编辑母板页 4.SharePoint母板页中的主要内容占位符

  8. 石子合并(区间dp)

    石子合并(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述     有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程仅仅能每次将相邻 ...

  9. 求区间连续不超过K段的最大和--线段树+大量代码

    题目描述: 这是一道数据结构题. 我们拥有一个长度为n的数组a[i]. 我们有m次操作.操作有两种类型: 0 i val:表示我们要把a[i]修改为val; 1 l r k:表示我们要求出区间[l,r ...

  10. IPK僵尸网络 看看其传播手法

    转自:http://www.freebuf.com/vuls/154975.html 一.IPK僵尸网络概述 IPK僵尸家族是自2012年底就开始出现并长期持续活跃在境外的DDoS僵尸网络.2016年 ...