Maven适配多种运行环境的打包方案
项目从开发到部署会历经多个运行环境,如开发环境、测试环境和生产环境,不同环境中项目的配置文件通常也会不同,典型的如数据库连接配置。我们当然不希望每次部署打包前都去修改配置文件以适配环境,利用Maven的Profile和资源过滤,可以实现自动按环境设置调整配置文件。
新建一个Maven项目,在src/main/resources添加两个配置文件。
log4j.xml
- <log4j:configuration>
- <appender name="common" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="File" value="${log4j.path}/debug.log" />
- <param name="Append" value="true" />
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n" />
- </layout>
- </appender>
- <root>
- <priority value ="info"/>
- <appender-ref ref="common"/>
- </root>
- </log4j:configuration>
datasource.xml
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
- destroy-method="close">
- <property name="driverClass" value="com.mysql.jdbc.Driver" />
- <property name="jdbcUrl" value="${datasource.jdbcUrl}" />
- <property name="user" value="${datasource.user}" />
- <property name="password" value="${datasource.password}" />
- <property name="minPoolSize" value="3" />
- <property name="maxPoolSize" value="100" />
- </bean>
其中,${log4j.path}、${datasource.jdbcUrl}、${datasource.user}、${datasource.password}是打包时需要按目标环境替换的内容。
接下来在pom.xml中配置替换规则:
- <profiles>
- <profile>
- <id>product</id>
- <activation>
- <activeByDefault>false</activeByDefault>
- </activation>
- <properties>
- <log4j.path>/opt/logs</log4j.path>
- <datasource.jdbcUrl>jdbc:mysql://localhost:3306/product?useUnicode=true&amp;characterEncoding=UTF8</datasource.jdbcUrl>
- <datasource.user>someuser</datasource.user>
- <datasource.password>somepwd</datasource.password>
- </properties>
- </profile>
- <profile>
- <id>dev</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <log4j.path>D:/Logs</log4j.path>
- <datasource.jdbcUrl>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF8</datasource.jdbcUrl>
- <datasource.user>root</datasource.user>
- <datasource.password>123456</datasource.password>
- </properties>
- </profile>
- </profiles>
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </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
- <log4j:configuration>
- <appender name="common" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="File" value="D:/Logs/debug.log" />
- <param name="Append" value="true" />
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n" />
- </layout>
- </appender>
- <root>
- <priority value ="info"/>
- <appender-ref ref="common"/>
- </root>
- </log4j:configuration>
datasource.xml
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
- destroy-method="close">
- <property name="driverClass" value="com.mysql.jdbc.Driver" />
- <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8" />
- <property name="user" value="root" />
- <property name="password" value="123456" />
- <property name="minPoolSize" value="3" />
- <property name="maxPoolSize" value="100" />
- </bean>
改为按product环境打包,执行
mvn clean package -P product
查看生成的jar文件中的配置文件内容
log4j.xml
- <log4j:configuration>
- <appender name="common" class="org.apache.log4j.DailyRollingFileAppender">
- <param name="File" value="/opt/logs/debug.log" />
- <param name="Append" value="true" />
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n" />
- </layout>
- </appender>
- <root>
- <priority value ="info"/>
- <appender-ref ref="common"/>
- </root>
- </log4j:configuration>
datasource.xml
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
- destroy-method="close">
- <property name="driverClass" value="com.mysql.jdbc.Driver" />
- <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/product?useUnicode=true&characterEncoding=UTF8" />
- <property name="user" value="someuser" />
- <property name="password" value="somepwd" />
- <property name="minPoolSize" value="3" />
- <property name="maxPoolSize" value="100" />
- </bean>
除了上面演示中的命令行指定激活和默认激活外,Maven还支持依据操作系统、文件是否存在、系统属性值等条件激活;匹配规则上可以指定多个目录及对目录指定是否开启资源过滤,甚至允许替换Web资源如图片、css文件等。合理运用可以灵活的应对各种差异环境要求。
Maven适配多种运行环境的打包方案的更多相关文章
- maven根据不同的运行环境,打包不同的配置文件
使用maven管理项目中的依赖,非常的方便.同时利用maven内置的各种插件,在命令行模式下完成打包.部署等操作,可方便后期的持续集成使用. 但是每一个maven工程(比如web项目),开发人员在开发 ...
- maven根据不同的运行环境,打包不同的配置文件(转载)
使用maven管理项目中的依赖,非常的方便.同时利用maven内置的各种插件,在命令行模式下完成打包.部署等操作,可方便后期的持续集成使用. 但是每一个maven工程(比如web项目),开发人员在开发 ...
- coding++:maven根据不同的运行环境,打包不同的配置文件
1.使用maven管理项目中的依赖,非常的方便.同时利用maven内置的各种插件,在命令行模式下完成打包.部署等操作,可方便后期的持续集成使用. 2.但是每一个maven工程(比如web项目),开发人 ...
- 基于maven搭建hibernate运行环境
准备案例需要的数据库表和测试数据 建表语句: create table DEPARTMENT ( DEPT_ID integer not null, DEPT_NAME ) not null, DEP ...
- Maven根据不同的环境打包不同的配置
前言: 在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置等等. 那么就需要借助maven提 ...
- 十六:SpringBoot-自定义启动页,项目打包和指定运行环境
SpringBoot-自定义启动页,项目打包和指定运行环境 1.自定义启动页 2.打包配置 2.1 打包pom配置 2.2 多环境配置 3.环境测试接口 4.打包执行 4.1 指定模块打包 4.2 运 ...
- SpringMVC_01:创建运行环境(Maven)
Maven 环境下配置: 1.新建MavenProject,打包选线根据情况选择jar war和pom jar:打包为jar包,主要用于被其他项目引用 war:打包为war包,可直接运行于服务器 po ...
- eclipse下maven项目保持原有目录结构配置resin运行环境
maven项目用起来很方便,但是它的目录结构和eclipse的目录结构是有区别的,故而在eclipse下的maven项目,直接运行调试是有一些问题的. 为了方便maven项目的运行调试,因而也就有了像 ...
- maven(六),外置maven运行环境配置
外置maven eclipse内置的maven插件是固定版本,如果要用其他版本的maven,可以使用外置maven 下载地址: http://maven.apache.org/download.cgi ...
随机推荐
- centos6.5 yum update 报错Couldn't resolve host 'centos.ustc.edu.cn'
异常信息 [root@localhost ~]# yum -y update Loaded plugins: fastestmirror, refresh-packagekit, security S ...
- .NET 对 XML 进行创建,增加,删除,修改操作整理
前言: 最近做了一个项目,程序A在一个服务器程序B在另一台服务器,然而主程序A需要访问程序B的图片集文件夹下载到本服务器上,为了防止多次对Web Services进行调用,在主程序A中创建一个XML文 ...
- iOS10 相册权限
当我升级到Xcode8后,启动我的相机项目,直接crash,输出的日志如下: '2016-07-08 16:41:11.268943 project-name[362:56625] [MC] Syst ...
- 接口json数据与数据库数据循环比对校验
创建测试计划,加载数据库驱动: 线程组: csv配置元件: 注:Filename用的是相对路径,csv文件要与jmeter脚本文件在同一目录 JDBC连接配置: jdbc请求: 用户定义的变量: ht ...
- 【java】多线程同步生产者消费者问题
package 多线程; class Producer implements Runnable{ private Data data; public Producer(Data data){ this ...
- iOS 科学计数法保留N位有效数字
iOS开发 项目中用到了将一个很大的数值转换成科学计数法的需求,转换成科学计数法的方式在iOS中其实是很好做的,使用NSNumber 的 kCFNumberFormatterScientificSty ...
- JavaWeb框架_Struts2_(八)----->Struts2的国际化
这一篇博文拖了蛮久了,现在先把它完成,结束struts2这个版块,当然这只是最基础的部分,做项目还需要更深的理解.下一个web后端的版块准备做Spring框架的学习-嗯,加油! 1. Struts2的 ...
- iOS App稳定性指标及监测
一个App的稳定性,主要决定于整体的系统架构设计,同时也不可忽略编程的细节,正所谓"千里之堤,溃于蚁穴",一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系统的崩溃.尤其因为 ...
- 在Ubuntu14.04下安装 labelImg (标数据用)
安装 SIP 下载 SIP 并解压 : $ sudo python configure.py $ make $ sudo make install 安装 依赖库 $ sudo apt-get ins ...
- iView的使用【小白向】
首先看这篇:构建Vue本地开发环境(现阶段还不知道怎么用CDN的方式做...) 安装iView(WindowsPowershell或cmd下用cnpm) 编辑上一篇博客创建的Vue工程 先到main. ...