ITPub博客

首页 > 应用开发 > Java > Maven学习--profile

Maven学习--profile

Java 作者:壹頁書 时间:2016-06-20 10:29:11 0 删除 编辑
转载自:
https://www.zybuluo.com/haokuixi/note/25985

本文介绍 Maven 打包的实践,以 build war 为例。 
每个项目都会有多套运行环境,最基本的就是Dev、QA、Prod,不同的环境对应的配置也不尽相同,比如说数据库连接,文件路径,WebServices address 等等。 
不同环境下需要构建不同的包,那么我们可以通过以下两种方式来解决:

一、定义多个 pom,使用 -f <pom_file> 指定

e.g.
pom.xml (default) 
pom_qa.xml 
pom_prod.xml
Build war for qa:

mvn clean package -f pom_qa.xml
Build war for product:

mvn clean package -f pom_prod.xml
多个 pom.xml 之间重复配置很多,不容易维护,极不推荐这种方式。

二、结合 maven-war-plugin 和 profile 进行配置

需求假设:
1) 不同环境的数据库连接地址以及 DataSource 类型不一样 
开发环境通过普通的DataSource连接数据库:
  1. <bean name="SQLServerDriverDS" destroy-method="close">  
  2.     <property name="driverClassName" value="${driver_class}" />  
  3.     <property name="username" value="${username}" />  
  4.     <property name="password" value="${password}" />  
  5.     <property name="url" value="${url}" />  
  6.     <property name="maxIdle" value="${maxPoolSize}" />  
  7.     <property name="maxActive" value="${minPoolSize}" />  
  8. </bean>  

测试和产品环境都是通过 JNDI 方式连接数据库:
  1. <bean id="SQLServerDriverDS">  
  2.     <property name="jndiName" value="jdbc/AlteraDS" />  
  3. </bean>  

2) 不同环境的 log4j.properties 不同,文件上传下载路径也不一样。 
3) QA 的 war 包名称要带上日期,e.g. xxx-20120830.war

