簡體   English   中英

從maven junit中的依賴jar加載文件

[英]Loading a file from dependency jar inside maven junit

我正在使用maven 2.1.0並且有一個包含多個模塊的項目。 示例模塊:

  • SPR-資源
  • SPR常見

spr-common依賴於spr資源

spr-resources只包含文件,沒有類。

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

我用了:

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

這在我在IntelliJ中運行測試時有效,但是當我進行mvn測試時,當我嘗試對其執行read()時,它會因NullPointerException而失敗。

為什么會這樣? 它應該從依賴中讀取文件就好了。

另外,spr-common中的pom.xml依賴於spr-resources(嘗試使用范圍測試,沒有使用它)

編輯:我也嘗試過

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

沒有運氣。

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

仔細檢查一切

這是一個可以解決的列表:

  1. 文件jaskeyfile.3DES位於spr-resources模塊中的src/main/resources
  2. 您的本地存儲庫包含最新版本的spr-resources-xyz-SNAPSHOT.jar(或者您已將其發布/直接版本化)並且您肯定在其上使用了mvn clean install
  3. spr-common模塊引用了spr-resources-xyzjar的正確(命名)版本(編譯范圍將在test和compile類路徑中看到)

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

我認為問題可能出在領先的斜線上。 我認為這兩個都應該有效:

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

Class.getResourceAsStream()接受相對於類的包目錄的路徑,因此它接受前導斜杠。

ClassLoader.getResourceAsStream()已經采用絕對路徑,因此它不接受前導斜杠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM