项目从开发到部署会历经多个运行环境,如开发环境、测试环境和生产环境,不同环境中项目的配置文件通常也会不同,典型的如数据库连接配置。我们当然不希望每次部署打包前都去修改配置文件以适配环境,利用Maven的Profile和资源过滤,可以实现自动按环境设置调整配置文件。

新建一个Maven项目,在src/main/resources添加两个配置文件。

log4j.xml

  1. <log4j:configuration>
  2. <appender name="common" class="org.apache.log4j.DailyRollingFileAppender">
  3. <param name="File" value="${log4j.path}/debug.log" />
  4. <param name="Append" value="true" />
  5. <layout class="org.apache.log4j.PatternLayout">
  6. <param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n" />
  7. </layout>
  8. </appender>
  9. <root>
  10. <priority value ="info"/>
  11. <appender-ref ref="common"/>
  12. </root>
  13. </log4j:configuration>

datasource.xml

  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  2. destroy-method="close">
  3. <property name="driverClass" value="com.mysql.jdbc.Driver" />
  4. <property name="jdbcUrl" value="${datasource.jdbcUrl}" />
  5. <property name="user" value="${datasource.user}" />
  6. <property name="password" value="${datasource.password}" />
  7. <property name="minPoolSize" value="3" />
  8. <property name="maxPoolSize" value="100" />
  9. </bean>

其中,${log4j.path}、${datasource.jdbcUrl}、${datasource.user}、${datasource.password}是打包时需要按目标环境替换的内容。

接下来在pom.xml中配置替换规则:

  1. <profiles>
  2. <profile>
  3. <id>product</id>
  4. <activation>
  5. <activeByDefault>false</activeByDefault>
  6. </activation>
  7. <properties>
  8. <log4j.path>/opt/logs</log4j.path>
  9. <datasource.jdbcUrl>jdbc:mysql://localhost:3306/product?useUnicode=true&amp;amp;characterEncoding=UTF8</datasource.jdbcUrl>
  10. <datasource.user>someuser</datasource.user>
  11. <datasource.password>somepwd</datasource.password>
  12. </properties>
  13. </profile>
  14. <profile>
  15. <id>dev</id>
  16. <activation>
  17. <activeByDefault>true</activeByDefault>
  18. </activation>
  19. <properties>
  20. <log4j.path>D:/Logs</log4j.path>
  21. <datasource.jdbcUrl>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=UTF8</datasource.jdbcUrl>
  22. <datasource.user>root</datasource.user>
  23. <datasource.password>123456</datasource.password>
  24. </properties>
  25. </profile>
  26. </profiles>
  27. <build>
  28. <resources>
  29. <resource>
  30. <directory>src/main/resources</directory>
  31. <filtering>true</filtering>
  32. </resource>
  33. </resources>
  34. </build>

在profiles中定义了id分别为product和dev的两套profile,profile dev设置为默认激活,每个profile配置了一组properties,其中的4个元素名称分别对应log4j.xml和datasource.xml中的红字部分。

resources中定义了打包前扫描的文件夹,这里指定针对src/main/resources目录下的文件进行扫描并替换。

下面来做测试,首先执行

mvn clean package

这里没有指定激活的profile,将按默认激活规则即dev环境生成配置。查看生成的jar文件中的配置文件内容

log4j.xml

  1. <log4j:configuration>
  2. <appender name="common" class="org.apache.log4j.DailyRollingFileAppender">
  3. <param name="File" value="D:/Logs/debug.log" />
  4. <param name="Append" value="true" />
  5. <layout class="org.apache.log4j.PatternLayout">
  6. <param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n" />
  7. </layout>
  8. </appender>
  9. <root>
  10. <priority value ="info"/>
  11. <appender-ref ref="common"/>
  12. </root>
  13. </log4j:configuration>

datasource.xml

  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  2. destroy-method="close">
  3. <property name="driverClass" value="com.mysql.jdbc.Driver" />
  4. <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF8" />
  5. <property name="user" value="root" />
  6. <property name="password" value="123456" />
  7. <property name="minPoolSize" value="3" />
  8. <property name="maxPoolSize" value="100" />
  9. </bean>

改为按product环境打包,执行

mvn clean package -P product

查看生成的jar文件中的配置文件内容

log4j.xml

  1. <log4j:configuration>
  2. <appender name="common" class="org.apache.log4j.DailyRollingFileAppender">
  3. <param name="File" value="/opt/logs/debug.log" />
  4. <param name="Append" value="true" />
  5. <layout class="org.apache.log4j.PatternLayout">
  6. <param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n" />
  7. </layout>
  8. </appender>
  9. <root>
  10. <priority value ="info"/>
  11. <appender-ref ref="common"/>
  12. </root>
  13. </log4j:configuration>

datasource.xml

  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  2. destroy-method="close">
  3. <property name="driverClass" value="com.mysql.jdbc.Driver" />
  4. <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/product?useUnicode=true&amp;characterEncoding=UTF8" />
  5. <property name="user" value="someuser" />
  6. <property name="password" value="somepwd" />
  7. <property name="minPoolSize" value="3" />
  8. <property name="maxPoolSize" value="100" />
  9. </bean>

