maven+eslipse 多环境打包 profiles

来源:互联网 发布:日照淘宝代运营 编辑:程序博客网 时间:2024/05/01 16:13

我们经常需求对不同的环境打不同的包

比如,测试环境包,线上环境包

这意味着不同的环境,配置参数不同,同时我们还想对打包的包名进行个性化命名

所以我们就逐步讲解利用maven进行这种需求的打包

1.pom.xml的profile配置 :位置在project下面

  1. <project>
  2. <profiles>  
  3.         <profile>  
  4.             <id>test</id>  
  5.             <activation>  
  6.                 <activeByDefault>true</activeByDefault>  
  7.             </activation>  
  8.   
  9.             <properties>  
  10.                 <!-- mysql -->  
  11.                 <p.jdbc.url>127.0.0.1:3306</p.jdbc.url>  
  12.                 <p.jdbc.dbname>test_trunk</p.jdbc.dbname>  
  13.                 <p.jdbc.username>root</p.jdbc.username>  
  14.                 <p.jdbc.password>123456</p.jdbc.password>            
  15.                  <!--包名后缀-->  
  16.                 <p.package.suffix>test</p.package.suffix>  
  17.             </properties>  
  18.         </profile>  
  19.   
  20.         <profile>  
  21.             <id>production</id>  
  22.             <properties>  
  23.                 <!-- mysql -->  
  24.                 <p.jdbc.url>10.5.121.186:23325</p.jdbc.url>  
  25.                 <p.jdbc.dbname>db_prod</p.jdbc.dbname>  
  26.                 <p.jdbc.username>root</p.jdbc.username>  
  27.                 <p.jdbc.password>root</p.jdbc.password>  
  28.                 <!--包名后缀-->  
  29.                 <p.package.suffix>prod</p.package.suffix>  
  30.             </properties>  
  31.   
  32.         </profile>  
  33.   
  34. </profiles>  
  35. </project>

上面的配置是对不同环境数据库的配置,以及包名后缀进行了属性配置,并且对打包的输出包名的后缀进行了个性化的配置。

2. 对于profile标签,我们还需要有个.properties文件,持有这些变量,例如:config.properties

  1. jdbc.driverClassName=com.mysql.jdbc.Driver  
  2. jdbc.url=jdbc\:mysql\://${p.jdbc.url}/${p.jdbc.dbname}?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull&rewriteBatchedStatements\=true  
  3. jdbc.username=${p.jdbc.username}  
  4. jdbc.password=${p.jdbc.password} 


3. 对config.properties文件打包时替换成配置值 注意: 必须有filtering

红色部分加上,否则会出现配置文件没有打包进去

<build>

<resources>

<resource>
<directory>src/main/resources/conf</directory>
<includes>
<include>**/*</include>
</includes>

</resource>
<resource>
<directory>src/main/resources/conf</directory>
<includes>
<include>config.properties</include>
</includes>

<filtering>true</filtering>
</resource>
</resources>

</build>

4. 打包

mvn clean package -p production

结果:config.properties中${}值替换成 profile中的属性值

5. 可以将profile中的属性值放在一个文件中 过滤文件(separatefile)

  1. <project>
  2. <profiles>  
  3.     <profile>  
  4.         <id>kaifa</id>  
  5.         <activation>  
  6.             <activeByDefault>true</activeByDefault>  
  7.         </activation>  
  8.         <build>  
  9.             <filters>  
  10.                 <filter>${basedir}/filters/kaifa/param.txt</filter>  
  11.             </filters>  
  12.         </build>  
  13.     </profile>  
  14.       
  15.     <profile>  
  16.         <id>shengchan</id>  
  17.         <build>  
  18.             <filters>  
  19.                 <filter>${basedir}/filters/shengchan/param.txt</filter>  
  20.             </filters>  
  21.         </build>  
  22.     </profile>  
  23. </profiles> 
  24. <build>
  25.  <resources>

              <resource>

                 <filtering>true</filtering>

                  <directory>src/main/resources</directory>

                 <includes>

                     <include>db.proerties</include>

                 </includes>

              </resource>

     </resources>



  26. </build>
  27. </project> 


param.txt

name=world


还可以这样子哦:

  1. <project>
  2. <profiles>  
  3.     <profile>  
  4.         <id>kaifa</id>  
  5.         <activation>  
  6.             <activeByDefault>true</activeByDefault>  
  7.         </activation>  
  8.         <build>  
  9.             <properties> 
  10. <filters.env>kaifa</filters.env>
  11.  </properties>
  12.         </build>  
  13.     </profile>  
  14.       
  15.     <profile>  
  16.         <id>shengchan</id>  
  17.         <build>  
  18.           
    1.             <properties> 
    2. <filters.env>shengchan</filters.env>
    3.  </properties>
  19.         </build>  
  20.     </profile>  
  21. </profiles> 
  22. <build>
  23.  <resources>

              <resource>

                 <filtering>true</filtering>

                  <directory>src/main/resources</directory>

                 <includes>

                     <include>db.proerties</include>

                 </includes>

              </resource>

     </resources>

    1.  <filters>  
    2.                 <filter>${basedir}/filters/${filters.env}/param.txt</filter>  
    3.             </filters>  


  24. </build>
  25. </project> 

举例:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  4.     ......  
  5.   
  6.     <profiles>  
  7.         <profile>  
  8.             <id>dev</id>  
  9.             <properties>  
  10.                 <env>dev</env>  
  11.             </properties>  
  12.             <activation>  
  13.                 <activeByDefault>true</activeByDefault>  
  14.             </activation>  
  15.         </profile>  
  16.         <profile>  
  17.             <id>qa</id>  
  18.             <properties>  
  19.                 <env>qa</env>  
  20.             </properties>  
  21.         </profile>  
  22.         <profile>  
  23.             <id>pre</id>  
  24.             <properties>  
  25.                 <env>pre</env>  
  26.             </properties>  
  27.         </profile>  
  28.         <profile>  
  29.             <id>prod</id>  
  30.             <properties>  
  31.                 <env>prod</env>  
  32.             </properties>  
  33.         </profile>  
  34.     </profiles>  
  35.       
  36. ......   
  37.   
  38.     <build>  
  39.         <filters>  
  40.             <filter>config/${env}.properties</filter>  
  41.         </filters>  
  42.         <resources>  
  43.             <resource>  
  44.                 <directory>src/main/resources</directory>  
  45.                 <filtering>true</filtering>  
  46.             </resource>  
  47.         </resources>  
  48.   
  49.         ......  
  50.   
  51.     </build>  
  52. </project>  


0 0
原创粉丝点击