痛点:

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

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

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

幻想:

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

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

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

比如笔者的

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

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

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

二、POM中的配置

  <profiles>
<!--本地开发环境-->
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>pro</id>
<properties>
<profiles.active>pro</profiles.active>
</properties>
</profile>
</profiles> <!--build部分-->
<build>
<finalName>xxx</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<!--项目的默认资源目录,但是要排除不必要的文件,想要指定加入的再下面的resource指定-->
                 <directory>${project.basedir}/src/main/resources</directory>
<excludes>
<exclude>dbpool/**</exclude>
<exclude>dev/*</exclude>
<exclude>mbg/*</exclude>
<exclude>pro/*</exclude>
<exclude>test/*</exclude>
<exclude>readme.txt</exclude>
</excludes>
</resource>
<resource>
<directory>${project.basedir}/src/main/resources/${profiles.active}</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>${project.basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<!--是否替换资源中的属性-->
<filtering>true</filtering>
</resource>
</resources>
...
</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>

码字不易,尊重原创,转载请注明:http://www.cnblogs.com/adeng/p/7059588.html

maven profile多环境自动切换配置,配置分离,排除文件的更多相关文章

  1. (转载)maven profile多环境自动切换配置

    原文:https://www.cnblogs.com/adeng/p/7059588.html 痛点: 在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环 ...

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

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

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

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

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

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

  5. maven profile 多环境

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

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

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

  7. redis 集群热备自动切换sentinel配置实战

    ---恢复内容开始--- Redis SentinelSentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中一.Sentinel作用:1): ...

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

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

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

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

随机推荐

  1. 运行Tomcat 遇到的问题以及解决总结

    本文持续更新…… 情况一:在eclipse中启动tomcat提示 1. Server Tomcat v8.5 Server at localhost failed to start . 解决方案 方法 ...

  2. 小记 vue 打包(build)需要注意的一些事

    记录 vue 项目打包的一些事情 首先声明项目都是由 vue-cli 生成; vue 项目从 dev 切换到 prod 时有很多地方需要注意; 首先是大家最需要注意的 ajax 切换环节 以前一开始用 ...

  3. 转 PHP - AJAX 与 PHP

    1. AJAX 被用于创建交互性更强的应用程序. AJAX PHP 实例 下面的实例将演示当用户在输入框中键入字符时,网页如何与 Web 服务器进行通信: 实例 尝试在输入框中输入一个名字,如:Ann ...

  4. Jquery 全选、反选问题的记录

    <div id="list"> <ul id="choseList" > <li><input type=" ...

  5. LN : leetcode 690 Employee Importance

    lc 690 Employee Importance 690 Employee Importance You are given a data structure of employee inform ...

  6. leetcode650 2 Keys Keyboard

    思路: 把给定的数分解质因子之后,对于每一个质因子x,都需要x次操作(一次copy all操作和x-1次paste),所以答案就是对分解后的所有质因子求和. 实现: class Solution { ...

  7. Django基础之数据库增删改查

    Django中生成多个APP,每个APP下都有自己models模块,避免了多个APP之间数据的相互影响. 1.首先在APP的models下创建一个类 class UserInfo(models.Mod ...

  8. 第二节:SQLServer导出-重置sa密码-常用sql语句

    1.SQLServer导出: 点击要导出数据库----->右键(任务)----->生成脚本----->下一步----->下一步(高级)要编写脚本的数据类型---选择架构和数据 ...

  9. kvm--virsh命令行下管理虚拟机

    virsh 既有命令行模式,也有交互模式,在命令行直接输入 virsh 就进入交互模式, virsh 后面跟命令参数,则是命令行模式: (1)基础操作 --- 命令行下管理虚拟机 virsh list ...

  10. spark学习(3)---集合

    一.list https://blog.csdn.net/xianpanjia4616/article/details/84930779 华为文档:https://support.huawei.com ...