簡體   English   中英

JAR文件中帶有getResourceAsStream()的FileNotFoundException

[英]FileNotFoundException with getResourceAsStream() in JAR file

我不知道該怎么辦了。 嘗試從可運行的.jar文件執行程序時,嘗試使用getResourceAsStream()讀取.properties文件時,出現FileNotFoundException異常。

我使用Maven 3.5.0和Java 8 Update 144,Eclipse Oxygen。 我還使用maven-assembly-plugin和程序集描述符jar-with-dependencies來生成單個.jar文件。

屬性文件位於/ src / main / resources(在Eclipse中),因為它是Maven的約定。 然后,在構建.jar文件時,它會自動放入.jar文件的根目錄中。

在Eclipse中運行程序時,效果很好。 我只是為getResourceAsStream()方法提供屬性文件的名稱,而不提供其他斜杠(/)或其他任何內容。 我查看了.jar文件,發現該文件直接位於.jar文件的根目錄中。

為什么找不到.properties文件? 我就是不明白。

更新2017-10-12

我發布了一個答案並認為它可以工作,但是它似乎可以工作,因為我更改了版本字符串並附加了“ -SNAPSHOT”,但是從那時起,我的子模塊就沒有更新。 我知道我只需要附加文字“ -SNAPSHOT”,Maven就可以重新編譯在Eclipse中更改的當前代碼並將其放入我的.jar文件中。 但事實並非如此。

Maven開始讓我很煩。 它應該像這樣工作。 現在到底出了什么問題?

順便說一句,應該強制更新的“ mvn clean -U軟件包”也不會更新快照。 我使用了Maven程序集插件。

您需要在路徑的開頭加上斜線。

this.getResourceAsStream('/myFile.properties')

找到了解決方案。 我沒有在Maven中使用SNAPSHOT版本。 事實證明,我需要為標簽使用“ [版本號] -SNAPSHOT”,以便Maven始終使用當前最新的代碼進行構建。 現在可以了。 :)

更新2017-10-12

好吧,我想我知道出了什么問題。 我需要從父目錄運行“ mvn install”,以調用子模塊A所引用的子模塊A的編譯和安裝。 然后,我可以在子模塊B上運行“ mvn軟件包”,以將子模塊A的最新代碼構建到單個.jar文件中。 :)最后...

暫無
暫無

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

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