为了实现上述需求,组织工程目录结构如下:
project/
`-- src
    |-- main
    |   |-- java
    |   |-- env
    |   |   |-- dev
    |   |   |   |-- log4j.properties
    |   |   |   |-- spring-dataSource.xml
    |   |   |   `-- variable.propertes
    |   |   |-- prod
    |   |   |   |-- log4j.properties
    |   |   |   |-- spring-dataSource.xml
    |   |   |   `-- variable.propertes
    |   |   `-- qa
    |   |       |-- log4j.properties
    |   |       |-- spring-dataSource.xml
    |   |       `-- variable.propertes
    |   |-- resources
    |   `-- webapp
    `-- test
pom.xml里定义三个环境的profile:

  1. <profile>  
  2.     <id>dev</id>  
  3.     <activation>  
  4.         <activeByDefault>true</activeByDefault>  
  5.     </activation>  
  6.     <properties>  
  7.         <runtime.env>src/main/env/dev</runtime.env>  
  8.         <final.name>webapp</final.name>  
  9.     </properties>  
  10.     <dependencies>  
  11.         <dependency>  
  12.             <groupId>com.eightqiu</groupId>  
  13.             <artifactId>CodeCmns</artifactId>  
  14.             <version>0.0.1-SNAPSHOT</version>  
  15.         </dependency>  
  16.     </dependencies>  
  17. </profile>  
  18. <profile>  
  19.     <id>qa</id>  
  20.     <properties>  
  21.         <runtime.env>src/main/env/qa</runtime.env>  
  22.         <final.name>webapp_${buildNumber}</final.name>  
  23.     </properties>  
  24.     <build>  
  25.         <plugins>  
  26.             <plugin>  
  27.                 <groupId>org.codehaus.mojo</groupId>  
  28.                 <artifactId>buildnumber-maven-plugin</artifactId>  
  29.                 <version>1.1</version>  
  30.                 <executions>  
  31.                     <execution>  
  32.                         <phase>validate</phase>  
  33.                         <goals>  
  34.                             <goal>create</goal>  
  35.                         </goals>  
  36.                     </execution>  
  37.                 </executions>  
  38.                 <configuration>  
  39.                     <format>{0,date,yyyyMMdd}</format>  
  40.                     <items>  
  41.                         <item>timestamp</item>  
  42.                     </items>  
  43.                 </configuration>  
  44.             </plugin>  
  45.         </plugins>  
  46.     </build>  
  47.     <reporting>  
  48.         <plugins>  
  49.             <plugin>  
  50.                 <groupId>org.apache.maven.plugins</groupId>  
  51.                 <artifactId>maven-javadoc-plugin</artifactId>  
  52.                 <version>2.8.1</version>  
  53.             </plugin>  
  54.         </plugins>  
  55.     </reporting>  
  56.     <dependencies>  
  57.         <dependency>  
  58.             <groupId>com.eightqiu</groupId>  
  59.             <artifactId>CodeCmns</artifactId>  
  60.             <version>0.0.1-SNAPSHOT</version>  
  61.             <scope>provided</scope>  
  62.         </dependency>  
  63.     </dependencies>  
  64. </profile>  
  65. <profile>  
  66.     <id>prod</id>  
  67.     <properties>  
  68.         <runtime.env>src/main/env/prod</runtime.env>  
  69.         <final.name>webapp</final.name>  
  70.     </properties>  
  71.     <dependencies>  
  72.         <dependency>  
  73.             <groupId>com.eightqiu</groupId>  
  74.             <artifactId>CodeCmns</artifactId>  
  75.             <version>0.0.1-SNAPSHOT</version>  
  76.             <scope>provided</scope>  
  77.         </dependency>  
  78.     </dependencies>  
  79. </profile>  

Maven-war-plugin里配置additional resource folder

  1. <plugin>  
  2.     <groupId>org.apache.maven.plugins</groupId>  
  3.     <artifactId>maven-war-plugin</artifactId>  
  4.     <version>2.1.1</version>  
  5.     <configuration>  
  6.         <overlays>  
  7.             <overlay>  
  8.                 <groupId>TransactionResource</groupId>  
  9.                 <artifactId>TransactionResource</artifactId>  
  10.                 <excludes>  
  11.                     <exclude>WEB-INF/web.xml</exclude>  
  12.                 </excludes>  
  13.             </overlay>  
  14.         </overlays>  
  15.         <webResources>  
  16.             <resource>  
  17.                 <directory>${runtime.env}</directory>  
  18.                 <targetPath>WEB-INF/classes</targetPath>  
  19.             </resource>  
  20.         </webResources>  
  21.     </configuration>  
  22. </plugin>  
  23. <finalName>${final.name}</finalName>  

${runtime.env} & ${final.name}就是profile里定义的两个properties。 
打包的时候使用-P <profile>指定需要打哪个环境的包。 
e.g.

mvn clean package -Pdev
mvn clean package -Pqa

附上完整的pom.xml
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <packaging>war</packaging>  
  5.     <version>0.0.1-SNAPSHOT</version>  
  6.     <name>demo Maven Webapp</name>  
  7.     <groupId>webapp</groupId>  
  8.     <artifactId>webapp</artifactId>  
  9.     <scm>  
  10.         <connection>scm:svn:http://127.0.0.1/dummy</connection>  
  11.         <developerConnection>scm:svn:https://127.0.0.1/dummy</developerConnection>  
  12.         <tag>HEAD</tag>  
  13.         <url>http://127.0.0.1/dummy</url>  
  14.     </scm>  
  15.     <properties>  
  16.         <spring-version>3.1.0.RELEASE</spring-version>  
  17.     </properties>  
  18.     <build>  
  19.         <finalName>${final.name}</finalName>  
  20.         <plugins>  
  21.             <plugin>  
  22.                 <groupId>org.mortbay.jetty</groupId>  
  23.                 <artifactId>maven-jetty-plugin</artifactId>  
  24.                 <version>6.1.10</version>  
  25.                 <configuration>  
  26.                     <connectors>  
  27.                         <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">  
  28.                             <port>9090</port>  
  29.                             <maxIdleTime>60000</maxIdleTime>  
  30.                         </connector>  
  31.                     </connectors>  
  32.                 </configuration>  
  33.             </plugin>  
  34.             <plugin>  
  35.                 <groupId>org.apache.maven.plugins</groupId>  
  36.                 <artifactId>maven-war-plugin</artifactId>  
  37.                 <version>2.1.1</version>  
  38.                 <configuration>  
  39.                     <overlays>  
  40.                         <overlay>  
  41.                             <groupId>TransactionResource</groupId>  
  42.                             <artifactId>TransactionResource</artifactId>  
  43.                             <excludes>  
  44.                                 <exclude>WEB-INF/web.xml</exclude>  
  45.                             </excludes>  
  46.                         </overlay>  
  47.                     </overlays>  
  48.                     <webResources>  
  49.                         <resource>  
  50.                             <directory>${runtime.env}</directory>  
  51.                             <targetPath>WEB-INF/classes</targetPath>  
  52.                         </resource>  
  53.                     </webResources>  
  54.                 </configuration>  
  55.             </plugin>  
  56.             <plugin>  
  57.                 <groupId>org.apache.maven.plugins</groupId>  
  58.                 <artifactId>maven-compiler-plugin</artifactId>  
  59.                 <version>2.3.2</version>  
  60.                 <configuration>  
  61.                     <source>1.6</source>  
  62.                     <target>1.6</target>  
  63.                 </configuration>  
  64.             </plugin>  
  65.         </plugins>  
  66.     </build>  
  67.     <dependencies>  
  68.         <dependency>  
  69.             <groupId>org.springframework</groupId>  
  70.             <artifactId>spring-webmvc</artifactId>  
  71.             <version>${spring-version}</version>  
  72.             <exclusions>  
  73.                 <exclusion>  
  74.                     <artifactId>spring-core</artifactId>  
  75.                     <groupId>org.springframework</groupId>  
  76.                 </exclusion>  
  77.             </exclusions>  
  78.         </dependency>  
  79.         <dependency>  
  80.             <groupId>opensymphony</groupId>  
  81.             <artifactId>sitemesh</artifactId>  
  82.             <version>2.4.2</version>  
  83.         </dependency>  
  84.         <dependency>  
  85.             <groupId>jstl</groupId>  
  86.             <artifactId>jstl</artifactId>  
  87.             <version>1.2</version>  
  88.         </dependency>  
  89.         <dependency>  
  90.             <groupId>javax.servlet</groupId>  
  91.             <artifactId>servlet-api</artifactId>  
  92.             <version>2.5</version>  
  93.             <scope>provided</scope>  
  94.         </dependency>  
  95.         <dependency>  
  96.             <groupId>javax.servlet.jsp</groupId>  
  97.             <artifactId>jsp-api</artifactId>  
  98.             <version>2.2</version>  
  99.             <scope>provided</scope>  
  100.         </dependency>  
  101.         <dependency>  
  102.             <groupId>TransactionResource</groupId>  
  103.             <artifactId>TransactionResource</artifactId>  
  104.             <version>0.0.1-SNAPSHOT</version>  
  105.             <type>war</type>  
  106.         </dependency>  
  107.         <dependency>  
  108.             <groupId>org.hibernate</groupId>  
  109.             <artifactId>hibernate-validator</artifactId>  
  110.             <version>4.2.0.Final</version>  
  111.         </dependency>  
  112.         <dependency>  
  113.             <groupId>org.codehaus.jackson</groupId>  
  114.             <artifactId>jackson-mapper-asl</artifactId>  
  115.             <version>1.9.4</version>  
  116.         </dependency>  
  117.         <dependency>  
  118.             <groupId>log4j</groupId>  
  119.             <artifactId>log4j</artifactId>  
  120.             <version>1.2.16</version>  
  121.         </dependency>  
  122.         <dependency>  
  123.             <groupId>commons-logging</groupId>  
  124.             <artifactId>commons-logging</artifactId>  
  125.             <version>1.1.1</version>  
  126.         </dependency>  
  127.         <dependency>  
  128.             <groupId>net.sf.dozer</groupId>  
  129.             <artifactId>dozer</artifactId>  
  130.             <version>5.3.2</version>  
  131.         </dependency>  
  132.         <dependency>  
  133.             <groupId>org.springframework</groupId>  
  134.             <artifactId>spring-jdbc</artifactId>  
  135.             <version>${spring-version}</version>  
  136.         </dependency>  
  137.         <dependency>  
  138.             <groupId>commons-dbcp</groupId>  
  139.             <artifactId>commons-dbcp</artifactId>  
  140.             <version>1.4</version>  
  141.         </dependency>  
  142.         <dependency>  
  143.             <groupId>com.microsoft.sqlserver</groupId>  
  144.             <artifactId>sqljdbc</artifactId>  
  145.             <version>4</version>  
  146.         </dependency>  
  147.         <dependency>  
  148.             <groupId>org.springframework</groupId>  
  149.             <artifactId>spring-test</artifactId>  
  150.             <version>${spring-version}</version>  
  151.         </dependency>  
  152.         <dependency>  
  153.             <groupId>junit</groupId>  
  154.             <artifactId>junit</artifactId>  
  155.             <version>4.8.2</version>  
  156.         </dependency>  
  157.         <dependency>  
  158.             <groupId>org.slf4j</groupId>  
  159.             <artifactId>slf4j-api</artifactId>  
  160.             <version>1.6.4</version>  
  161.         </dependency>  
  162.         <dependency>  
  163.             <groupId>org.slf4j</groupId>  
  164.             <artifactId>slf4j-log4j12</artifactId>  
  165.             <version>1.6.4</version>  
  166.         </dependency>  
  167.         <dependency>  
  168.             <groupId>javax.mail</groupId>  
  169.             <artifactId>mail</artifactId>  
  170.             <version>1.4</version>  
  171.         </dependency>  
  172.         <dependency>  
  173.             <groupId>commons-fileupload</groupId>  
  174.             <artifactId>commons-fileupload</artifactId>  
  175.             <version>1.2.1</version>  
  176.         </dependency>  
  177.         <dependency>  
  178.             <groupId>commons-io</groupId>  
  179.             <artifactId>commons-io</artifactId>  
  180.             <version>1.4</version>  
  181.         </dependency>  
  182.         <dependency>  
  183.             <groupId>commons-beanutils</groupId>  
  184.             <artifactId>commons-beanutils</artifactId>  
  185.             <version>1.8.3</version>  
  186.         </dependency>  
  187.         <dependency>  
  188.             <groupId>commons-collections</groupId>  
  189.             <artifactId>commons-collections</artifactId>  
  190.             <version>3.2.1</version>  
  191.         </dependency>  
  192.         <dependency>  
  193.             <groupId>commons-codec</groupId>  
  194.             <artifactId>commons-codec</artifactId>  
  195.             <version>1.5</version>  
  196.         </dependency>  
  197.     </dependencies>  
  198.     <profiles>  
  199.         <profile>  
  200.             <id>dev</id>  
  201.             <activation>  
  202.                 <activeByDefault>true</activeByDefault>  
  203.             </activation>  
  204.             <properties>  
  205.                 <runtime.env>src/main/env/dev</runtime.env>  
  206.                 <final.name>webapp</final.name>  
  207.             </properties>  
  208.             <dependencies>  
  209.                 <dependency>  
  210.                     <groupId>com.eightqiu</groupId>  
  211.                     <artifactId>CodeCmns</artifactId>  
  212.                     <version>0.0.1-SNAPSHOT</version>  
  213.                 </dependency>  
  214.             </dependencies>  
  215.         </profile>  
  216.         <profile>  
  217.             <id>qa</id>  
  218.             <properties>  
  219.                 <runtime.env>src/main/env/qa</runtime.env>  
  220.                 <final.name>webapp_${buildNumber}</final.name>  
  221.             </properties>  
  222.             <build>  
  223.                 <plugins>  
  224.                     <plugin>  
  225.                         <groupId>org.codehaus.mojo</groupId>  
  226.                         <artifactId>buildnumber-maven-plugin</artifactId>  
  227.                         <version>1.1</version>  
  228.                         <executions>  
  229.                             <execution>  
  230.                                 <phase>validate</phase>  
  231.                                 <goals>  
  232.                                     <goal>create</goal>  
  233.                                 </goals>  
  234.                             </execution>  
  235.                         </executions>  
  236.                         <configuration>  
  237.                             <format>{0,date,yyyyMMdd}</format>  
  238.                             <items>  
  239.                                 <item>timestamp</item>  
  240.                             </items>  
  241.                         </configuration>  
  242.                     </plugin>  
  243.                 </plugins>  
  244.             </build>  
  245.             <reporting>  
  246.                 <plugins>  
  247.                     <plugin>  
  248.                         <groupId>org.apache.maven.plugins</groupId>  
  249.                         <artifactId>maven-javadoc-plugin</artifactId>  
  250.                         <version>2.8.1</version>  
  251.                     </plugin>  
  252.                 </plugins>  
  253.             </reporting>  
  254.             <dependencies>  
  255.                 <dependency>  
  256.                     <groupId>com.eightqiu</groupId>  
  257.                     <artifactId>CodeCmns</artifactId>  
  258.                     <version>0.0.1-SNAPSHOT</version>  
  259.                     <scope>provided</scope>  
  260.                 </dependency>  
  261.             </dependencies>  
  262.         </profile>  
  263.         <profile>  
  264.             <id>prod</id>  
  265.             <properties>  
  266.                 <runtime.env>src/main/env/prod</runtime.env>  
  267.                 <final.name>webapp</final.name>  
  268.             </properties>  
  269.             <dependencies>  
  270.                 <dependency>  
  271.                     <groupId>com.eightqiu</groupId>  
  272.                     <artifactId>CodeCmns</artifactId>  
  273.                     <version>0.0.1-SNAPSHOT</version>  
  274.                     <scope>provided</scope>  
  275.                 </dependency>  
  276.             </dependencies>  
  277.         </profile>  
  278.     </profiles>  
  279. </project>  

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2120459/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: IntelliJ-IDEA快捷键
下一篇: Git学习
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339924