Maven 如何为不同的环境打包 —— 开发、测试和产品环境
2014-08-08 20:33
731 查看
本文是我收藏整理的版本,欢迎大家查看更美观的:
https://www.zybuluo.com/haokuixi/note/25985
本文介绍Maven打包的实践,以build war为例。
每个项目都会有多套运行环境,最基本的就是Dev、QA、Prod,不同的环境对应的配置也不尽相同,比如说数据库连接,文件路径,WebServices address 等等。
不同环境下需要构建不同的包,那么我们可以通过以下两种方式来解决:
e.g.
pom.xml (default).
pom_qa.xml
pom_prod.xml
Build war for qa:
Build war for product:
多个 pom.xml 之间重复配置很多,不容易维护,极不推荐这种方式。
需求假设:
1. 不同环境的数据库连接地址以及DataSource类型不一样
开发环境通过普通的DataSource连接数据库:
测试和产品环境都是通过 JNDI 方式连接数据库:
不同环境的log4j.properties不同,文件上传下载路径也不一样。
QA的war包名称要带上日期,e.g. xxx-20120830.war
为了实现上述需求,组织工程目录结构如下:
pom.xml里定义三个环境的profile:
Maven-war-plugin里配置additional resource folder
打包的时候使用
e.g.
附上完整的pom.xml
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和Maven profile进行配置
需求假设: 1. 不同环境的数据库连接地址以及DataSource类型不一样
开发环境通过普通的DataSource连接数据库:
<bean name="SQLServerDriverDS" destroy-method="close">
<property name="driverClassName" value="${driver_class}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="url" value="${url}" />
<property name="maxIdle" value="${maxPoolSize}" />
<property name="maxActive" value="${minPoolSize}" />
</bean>
测试和产品环境都是通过 JNDI 方式连接数据库:
<bean id="SQLServerDriverDS">
<property name="jndiName" value="jdbc/AlteraDS" />
</bean>
不同环境的log4j.properties不同,文件上传下载路径也不一样。
QA的war包名称要带上日期,e.g. xxx-20120830.war
为了实现上述需求,组织工程目录结构如下:
project/ `-- src |-- main | |-- environment | | |-- 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:
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<runtime.env>src/main/env/dev</runtime.env>
<final.name>webapp</final.name>
</properties>
<dependencies>
<dependency>
<groupId>com.eightqiu</groupId>
<artifactId>CodeCmns</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</profile>
<profile>
<id>qa</id>
<properties>
<runtime.env>src/main/env/qa</runtime.env>
<final.name>webapp_${buildNumber}</final.name>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<format>{0,date,yyyyMMdd}</format>
<items>
<item>timestamp</item>
</items>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.8.1</version>
</plugin>
</plugins>
</reporting>
<dependencies>
<dependency>
<groupId>com.eightqiu</groupId>
<artifactId>CodeCmns</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
<profile>
<id>prod</id>
<properties>
<runtime.env>src/main/env/prod</runtime.env>
<final.name>webapp</final.name>
</properties>
<dependencies>
<dependency>
<groupId>com.eightqiu</groupId>
<artifactId>CodeCmns</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
Maven-war-plugin里配置additional resource folder
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<overlays>
<overlay>
<groupId>TransactionResource</groupId>
<artifactId>TransactionResource</artifactId>
<excludes>
<exclude>WEB-INF/web.xml</exclude>
</excludes>
</overlay>
</overlays>
<webResources>
<resource>
<directory>${runtime.env}</directory>
<targetPath>WEB-INF/classes</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
<finalName>${final.name}</finalName>
${runtime.env}&
${final.name}就是profile里定义的两个properties。
打包的时候使用
-P <profile>指定需要打哪个环境的包。
e.g.
mvn clean package -Pdev mvn clean package -Pqa
附上完整的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">[/code]<modelVersion>4.0.0</modelVersion><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>demo Maven Webapp</name><groupId>webapp</groupId><artifactId>webapp</artifactId><scm><connection>scm:svn:http://127.0.0.1/dummy</connection><developerConnection>scm:svn:https://127.0.0.1/dummy</developerConnection><tag>HEAD</tag><url>http://127.0.0.1/dummy</url></scm><properties><spring-version>3.1.0.RELEASE</spring-version></properties><build><finalName>${final.name}</finalName><plugins><plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.10</version><configuration><connectors><connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"><port>9090</port><maxIdleTime>60000</maxIdleTime></connector></connectors></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.1.1</version><configuration><overlays><overlay><groupId>TransactionResource</groupId><artifactId>TransactionResource</artifactId><excludes><exclude>WEB-INF/web.xml</exclude></excludes></overlay></overlays><webResources><resource><directory>${runtime.env}</directory><targetPath>WEB-INF/classes</targetPath></resource></webResources></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins></build><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring-version}</version><exclusions><exclusion><artifactId>spring-core</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>opensymphony</groupId><artifactId>sitemesh</artifactId><version>2.4.2</version></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version><scope>provided</scope></dependency><dependency><groupId>TransactionResource</groupId><artifactId>TransactionResource</artifactId><version>0.0.1-SNAPSHOT</version><type>war</type></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.2.0.Final</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.4</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><dependency><groupId>net.sf.dozer</groupId><artifactId>dozer</artifactId><version>5.3.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring-version}</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc</artifactId><version>4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring-version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.4</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.4</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>1.4</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.3</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.1</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.5</version></dependency></dependencies><profiles><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><runtime.env>src/main/env/dev</runtime.env><final.name>webapp</final.name></properties><dependencies><dependency><groupId>com.eightqiu</groupId><artifactId>CodeCmns</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></profile><profile><id>qa</id><properties><runtime.env>src/main/env/qa</runtime.env><final.name>webapp_${buildNumber}</final.name></properties><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>buildnumber-maven-plugin</artifactId><version>1.1</version><executions><execution><phase>validate</phase><goals><goal>create</goal></goals></execution></executions><configuration><format>{0,date,yyyyMMdd}</format><items><item>timestamp</item></items></configuration></plugin></plugins></build><reporting><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>2.8.1</version></plugin></plugins></reporting><dependencies><dependency><groupId>com.eightqiu</groupId><artifactId>CodeCmns</artifactId><version>0.0.1-SNAPSHOT</version><scope>provided</scope></dependency></dependencies></profile><profile><id>prod</id><properties><runtime.env>src/main/env/prod</runtime.env><final.name>webapp</final.name></properties><dependencies><dependency><groupId>com.eightqiu</groupId><artifactId>CodeCmns</artifactId><version>0.0.1-SNAPSHOT</version><scope>provided</scope></dependency></dependencies></profile></profiles></project>
转载自:http://www.8qiu.cn/archives/1096
相关文章推荐
- Maven 如何为不同的环境打包 —— 开发、测试和产品环境
- maven如何为不同的环境打包-开发、测试、生产环境
- Maven 如何为不同的环境打包 —— 开发、测试和生产环境
- Maven 如何为不同的环境打包 —— 开发、测试和生产环境
- Maven 如何为不同的环境打包 —— 开发、测试和生产环境
- Maven 如何为不同的环境打包 —— 开发、测试和生产环境
- Maven 生产环境 测试环境 开发环境 打包配置
- 使用Maven自动打包配置文件生成开发环境,测试环境,生产环境
- 通过Maven配置测试环境和开发环境连接不同的数据库
- 通过Maven配置测试环境和开发环境连接不同的数据库
- 通过Maven配置测试环境和开发环境连接不同的数据库
- Maven对不同的测试环境用不同的参数进行打包
- maven 为测试环境、生产环境等不同环境打包
- Maven_如何为开发和生产环境建立不同的配置文件 --我的简洁方案
- Maven 使用profiles filters resources build 打包不同配置开发环境及打包
- Maven 生产环境 测试环境 开发环境 打包配置
- Maven为本地、测试、生产等不同的环境打包
- maven 开发环境 、测试环境、生产环境打包
- maven 开发环境 、测试环境、生产环境打包
- 通过Maven配置测试环境和开发环境连接不同的数据库