使用maven管理項目中的依賴,很是的方便。同時利用maven內置的各類插件,在命令行模式下完成打包、部署等操做,可方便後期的持續集成使用。java
可是每個maven工程(好比web項目),開發人員在開發時,會使用一種配置文件,好比數據庫配置,而測試環境可能使用另外一種配置文件。web
打包完成後,手動調整配置文件,工做重複度很高,所以查找方法,實現「maven根據不一樣的運行環境,打包不一樣的配置文件」的目的。數據庫
在src/main/resources目錄下面,按照環境名稱創建配置文件目錄。這裏有兩個環境:test、product。apache
同時發現test、product目錄中的文件和目錄以外的文件基本相同。這是爲了方便開發人員本地開發時本地調試,因此沒有創建dev環境的配置文件目錄。maven
主要關注標紅的插件maven-resources-plugin,以及標紅的配置部分。測試
注意:目前通過測試,發現resources目錄文件拷貝會在validation階段以後compile階段以前執行,爲了保證指定環境的配置文件在resources目錄拷貝以後執行,使用compile階段;overwrite設置爲true,強制覆蓋原有文件。ui
使用maven-resources-plugin插件,在compile階段實現指定目錄中配置文件的拷貝操做。url
<build> <finalName>Lantech</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 不一樣環境的配置文件選擇 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-resources</id> <phase>compile</phase> <goals> <goal>copy-resources</goal> </goals> <configuration>
<!-- 覆蓋原有文件 -->
<overwrite>true</overwrite> <outputDirectory>${project.build.outputDirectory}</outputDirectory> <!-- 也能夠用下面這樣的方式(指定相對url的方式指定outputDirectory) <outputDirectory>target/classes</outputDirectory> --> <!-- 待處理的資源定義 --> <resources> <resource> <!-- 指定resources插件處理哪一個目錄下的資源文件 --> <directory>src/main/resources/${package.environment}</directory> <filtering>false</filtering> </resource> </resources> </configuration> <inherited></inherited> </execution> </executions> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
使用profiles可爲maven命令執行時,激活不一樣的變量,並依據此變量同上述的插件配合,完成指定目錄中配置文件拷貝操做。spa
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <package.environment>dev</package.environment> </properties> </profile> <profile> <id>test</id> <properties> <package.environment>test</package.environment> </properties> </profile> <profile> <id>product</id> <properties> <package.environment>product</package.environment> </properties> </profile> </profiles>
mvn clean package
mvn clean package -Pdev
mvn clean package -Ptest
mvn clean package -Pproduct
執行命令,指定-P參數,啓用指定的profile。插件
默認的dev目錄是不存在的,所以原有的配置文件不會被覆蓋。當啓動其餘profile時,會覆蓋原有的文件,實現不一樣環境不一樣配置文件的打包需求。