`

<转>使用maven的profile和filter插件管理配置项

 
阅读更多
原链接: http://blog.csdn.net/crazycoder2010/article/details/7264644

1.概述
    按照项目开发的流程,项目工程需要经历开发人员本地测试环境(dev),进入测试阶段后有测试环境(test),测试无误后需要将程序发布到生产环境(production)下,而对于这三个不同的项目环境,应用程序要在该环境下运行,必须有不同的配置项,如开发和生产环境使用不同的数据库地址,不同的线程池参数,因此需要对不同的项目环境进行不同的配置,为了简化和规范这些参数配置,需要对其进行统一规范管理。
2.配置项管理
2.1三个环境
按照项目所处阶段,分为
开发环境(dev)
    该环境下的配置项只影响开发人员本地代码配置,在项目初期代码本地编写调试时启用,如可以设置更低的Log级别帮助开发人员查看更为详细的log信息。
测试环境(test)
    该环境配置影响整个团队的测试环境。
正式生产环境(production)
    程序最终发布后所需要的参数配置,该环境下的配置项修改将直接影响最终用户的使用和应用程序的运行。
系统的配置项统一放在src/main/filters/目录下,三个环境的配置文件分别为
filter-dev.properties
filter-test.properties
filter-production.properties
这三个文件的用法见2.3.2节介绍
2.2识别配置项
    开发人员在做日常需求时,需要对程序的配置项进行识别,严格禁止将变量写死代码的情况出现。下列情况下需要考虑将变量作为系统的配置项
1)  一些系统级参数、
数据库连接参数,日志级别
2)  外部依赖webservice链接地址
对于不同的环境下所依赖的外部webservice也应该根据所处环境不同依赖不同的地址,如开发环境下依赖外部系统开发环境的地址。
3)  一些业务数据
系统可能要使用一些业务数据,如对某一个岗位信息特殊处理,该岗位信息在生产开发环境数据库中的id不一致,这种情况下也需要将其作为配置项处理。
2.3Maven配置
   项目工程统一使用maven的profile插件定义不同的项目构建环境(dev, test, production),通过filter插件为不同环境下的配置项注入对应的参数值来实现动态配置目标。
2.3.1定义profile
在POM.xml中配置3个profile,对应项目所处的3个不同的环境-dev, test, production, profile的id属性即为每个环境赋予一个唯一的标示,<properties>元素的内容则是以key-value的形式出现的键值对,如我们定义了一个变量<env>,其值在不同的环境下(不同id)被赋予了不同的值(dev, production, test),要激活不同的环境打包,我们可以在命令行通过mvn package –P${profileId}来让其运行,为了开发便利,默认激活的是dev开发环境,即开发人员不需要通过命令行手动输入-p参数也能运行dev环境的打包。
    <!-- 不同的打包环境 -->
    <profiles>
       <!-- 开发环境,默认激活 -->
       <profile>
           <id>dev</id>
           <properties>
              <env>dev</env>
           </properties>
           <activation>
              <activeByDefault>true</activeByDefault><!--默认启用的是dev环境配置-->
           </activation>
       </profile>
       <!-- 生产环境 -->
       <profile>
           <id>production</id>
           <properties>
              <env>production</env>
           </properties>
       </profile>
       <!-- 测试环境 -->
       <profile>
           <id>test</id>
           <properties>
              <env>test</env>
           </properties>
       </profile>
    </profiles>
2.3.2定义filter
可以使用Maven来对项目资源进行变量替换。在资源过滤被激活的时候,Maven会扫描
资源,寻找由${}包围的Maven属性的引用。一旦它找到这些引用,它就会使用合适的值去替换它们,当需要根据目标部署平台使用不同的配置来参数化一个构建的时候,这就非常有用。
通常一个在src/main/resources目录下的.properties文件或者XML文档会包含对外部资源的引用,如需要根据目标部署平台进行不同配置的数据库或网络地址。例如,一个从数据库读取数据的系统有一个XML文档,其包含了数据库的JDBC URL以及安全凭证。如果你在开发和产品环境使用不同的数据库,使用Maven Profile来为不同的部署环境定义不同的配置。
Filter的配置(在<build>元素下添加节点)如下:
首先引入配置文件的地址,2.1节已经介绍过统一放在src/main/filters目录下,注意这个filter的配置有个filter-${env}.properties,这个${env}变量就是在父pom.xml中定义的profile的id,当通过命令行mvn package –P${profileId}时,按${env}变量就会用实际传入的值替换,从而达到针对不同环境采用不同配置文件的目的。
    <filters>
        <filter>src/main/filters/filter-${env}.properties</filter>
    </filters>
    配置需要被替换的资源文件地址
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
如在src/main/resources/目录下的env.properties文件的内容如下
### database connection configuration
jdbc.driverClassName=${jdbc.driverClassName}
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
当执行完毕打包操作后,位于war包中的env.properties文件中所有被的${}都会被filters下文件中的值所替换


maven根据系统指定过滤文件

1.

	<profiles>
		<profile>
			<id>dev</id>
			<activation>
				<activeByDefault>false</activeByDefault>
				<os>
					<family>Windows</family>
				</os>
			</activation>
			<properties>
				<filter.path>src\main\filter\filter-dev.properties</filter.path>
			</properties>
		</profile>
		<profile>
			<id>production</id>
			<activation>
				<activeByDefault>false</activeByDefault>
				<os>
					<family>Linux</family>
				</os>
			</activation>
			<properties>
				<filter.path>${user.home}/antx.properties</filter.path>
			</properties>
		</profile>
	</profiles>

2.
	<build>
		<finalName>xxooname</finalName>
		<filters>
			<filter>${filter.path}</filter>
		</filters>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.1.1</version>
				<configuration>
					<failOnMissingWebXml>true</failOnMissingWebXml>
					<webResources>
						<resource>
							<directory>src/main/webapp</directory>
							<includes>
								<include>**/*.xml</include>
								<include>**/*.properties</include>
							</includes>
							<filtering>true</filtering>
						</resource>
					</webResources>
					<webappDirectory>target/exposed/xxoojjyy.war</webappDirectory>
				</configuration>
			</plugin>
		</plugins>
	</build>




二,配制:
在工程根目录下添加3个配制文件:
config-dev.properties  		-- 开发时用
config-test.properties  		-- 测试时用
config-product.properties 	-- 生产时用
工程根目录下的pom文件中添加下面的设置:
<build>
	<resources>
		<!-- 先指定 src/main/resources下所有文件及文件夹为资源文件 -->
		<resource>
			<directory>src/main/resources</directory>
			<includes>
				<include>**/*</include>
			</includes>
		</resource>
		<!-- 设置对auto-config.properties,jdbc.properties进行过虑,即这些文件中的${key}会被替换掉为真正的值 -->
		<resource>
			<directory>src/main/resources</directory>
			<includes>
				<include>auto-config.properties</include>
				<include>jdbc.properties</include>
			</includes>
			<filtering>true</filtering>
		</resource>
	</resources>
</build>
<profiles>
	<profile>
		<id>dev</id>

		<!-- 默认激活开发配制,使用config-dev.properties来替换设置过虑的资源文件中的${key} -->
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<build>
			<filters>
				<filter>config-dev.properties</filter>
			</filters>
		</build>
	</profile>
	<profile>
		<id>test</id>
		<build>
			<filters>
				<filter>config-dev.properties</filter>
			</filters>
		</build>
	</profile>
	<profile>
		<id>product</id>
		<build>
			<filters>
				<filter>config-product.properties</filter>
			</filters>
		</build>
	</profile>
</profiles>

分享到:
评论

相关推荐

    Maven build之pom.xml文件中的Build配置

    Maven通过一个叫做pom.xml的项目对象模型文件来配置项目构建的各个方面,其中&lt;build&gt;标签是Maven构建配置的核心部分,它定义了整个构建生命周期中需要执行的指令和任务。 Maven构建包括编译代码、执行测试、打包...

    maven profile多环境配置

    Maven Profile 多环境配置 Maven 是一个流行的项目管理工具,广泛应用于 JAVA 相关的项目中。为了实现多环境的构建可移植性,Maven 提供了 Profile 机制。通过不同的环境激活不同的 Profile,可以达到构建的可移植...

    使用maven Profile实现多环境构建

    每个Profile包含了一组插件、依赖和配置属性,可以用于定制项目的构建过程。Profile通常定义在`pom.xml`文件的`&lt;profiles&gt;`标签下。 为了实现多环境构建,我们可以在`pom.xml`中创建多个Profile,每个Profile对应一...

    Maven使用tomcat8-maven-plugin插件.docx

    &lt;groupId&gt;org.apache.tomcat.maven&lt;/groupId&gt; &lt;artifactId&gt;tomcat8-maven-plugin&lt;/artifactId&gt; &lt;version&gt;3.0-r1655215&lt;/version&gt; &lt;/plugin&gt; ``` 但是,如果我们直接添加上面的依赖项,Maven 将无法找到该插件,...

    sdoapi,sdoutl-1.0及maven中pom.xml的配置

    要在Maven项目中使用sdoapi和sdoutl-1.0,你需要在pom.xml文件中添加对应的依赖项。以下是一个示例配置: ```xml &lt;project&gt; ... &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;com.example&lt;/groupId&gt; &lt;artifactId&gt;...

    Maven和Tomcat插件

    &lt;groupId&gt;org.apache.tomcat.maven&lt;/groupId&gt; &lt;artifactId&gt;tomcat7-maven-plugin&lt;/artifactId&gt; &lt;version&gt;2.2&lt;/version&gt; &lt;configuration&gt; &lt;url&gt;http://localhost:8080/manager/text&lt;/url&gt; &lt;server&gt;TomcatServer...

    maven配置全局的jdk和配置局部的jdk

    2. **添加Build配置:**在`&lt;build&gt;`元素内添加`&lt;plugins&gt;`配置,并指定`maven-compiler-plugin`插件的具体版本号及配置信息,如下所示: ```xml &lt;build&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven....

    使用Maven Cargo 插件管理Tomcat6的部署

    在IT行业中,管理和部署Web应用程序是一项关键任务,而Maven Cargo插件则为开发者提供了一个强大的工具,使得在Tomcat6上部署应用变得更加便捷。Cargo是一个用于自动化服务器和容器管理的Java库,它允许开发者在多种...

    maven plugin打包下载

    -- 配置项 --&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; ``` 三、Maven Plugin的生命周期与阶段 Maven Plugin与Maven的生命周期紧密相关。生命周期包括几个阶段(phases),如`compile`、`test`、`...

    IntelliJ IDEA插件开发手册

    &lt;br&gt;&lt;br&gt; 开发准备 &lt;br&gt; IntelliJ IDEA的IoC介绍 &lt;br&gt; Extension Points &lt;br&gt; Plugin的结构介绍 &lt;br&gt; 使用Maven管理插件项目&lt;br&gt; IntelliJ IDEA TestCase&lt;br&gt; 开发场景&lt;br&gt; Virtual File、Document和Psi File &lt;br&gt; ...

    apache-maven-3.6.0解压免安装版

    记得修改 conf文件夹下的settings.xml的 &lt;localRepository&gt;D:\Program Files\apache-maven-3.6.0\maven-repository&lt;/localRepository&gt; 为自己的目录。 修改&lt;profile&gt; &lt;id&gt;jdk-1.8&lt;/id&gt; &lt;activation&gt; ...

    使用Maven管理进行多模块开发案例

    此pom文档经常还被用来进行一些依赖管理和插件管理,特别对于团队依赖包的管理特别重要,如下: Xml代码 &lt;dependencyManagement&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;javax.servlet&lt;/groupId&gt; ...

    【原创】maven jboss 插件配置

    【原创】maven jboss 插件配置 在Java企业级开发中,Maven和JBoss都是不可或缺的工具。Maven作为一个项目管理工具,能够帮助我们管理依赖、构建项目,而JBoss则是一个流行的Java应用服务器,用于部署和运行Java EE...

    maven 配置多仓库

    **正文** 在软件开发中,Maven作为Java项目管理和构建工具,其...通过正确配置`pom.xml`和`settings.xml`,以及使用Nexus这样的仓库管理工具,我们可以更好地管理Maven的依赖关系,为团队开发提供高效、可靠的环境。

    eclipse更新maven,jdk改变解决办法

    Maven的编译器插件默认使用javax.tools.JavaCompiler,而不是javac,所以需要手动配置插件选项forceJavacCompilerUse来强制使用javac。 此外,在pom.xml文件中没有指定jdk版本时,Maven会使用默认的source/target...

    1.2.maven多模块项目配置1

    在父模块的pom.xml文件中,我们需要配置模块列表,以便Maven可以正确地识别和管理这些子模块。下面是一个示例配置: ```xml &lt;groupId&gt;com.gsafety.jx&lt;/groupId&gt; &lt;artifactId&gt;jx-parent&lt;/artifactId&gt; &lt;packaging&gt;pom...

    使用maven Filtering实现多环境构建

    2. **配置资源插件**:在`&lt;build&gt;`部分,我们需要配置`maven-resources-plugin`以启用Filtering,并指定哪些文件需要过滤。 ```xml &lt;build&gt; &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;src/main/resources&lt;/directory&gt; ...

    maven插件的demo

    在Maven中,你可以通过`&lt;build&gt;&lt;plugins&gt;`标签下的`&lt;plugin&gt;`元素来引用并执行自定义插件,就像使用官方插件一样。 总结起来,Maven插件是Maven生态系统的核心组件,它们增强了Maven的功能,使得项目构建更加灵活和...

    超详细版图文Maven安装及配置

    &lt;name&gt;aliyun maven&lt;/name&gt; &lt;url&gt;http://maven.aliyun.com/nexus/content/groups/public/&lt;/url&gt; &lt;mirrorOf&gt;central&lt;/mirrorOf&gt; &lt;/mirror&gt; &lt;/mirrors&gt; ``` ##### 3.3 配置 JDK 版本 - **指定 JDK**:在 `...

    使用Maven搭建S2SH工程详解一:使用Maven创建struts2工程

    在`&lt;build&gt;`标签内添加Jetty插件配置: ```xml &lt;build&gt; &lt;defaultGoal&gt;install&lt;/defaultGoal&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt; &lt;version&gt;6.1.22&lt;/version&gt; &lt;artifactId&gt;maven-jetty...

Global site tag (gtag.js) - Google Analytics