我假設您希望能夠在開發時測試本地,針對暫存環境進行更改並最終部署到生產環境。
需要牢記的關鍵是,當工件部署到本地/遠程存儲庫時,活動配置文件不是部署的部分,因此當通過配置文件添加依賴關係時,事情變得非常危險因爲您無法知道該Web應用程序是否是在DEV配置文件處於活動狀態或PROD配置文件處於活動狀態的情況下構建的,然後當將構建的工件部署到生產環境中時,您可能會被嚴格控制。
所以缺點是你確保你的工件獨立於部署環境。
這意味着,例如,你會撿起配置:
因此,舉例來說,如果部署到Tomcat,你可能會把一個configuration.properties放入$CATALINA_HOME/lib
啓動時的web應用程序將使用getClass().getResource('/configuration.properties')
來解析屬性文件,如果文件丟失(故障快速),則無法啓動
您可以通過將測試版本放入您的設備/集成測試中來使用其他配置configuration.properties中的src/test/resources
。
對應用程序的<scope>provided</scope>
樣式依賴關係使用相同的原則。換句話說,集裝箱與提供合同的依賴關係應該由集裝箱提供。因此,您可以使用Maven爲自己構建生產版本的tomcat/jetty,並將所需的依賴項添加到該程序集中。這將是生產版本使用MySQL數據庫的情況,所以您需要將mysql-jdbc驅動程序添加到$CATALINA_HOME/lib
。使用程序集插件執行此操作相對容易,因爲您實際上只是重新包裝了一些包含某些位的zip文件,而另一些則排除了該zip文件。
當您在本地進行測試時,您會希望使用幫助插件'run
的目標,如jetty:run
和tomcat:run
。這裏的解決方案是,通過配置文件提供這些插件依賴關係沒有任何問題,因爲您不會影響工件的依賴關係,因此您隻影響插件的類路徑。
例如
<project>
<!-- ... some stuff .. -->
<profiles>
<profile>
<id>DEV</id>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
您還可以配置系統屬性或類路徑添加以提取所需的配置文件。
所有這一切的最終結果是神器保持環境獨立,可以針對不同的環境中輕鬆地測試
希望這回答了你的問題(即使橫向)的輪廓
添加依賴關係是**主要反模式**並且不應該在原始POM格式規範中被允許。 – 2012-08-14 08:15:49
如何在不同配置文件中需要不同配置的情況下采取行動?我需要排除某些配置文件中的某些依賴關係 – maks 2012-08-14 08:30:24
使用不同的模塊和webapp疊加層將模塊通過配置文件添加到反應器中。 IOW您將擁有三個或四個webapp模塊,除了基本webapp和您需要的附加依賴關係之外,其餘所有模塊都將爲'空' – 2012-08-14 08:36:45