0 前言:
在不同的软件开发生命周期阶段、不同的最终客户(用户)环境、不同的运行平台都有可能需要不同配置或资源的情况。假如各个环境下的差别很小的话,我们可以在项目编译之后手工修改或者写个 shell script 自动修改,但如果需要修改的项目很多而且复杂的话,则应该使用 Apache Maven 的 Profile 和 Filtering 功能来解决。(当然前提是你的项目必须是用 Maven 构建)
1 Filtering: Maven Resource Plugin的一个功能, 会使用系统属性或者项目属性的值替换资源文件(*.properties *.xml)当中${...}符号的值
比如 numReduceTasks=${numReduceTasks} 最后在编译执行后变成 : numReduceTasks=3
pom.xml的配置写法:
<build> <filters> <filter>src/main/filters/xuele-${build.profile.id}.properties</filter> 指定属性文件,作为下面目录src/main/resources里文件中filtering的来源 </filters> <!--指定下面的目录为资源文件--> <resources> <!--设置自动替换--> <resource> <directory>src/main/resources</directory> ----> 要替换的文件夹 <includes> <include>**/*</include> -----> 替换的文件 </includes> <!--也可以用排除标签--> <!--<excludes></excludes>--> <!--开启过滤--> <filtering>true</filtering> </resource> </resources> ..... maven的一些信息 </build>
Profile功能和在pom.xml中的写法:
运行在pom.xml中定义多个profile段,然后在编译时选择其中一个用于覆盖项目文件原先的定义,如下: <profiles> <!--默认激活开发配置,使用index-dev.properties来替换实际的文件key--> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> ---> 项目编译时可以使用-P指定需要使用的profile的id, eg: mvn clean compile -Pdev 其中-P后是id的名称,或者用这个true这个属性设置默认值 </activation> <properties> <build.profile.id>dev</build.profile.id> </properties> </profile> <!-- 测试环境配置 --> <profile> <id>test</id> <properties> <build.profile.id>test</build.profile.id> </properties> </profile> <!-- 生产环境配置 --> <profile> <id>product</id> <properties> <build.profile.id>product</build.profile.id> </properties> </profile> </profiles>
操作后的结果:
E:\workspace\bigdata_project\src\main\filters\bigdata-dev.properties numReduceTasks=3 这是开发环境的配置文件,文件夹下是不同环境模板参数文件 里面还有 bigdata-pro.properties bigdata-test.properties等文件 E:\workspace\bigdata_project\src\main\resources\mr_hbase.properties numReduceTasks=${numReduceTasks} 这是模板文件 E:\workspace\bigdata_project\target\classes\mr_hbase.properties numReduceTasks=3 这是编译后的被模板文件替换后的目标文件
对应的 pom.xml中整体配置贴出如下:
<profiles> <!--默认激活开发配置,使用index-dev.properties来替换实际的文件key--> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <build.profile.id>dev</build.profile.id> </properties> </profile> <!-- 测试环境配置 --> <profile> <id>test</id> <properties> <build.profile.id>test</build.profile.id> </properties> </profile> <!-- 生产环境配置 --> <profile> <id>product</id> <properties> <build.profile.id>product</build.profile.id> </properties> </profile> </profiles> <build> <filters> <filter>src/main/filters/bigdata-${build.profile.id}.properties</filter> <!-- build.profile.id 在上面的 activeByDefault 使用dev值作为true默认值 --> </filters> <!--指定下面的目录为资源文件--> <resources> <!--设置自动替换--> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> <!--也可以用排除标签--> <!--<excludes></excludes>--> <!--开启过滤--> <filtering>true</filtering> </resource> </resources> <!--<resources>--> <!--<resource>--> <!--<directory>src/main/java</directory>--> <!--<excludes>--> <!--<exclude>**/*.java</exclude>--> <!--</excludes>--> <!--</resource>--> <!--<resource>--> <!--<directory>src/main/resources</directory>--> <!--</resource>--> <!--</resources>--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <encoding>UTF-8</encoding> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
相关推荐
maven多环境部署pom文件实例,简单实用。
在maven中实现多环境的构建可移植性需要使用profile,通过不同的环境激活不同的profile来达到构建的可移植性。
使用maven Filtering实现多环境构建,详细请参考:http://blog.csdn.net/u011781521/article/details/77899467
myeclipse中maven的一些常见功能总结;借助maven将本地项目部署到远程tomcat容器。
maven-filtering-1.1.jar!!!
使用maven Profile实现多环境构建,详细请参考 :http://blog.csdn.net/u011781521/article/details/77899467
maven依赖war构件 技术交流希望 这个工程简单的介绍一下怎么在开发环境
maven的安装部署,恰同学少年,风华正茂,挥斥方遒
JDK和maven的环境变量配置,有图有真相
maven 环境搭建总结 maven心得
jenkins实现maven项目自动部署到tomcat 实现自动部署,
实验手册 Maven环境部署1
将Eclise中的Maven工程自动部署到nexus服务器
使用Maven构建多模块项目
Eclipse新建和部署maven项目,每一步都有详细的截图
使用maven 部署环境 mvc模式 实现 登录 退出登录注册 过滤和监听的功能
主要介绍了使用maven profile指定配置文件打包适用多环境的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
NULL 博文链接:https://hejiawangjava.iteye.com/blog/2280427
maven环境部署以及eclipse中的应用。
NULL 博文链接:https://clojure.iteye.com/blog/2091511