Maven學習--profile
轉載自:
本文介紹 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連線資料庫:
測試和產品環境都是透過 JNDI 方式連線資料庫:
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:
Maven-war-plugin裡配置additional resource folder
${runtime.env} & ${final.name}就是profile裡定義的兩個properties。
打包的時候使用-P <profile>指定需要打哪個環境的包。
e.g.
mvn clean package -Pdev
mvn clean package -Pqa
附上完整的pom.xml
本文介紹 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連線資料庫:
- <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>
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:
- <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="" xmlns:xsi=""
- xsi:schemaLocation=" http://maven.apache.org/maven-v4_0_0.xsd">
- <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:</connection>
- <developerConnection>scm:svn:</developerConnection>
- <tag>HEAD</tag>
- <url></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>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2120459/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- maven學習(下)利用Profile構建不同環境的部署包Maven
- Oracle Profile學習Oracle
- MAVEN中的profileMaven
- Maven 學習Maven
- Maven學習Maven
- Maven管理SpringBoot ProfileMavenSpring Boot
- oracle的profile檔案學習Oracle
- Maven學習總結Maven
- Maven學習筆跡Maven
- 學習Maven IntelliJMavenIntelliJ
- maven 學習筆記Maven筆記
- maven中的profile檔案的解析Maven
- maven 學習總結(一)——Maven入門Maven
- maven 學習總結(四)——Maven核心概念Maven
- maven 使用maven profile實現多環境可移植構建Maven
- Maven 學習筆記——Maven和Eclipse(2)Maven筆記Eclipse
- Maven 學習筆記——Maven環境配置(1)Maven筆記
- Javaxuex學習筆記---MavenJava筆記Maven
- Maven 學習筆記一Maven筆記
- maven 學習總結(六)——Maven與Eclipse整合MavenEclipse
- maven中profile元素的作用意義和用法Maven
- 多環境支援-Maven和Spring的ProfileMavenSpring
- maven 學習總結(二)——Maven專案構建過程練習Maven
- maven 學習總結(三)——使用Maven構建專案Maven
- maven 學習總結(九)——使用Nexus搭建Maven私服Maven
- Git和Maven的學習筆記GitMaven筆記
- maven一站式學習Maven
- maven學習(中)- 私服nexus搭建Maven
- maven學習(上)- 基本入門用法Maven
- maven 學習總結(八)——使用Maven構建多模組專案Maven
- 【DB2學習】db2profile的指令碼DB2指令碼
- maven學習總結(七)——eclipse中使用Maven建立Web專案MavenEclipseWeb
- 使用 Maven Profile 和 Filtering 打各種環境的包MavenFilter
- maven 學習總結(五)——聚合與繼承Maven繼承
- Maven學習總結(42)——Maven多模組構建中常用的引數Maven
- Spring Boot配合Maven的Profile機制完成環境適配Spring BootMaven
- 使用maven的profile切換專案各環境的引數Maven
- Maven初學Maven