項目有三種環境:web
1.本地開發環境(local)數據庫
2.開發測試環境(dev)apache
3.線上生產環境(product)api
不一樣的環境有不一樣的配置,好比數據庫鏈接什麼的....maven打包時默認去resources文件夾下打包這些配置文件,放在WEB-INF/classes下,而後再打成war包,就能用了...如今經過修改pom.xml文件,增長三種配置,讓maven打包時選擇打包不一樣文件夾下的配置文件到WEB-INF/classes下,這樣就省事兒了....服務器
如圖所示,resources下dev,local,product三個文件夾,分別對應三種環境。jsp
下面是pom.xml主要修改:maven
<!--配置參數--> <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> <profile> <id>dev</id> <properties> <package.environment>dev</package.environment> </properties> </profile> </profiles> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>local/*</exclude> <exclude>product/*</exclude> <exclude>dev/*</exclude> </excludes> </resource> </resources> <!-- war打包插件, 設定war包名稱不帶版本號 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <warSourceExcludes>*/lib/jsp-api-2.2.jar</warSourceExcludes> <warName>gcTaobao</warName> <webResources> <!--動態指定文件--> <resource> <directory>src/main/resources/${package.environment}</directory> <targetPath>WEB-INF/classes</targetPath> <filtering>true</filtering> </resource> </webResources> </configuration> </plugin> </build>
1. <profiles>標籤裏的三個<profile>是分別指local , dev ,product 三個參數。ide
2.<resources>標籤裏<excludes>確認在打包時不打包對應三個文件夾以及裏面的文件。測試
3.org.apache.maven.plugins插件<webResources>動態指定參數${package.environment}對應文件夾下的文件到WEB-INF/classes下。ui
到此就配置好了:
下面是maven命令
而後就能夠用mvn -P local package 或者mvn -P install 就能夠打包成功了。
按照上面的配置,打出的war能夠正確使用,可是在使用maven jetty插件時,jetty自動加載的時target/classes中的文件。你能夠發現使用上面的配置編譯出來的target/classes的文件裏沒有對應的jdbc等文件。這裏的解決方案是更改jetty加載classes路徑來解決。
具體配置:
<artifactId>${artifactId}</artifactId> <version>${version}</version> <properties> <artifactId>AAA</artifactId> <version>0.0.1-SNAPSHOT</version> </properties> <build> <!-- 配置加入jetty服務器,開發時咱們通常使用jetty服務器 --> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <!--jetty:run指定加載classes路徑--> <classesDirectory>target/${artifactId}-${version}/WEB-INF/classes</classesDirectory> <!-- 設置掃描target/classes內部文件變化時間間隔 --> <scanIntervalSeconds>10</scanIntervalSeconds> <webApp> <contextPath>/</contextPath> </webApp> <stopKey/> <stopPort/> </configuration> </plugin> </build>
maven打包時生成 一個 artifactId-version的文件夾,裏面有對應的WEB-INF/classes文件,<classesDirectory>標籤指定jetty加載裏面的classes下文件,裏面有也有對應的配置文件,這樣就能夠正常本地啓動了。
install直接選擇具體參數,而後點擊install就能夠了,多選參數時,會出現覆蓋的狀況。
如圖