除了上面演示中的命令行指定激活和默认激活外,Maven还支持依据操作系统、文件是否存在、系统属性值等条件激活;匹配规则上可以指定多个目录及对目录指定是否开启资源过滤,甚至允许替换Web资源如图片、css文件等。合理运用可以灵活的应对各种差异环境要求。

Maven适配多种运行环境的打包方案的更多相关文章

  1. maven根据不同的运行环境,打包不同的配置文件

    使用maven管理项目中的依赖,非常的方便.同时利用maven内置的各种插件,在命令行模式下完成打包.部署等操作,可方便后期的持续集成使用. 但是每一个maven工程(比如web项目),开发人员在开发 ...

  2. maven根据不同的运行环境,打包不同的配置文件(转载)

    使用maven管理项目中的依赖,非常的方便.同时利用maven内置的各种插件,在命令行模式下完成打包.部署等操作,可方便后期的持续集成使用. 但是每一个maven工程(比如web项目),开发人员在开发 ...

  3. coding++:maven根据不同的运行环境,打包不同的配置文件

    1.使用maven管理项目中的依赖,非常的方便.同时利用maven内置的各种插件,在命令行模式下完成打包.部署等操作,可方便后期的持续集成使用. 2.但是每一个maven工程(比如web项目),开发人 ...

  4. 基于maven搭建hibernate运行环境

    准备案例需要的数据库表和测试数据 建表语句: create table DEPARTMENT ( DEPT_ID integer not null, DEPT_NAME ) not null, DEP ...

  5. Maven根据不同的环境打包不同的配置

    前言: 在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置等等. 那么就需要借助maven提 ...

  6. 十六:SpringBoot-自定义启动页,项目打包和指定运行环境

    SpringBoot-自定义启动页,项目打包和指定运行环境 1.自定义启动页 2.打包配置 2.1 打包pom配置 2.2 多环境配置 3.环境测试接口 4.打包执行 4.1 指定模块打包 4.2 运 ...

  7. SpringMVC_01:创建运行环境(Maven)

    Maven 环境下配置: 1.新建MavenProject,打包选线根据情况选择jar war和pom jar:打包为jar包,主要用于被其他项目引用 war:打包为war包,可直接运行于服务器 po ...

  8. eclipse下maven项目保持原有目录结构配置resin运行环境

    maven项目用起来很方便,但是它的目录结构和eclipse的目录结构是有区别的,故而在eclipse下的maven项目,直接运行调试是有一些问题的. 为了方便maven项目的运行调试,因而也就有了像 ...

  9. maven(六),外置maven运行环境配置

    外置maven eclipse内置的maven插件是固定版本,如果要用其他版本的maven,可以使用外置maven 下载地址: http://maven.apache.org/download.cgi ...

随机推荐

  1. 6.python内置函数

    1. abs() 获取绝对值 >>> abs(-10) 10 >>> a = -10 >>> a.__abs__() 10 2. all()   ...

  2. 商城项目整理(三)JDBC增删改查

    商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: create table TEST.GOODS_TABLE ( gid NUMBER not null ...

  3. MySQL操作时间的函数集

    求两个Timestamp之间的秒差值: select TIMESTAMPDIFF(SECOND,TIMESTAMP("2017-03-01 07:58:20"),timestamp ...

  4. [置顶] MVC输出缓存(OutputCache参数详解)

    1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...

  5. Linux第四节 组管理、用户管理、权限管理 / chmod /chown / umask / vim

    三期第三讲1.组管理/用户管理(重要文件系统会实时备份 file-) vim/etc/group: 组管理文件://组名:密码控位键:组id:成员 vim/etc/gshadow:组密码管理文件:// ...

  6. 初识JavaScript(一)

    初识JavaScript(一) 最近由于工作的需要的原因,我从一个写后台的现在让我转到写前端,再加上我的js部分特别的差,所以我现在开始学习js部分的知识. 我的第一篇博文就这样开始写了.俗话说,千里 ...

  7. java环境配置教程jde,jre

    控制面板--所有控制面板项--系统--高级系统设置--环境变量 JAVA_HOME = D:\java\jdk CLASSPATH = .;%JAVA_HOME%\lib;%JAVA_HOME%\li ...

  8. Git详解之七:自定义Git

    自定义 Git 到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它. 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定 ...

  9. git环境搭建以及第一个PHP程序

    使用mac下的sublime等编辑器帮助代码编写,然后到linux下运行网页代码.可以通过/vagrant共享目录完成,但是默认apache默认目录为/var/www/html,不想改变该目录,同时为 ...

  10. linux系统中,文件的三种特殊权限

    背景介绍 在linux系统中,我们熟知有rwx三种权限,对应所有者,同组用户,其他用户三种用户的权限,一共9个位来指定一个文件的权限情况,通过chmod xxx 来更改权限属性,其中xxx是已八进制表 ...