Maven根據不同個環境打包, 獲取不同的配置文件等等
這段時間接觸Maven, 發現還是個不錯的東西, 我在OpenShift申請了一個賬號, 準備自己做一個自己的網站, 它默認是Maven管理的, 也可以自己用其他的. 但是我要打war, 然后發布. 我本地的測試配置文件 與 線上的配置不一樣, SB的做法就是每次復制粘貼, 這太.... 所以, 我必須要在本地的IDEA里面一樣, 需要誰作為我的資源文件就要作為的我資源文件, 那就方便了, 找了很多的BLGO, 說的很好, 就是琳琳碎碎的. 還不如給我一個pom.xml了. 以至于我一直沒有跑起來, 或者他們的碎片就是不完整的, 自己折騰了半天, 并且自己測試, 上線, 都OK. ...
<project xmlns="; <modelVersion>4.0.0</modelVersion> <groupId>book</groupId> <artifactId>book</artifactId> <packaging>war</packaging> <version>1.0</version> <name>book</name><repositories> <repository> <id>eap</id> <url>http://maven.repository.redhat.com/techpreview/all</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
<pluginRepositories> <pluginRepository> <id>eap</id> <url>http://maven.repository.redhat.com/techpreview/all</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.6</maven.compiler.source> <maven.compiler.target>1.6</maven.compiler.target>
<package.environment>local</package.environment> </properties>
<dependencies>
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.2-1003-jdbc4</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.0.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.0.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.0.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.0.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.0.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.2.0.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>3.2.0.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>3.2.0.RELEASE</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>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
</dependencies>
<profiles> <profile> <id>local</id> <properties> <package.environment>local</package.environment> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>product</id> <properties> <package.environment>product</package.environment> </properties> </profile> </profiles>
<build> <finalName>book</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>local/</exclude> <exclude>product/</exclude> <exclude>public/*</exclude> </excludes> </resource> </resources>
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> <warName>book</warName> <webResources> <resource> <directory>src/main/resources/${package.environment}</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources/public</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> <!--<resource>--> <!--<directory>${project.build.directory}/classes</directory>--> <!--<includes>--> <!--<include>/*.properties</include>--> <!--<include>/*.xml</include>--> <!--</includes>--> <!--</resource>--> </webResources> </configuration> </plugin> </plugins> </build>
</project></pre>
其中, 我們注意的地方: 我解釋一下:
<profiles> <profile> <id>local</id> <properties> <package.environment>local</package.environment> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>product</id> <properties> <package.environment>product</package.environment> </properties> </profile> </profiles>這里就是不同的resources文件夾, 我這里只區分本地 產品; 設置為true的就是默認被激活的. 所以后面打包默認就是本地;
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>local/*</exclude> <exclude>product/*</exclude> <exclude>public/*</exclude> </excludes> </resource> </resources>這里就是我的資源文件, public里面存放我的公用的, 比如Spring的配置文件, 就是本地與產品都一樣的;local 與 product一看就知道了;
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> <warName>book</warName> <webResources> <resource> <directory>src/main/resources/${package.environment}</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources/public</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> <!--<resource>--> <!--<directory>${project.build.directory}/classes</directory>--> <!--<includes>--> <!--<include>**/*.properties</include>--> <!--<include>**/*.xml</include>--> <!--</includes>--> <!--</resource>--> </webResources> </configuration> </plugin>
這里就是war的插件了,
${package.environment}就是動態指定文件夾了.
<filtering>true</filtering>這里一定需要設置為true才行.
然后就差不多了. 最后執行 mvn clean ; mvn compile; mvn package; 這里是Maven的生命周期, 其他介紹的文章太多了, 我就不再具體講. 如果說我要打product的war包;
mvn clean ; mvn compile; mvn -Pproduct package;
那就激活了product 的資源文件;
就這樣子, 很簡單吧~
來自:http://my.oschina.net/vernon/blog/271970