2014-02-20 39 views
6

當我有一個由多個模塊組成的maven應用程序,並且它們每個都包含一個log4j.properties文件時,會發生什麼情況?它們會被合併還是被某個模塊覆蓋(如果是,哪一個)?log4j.properties在多個maven模塊中?

更新:按照你的意見,我現在已經排除在我的勁歌這樣的附加屬性:

<dependency> 
[...] 
<excludes><exclude>**/log4j.properties</exclude></excludes> 
</dependency> 

PS:不過,「排除」標籤沒有被Maven和「排除」僅適用於認可依賴關係,而不是資源。

更新

就在log4j in a multi-module Maven project發現,我可以把log4j.properties放在src /測試/資源,使它們不會反正可執行模塊中包含!

+1

要排除資源,您應該使用Maven資源插件(http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html)。標籤層次結構是build/resources/excludes/exclude – polypiel

+0

但是我怎樣才能從某個依賴項中排除它,但是如何將它從另一個依賴項中排除? –

回答

6

他們永遠不會合並。一般來說,log4j.properties文件會被覆蓋,並且您無法準確告訴哪一個文件。

這取決於按容器加載Jar文件的順序。

因此,建議您爲應用程序的核心模塊中的其他子模塊分別安裝一個log4j.properties和多個appender。

但是它會在獨立測試/使用子模塊時產生問題,因爲它會在單獨測試時停止記錄。在我們的例子中,源代碼管理版本的pom總是用來排除資源(這將在構建jar時排除屬性文件)。然而,在本地開發人員中,開發人員曾經評論POM中的排除並可以獨立工作。

+0

我不明白你的意思是「在開發者當地」。所以測試和Web應用程序本身有不同的log4j.properties? –

+1

我在談論'pom.xml'時,源代碼控制版本將在創建jar文件時始終排除log4j.properties文件。但是假設開發人員想在他的本地測試,他需要評論'pom'中的排除項目,以便在他的Jar中包含log4j.properties以進行本地測試。 – sakura

+0

對我來說,維護一個與版本控制本地不同的pom.xml實在太複雜了,但我理解這種方法!我將從現在開始將其他log4j.properties放在src/test/resource中。 –

1

例如,如果您有兩個項目一個用於數據,另一個用於演示文稿。並且都有log4j.properties。並且在部署包含數據文件的戰爭文件時。只有演示項目纔有效果。數據項目中的log4.properties將被忽略。他們永遠不會被合併或自己寫過。