maven利用Profile构建不同环境的部署包

原文地址:http://www.cnblogs.com/yjmyzz/p/3941043.html     本文是其中一部分

项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local)、(开发小组内自测的)开发环境(dev)、(提供给测试团队的)测试环境(test)、预发布环境(pre)、正式生产环境(prod),每种环境都有各自的配置参数,比如:数据库连接、远程调用的ws地址等等。如果每个环境build前手动修改这些参数,显然太不fashion.

maven早就考虑到了这些问题,看下面的pom片段:

<profiles>
        <profile>
            <!-- 本地环境 -->
            <id>local</id>
            <properties>                
                <db-url>jdbc:oracle:thin:@localhost:1521:XE</db-url>
                <db-username>***</db-username>
                <db-password>***</db-password>
            </properties>
        </profile>
        <profile>
            <!-- 开发环境 -->
            <id>dev</id>
            <properties>                
                <db-url>jdbc:oracle:thin:@172.21.129.51:1521:orcl</db-url>
                <db-username>***</db-username>
                <db-password>***</db-password>
            </properties>
            <!-- 默认激活本环境 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        ...
    </profiles>

 profiles节点中,定义了二种环境:local、dev(默认激活dev环境),可以在各自的环境中添加需要的property值,接下来修改build节点,参考下面的示例:

<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

 resource节点是关键,它表明了哪个目录下的配置文件(不管是xml配置文件,还是properties属性文件),需要根据profile环境来替换属性值。通常配置文件放在resources目录下,build时该目录下的文件都自动会copy到class目录下

其中spring-database.xml的内容为:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="${db-url}" />
        <property name="username" value="${db-username}" />
        <property name="password" value="${db-password}" />        
    </bean>
</beans>

各属性节点的值,用占位符"${属性名}"占位,maven在package时,会根据profile的环境自动替换这些占位符为实际属性值。

默认情况下: 

maven package

将采用默认激活的profile环境来打包,也可以手动指定环境,比如:

maven package -P dev

将自动打包成dev环境的部署包(注:参数P为大写)

 

这些各属性节点的值,还可以通过spring  Bean的配置,将值付到Java代码中,附件中给一个例子

猜你喜欢

转载自hejiawangjava.iteye.com/blog/2280427