2010-12-07 60 views
1

我正在使用maven 2.1.0並擁有一個包含多個模塊的項目。 實施例的模塊:從maven junit中的依賴關係jar中加載文件

  • SPR-資源
  • SPR-共同

SPR-共同對SPR-資源的依賴

SPR-資源僅包含文件,沒有類。

spr-common有一個需要從spr-resources jar中加載文件的junit。

我用:

String fileName = getClass().getResource("/jaskeyfile.3DES").getFile(); 
is = getClass().getClassLoader().getResourceAsStream(fileName); 
is.read(data); 

當我在的IntelliJ運行測試工作的,但是當我做MVN測試時,出現NullPointerException異常,當我嘗試做閱讀()就可以了。

這是怎麼發生的?它應該從依賴讀取文件就好了。

此外,在pom.xml的SPR-共同對SPR-資源依賴性(均與範圍的測試,沒有它試過)

編輯: 我也

getClass().getClassLoader().getResourceAsStream("/jaskeyfile.3DES"); 

試過,沒有運氣。

EDIT2: 給定的文件存在於生成的jar中,所以我猜它應該可以訪問。

+0

嗯,那很奇怪。你嘗試了一個更簡單的方法:`InputStream is = getClass()。getResourceAsStream(「/ java/pkg/with/your/file/filename.txt」);`? `spr-resources`依賴性是否真的在`pom.xml`文件中定義,而不僅僅是在你的IDE中?如果在CLASSPATH上找不到該資源,則返回的流爲「null」。編輯:文件是否真的在`src/main/resources/java/pkg/with/your/file/filename.txt`目錄下的`spr-resources`中? – 2010-12-07 11:31:52

+0

如果您運行mvn測試,測試在本地運行在此特定模塊上。如果你需要另一個模塊spr-resource,你必須將它定義爲測試依賴關係,否則你不會在你的測試用例中看到它。 – khmarbaise 2010-12-07 13:04:37

回答

1

我相信這個問題可能與主導斜線。我認爲這兩個應該工作:

  • getClass().getResourceAsStream("/jaskeyfile.3DES")
  • getClass().getClassLoader().getResourceAsStream("jaskeyfile.3DES")

Class.getResourceAsStream()需要相對於類的包目錄的路徑,因此接受斜線。

ClassLoader.getResourceAsStream()已採用絕對路徑,因此它不接受主導斜線。

3

檢查一切仔細

下面列出了合作,通過:

  1. 文件jaskeyfile.3DES位於SPR-資源模塊
  2. 本地資源庫包含最新版本的內src/main/resources spr-resources-xyz-SNAPSHOT.jar(或者你已經發布了它/直接版本化),並且你已經使用了mvn clean install
  3. spr-common模塊引用了spr-resources-x.y.z的正確(命名)版本。jar(編譯的範圍將在測試和編譯類路徑中看到)

如果以上全部都是真的,那麼您的getClass().getResourceAsStream("/jaskeyfile.3DES")調用應該可以工作。我一直在我的項目中使用這種結構,所以你不會要求月亮或任何東西。