簡體   English   中英

Maven-從JAR加載資源?

[英]Maven - Load resources from JAR?

當使用Maven綁定JAR文件中的資源時,我感覺缺少一些關鍵的東西。 我的目錄結構是標准的Maven目錄(即\\ src \\ main \\ java,\\ src \\ main \\ resources)。

使用IDE時,我將資源文件引用為\\ main \\ resources \\ images \\ blah ...,並且工作正常,但是當Maven捆綁JAR文件時,它將相對於根的路徑(“ \\ images \\ blah”)放置,因此所有路徑都不正確。

我的問題確實是雙重的,首先是我缺少明顯的東西嗎? 第二個是處理此問題的最佳方法是什么? 我知道當我打包所有內容以進行部署時,可以將所有路徑替換,或者將所有路徑包圍在try / catch塊中,甚至更改maven輸出目錄,但是我覺得它們太過優雅了,遺漏了什么。 提前致謝。

編輯:我像這樣引用資源文件: getClass().getResource("/main/resources/images/lightboardImage.jpg"));

EDIT2:現在這顯然是一個IDE配置問題,可能是由於我使用Maven將一個舊項目轉換為一個項目這一事實。 我不太了解它是如何配置錯誤的。 我的文件夾結構是:

src / main / java
src / main / resources

我的類路徑中有一個用於“ src”的條目<classpathentry kind="src" path="src"/>

如果我右鍵單擊/main/resources/images/文件夾並用作源文件夾,它將把classpathentry變成此<classpathentry excluding="main/resources/images/" kind="src" path="src"/>並創建一個新的像這樣的<classpathentry kind="src" path="src/main/resources/images"/> 它也不起作用。

EDIT3:好的,這確實很愚蠢,但是我才意識到問題出在哪里。 我實際上並沒有使用Maven進行本地開發。 它使用的是Eclipse的內置Ant配置。 Maven用於自動部署構建,因此出現了問題。 很抱歉浪費大家的時間。

這應該在IDE和JAR中都有效。

getClass().getResource("images/lightboardImage.jpg");

來自src/main/resources被復制到target/classes

在運行時,所有資源應從classpath中以images/lightboardImage.jpg可見。 這對我來說是IDE的作品。 如果沒有,請按照@juanluisrp所述檢查IDE配置。

從我的IDE執行的Java如下所示:

java  -classpath (...) /home/.../target/classes (...)

因此,運行時類路徑被配置為target/classes目錄。

在Maven的生命周期中,資源被復制到target/classes 組裝JAR時, target/classes內容將轉到JAR根目錄。 因此,如果您要加載JAR中的資源,則可以使用

getClass().getResource("/images/lightboardImage.jpg"));

在IDE中,除非沒有正確配置類路徑,否則它應該使用相同的路徑。 如果使用的是Eclipse,請檢查src/main/resources是否標記為源文件夾。

我認為這里的問題是,您需要將IDE設置為指向src/main/resources作為類路徑的一部分。 然后,您可以使用getClass().getResource("images\\lightboardImage")在maven下和從IDE中運行。

例如,在Eclipse中,您可以通過右鍵單擊Project Explorer中的src/main/resources並單擊"Build Path" -> "Use as Source Folder"

暫無
暫無

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

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