Maven 多环境打包

Method-1:使用Maven Profile

(1) 在项目 pom.xml 文件中,设置profiles

<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <db.user>profile-dev</db.user>
      <db.password>password-dev</db.password>
    </properties>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
  </profile>
  <profile>
    <id>qa</id>
    <properties>
      <db.user>profile-qa</db.user>
      <db.password>password-qa</db.password>
    </properties>
  </profile>
  <profile>
    <id>release</id>
    <properties>
      <db.user>profile-prod</db.user>
      <db.password>password-prod</db.password>
    </properties>
  </profile>
</profiles>

# activation 元素此处只配置了一个默认激活,还有其他可配置条件参数,如根据 JDK 版本、操作系统、某个文件是否存在等进行配置激活


(2) 配置 resources 过滤

<resources>
   <resource>
     <directory>src/main/resources</directory>
     <filtering>true</filtering>
   </resource>
</resources>

# resource 元素还有其他可配置内容,可自行查找


(3) 文件中使用占位符

如对 src/main/resources 目录下的 jdbc.properties 文件修改

db.user=${db.user}

db.password=${db.password}


(4) 激活 profile

除了 activation 元素配置的条件之外,可以在打包时使用 -P 参数激活指定的 profile

mvn clean package -P dev

# 不指定则根据 activation 元素的配置进行 profile 的激活

激活打包后,打开 jdbc.properties 文件,会看到占位符内容变为了 profiles 中的配置内容

db.user=profile-dev

db.password=password-dev


Method-2:Maven Profile 结合 Spring Profile

(1) 配置 Spring Pofile

在 Spring 的 XML 配置文件中 或 在 Java 代码中使用 Spring 的相关注释(Annotation)配置

    <beans profile="xmj_old">  
        <bean id="dataSource"   
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
            <property name="url"   
                value="jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf8" />  
            <property name="password" value="123456" />  
            <property name="username" value="abc" />  
        </bean>  
        <bean id="messageSource"   
            class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
            <property name="basenames">  
                <list>  
                    <value>classpath:messages_zh_CN</value>  
                    <value>classpath:messages/messages_en_US-xmj_old</value>  
                </list>  
            </property>  
        </bean>  
    </beans>  
    <beans profile="xmj_new">  
        <bean id="dataSource"   
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
            <property name="url"   
                value="jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf8" />  
            <property name="password" value="123456" />  
            <property name="username" value="abc" />  
        </bean>  
        <bean id="messageSource"   
            class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
            <property name="basenames">  
                <list>  
                    <value>classpath:messages_zh_CN</value>  
                    <value>classpath:messages/messages_en_US-xmj_new</value>  
                </list>  
            </property>  
        </bean>  
    </beans>


(2) web.xml 中激活 Spring Profile

<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>dev</param-value>
</context-param>


(3) 整合 Maven Profile

(3.1) 配置 Maven Profile

<profiles>

...

</profiles>


(3.2) 修改 web.xml

在 web.xml 中,修改 spring.profiles.active 参数值为占位符格式 ${profiles.activation} 获取 Maven Profiles 的配置参数值。

<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>${profiles.activation}</param-value>
</context-param>

这样,在使用 Maven 打包时,指定 profiles.activation 的参数值,就可以同步应用 Spring Profiles 的对应配置了。