2011-12-30 56 views
2

我有一些代碼,獲取資源如下:中ClassLoader.getResources()在Maven項目返回一個空的枚舉

public static final String CONVERTER_FILE = "META-INF/jumbo-converters"; 
static { 
     ClassLoader ldr = Thread.currentThread().getContextClassLoader(); 
     Enumeration<URL> e = ldr.getResources(CONVERTER_FILE); 

,但是當我在JUnit測試(Java 6中)運行此枚舉是空的。項目中有一些子項目有以下文件:

myProject/mySubProject/src/main/resources/META-INF/jumbo-converters 

我相信它已經在過去工作過了。 getResources做什麼?以及如何調試當前的故障?

+0

也許src/main/resources不會自動與src/test/resources合併。所以你需要在你的pom.xml中寫入( src/main/resources korifey 2011-12-30 20:32:59

+0

更新了答案,因爲我第一次誤讀你的問題。 – Dev 2011-12-30 22:53:53

回答

1

除非聚合項目對模塊有依賴性,否則模塊(子項目)的資源將不會添加到聚合項目的類路徑中。作爲一個項目的模塊並不能建立任何方向上的依賴關係。

在上例中,您應該添加mySubProject對myProject的依賴關係。因此使myProject依賴於mySubProject。

+0

謝謝。這是我打算使用的策略,現在它適用於我 – 2011-12-31 16:12:24

+0

項目關係在maven中可能會有點瘋狂,因爲您可以擁有項目A聚合了一個模塊B,該模塊B有一個根本沒有模塊的父項目C,父子關係,聚合模塊關係和依賴關係依賴關係離子化在maven項目結構中都是正交的概念。 – Dev 2011-12-31 18:28:31

2

要使用ClassLoader.getResources()加載文件,必須在類路徑中找到它。解決方法是確保META-INF的父文件夾位於類路徑中。

+0

沒有../src/main/resources自動把這個在類路徑上? – 2011-12-30 19:39:25

+0

@ peter.murray.rust,如果'resources'文件夾位於類路徑上,那麼如果使用相對路徑,則會找到該文件(如果它可由curent用戶讀取),則可能測試不是從'mySubProject'的子文件夾開始?您可以嘗試使用絕對路徑嗎? – rsp 2011-12-30 19:43:54