簡體   English   中英

如何在JAR中包含資源和依賴項?

[英]How to include resources AND dependencies in JAR?

我有一個Java項目,該項目依賴於外部庫,並且包含一個名為template.pdf的資源。 該庫位於我的工作空間之外的文件夾中,並由項目使用Project -> Properties -> Build Path -> Libraries -> Add External Jar引用。 資源文件當前位於我的工作區中的bin/文件夾中,因此我可以使用PDFProject.class.getResourceAsStream("/template.pdf") ,該文件在Eclipse和JAR文件中均有效,假設我導出了使用下面的方法1的JAR文件。

我的目標是能夠將項目導出到同時包含資源和依賴項的JAR,同時還能夠從Eclipse和JAR內部運行代碼,而無需更改用於訪問資源或維護的代碼任何文件的多個副本。 到目前為止,我已經嘗試過:

  1. 使用Export -> JAR file進行Export all output folders for checked projects復選框。 這將導出包含了資源文件的JAR,並允許使用相同的路徑( "/template.pdf" )從Eclipse和JAR訪問資源,但是沒有提供將依賴關系打包在JAR內部的選項。
  2. 使用[Extract/Package] required libraries into generated JAR使用Export -> Runnable JAR file [Extract/Package] required libraries into generated JAR選定的[Extract/Package] required libraries into generated JAR選項中。 這將導出具有內部依賴項的jar,但會忽略資源文件。
  3. 將資源文件移到項目的src/目錄中,然后使用上面的方法2導出。 這樣可以將資源和依賴項正確地打包到JAR中,但是如果不進行修改,則代碼不會在Eclipse中運行,因為"/template.pdf"不再位於類路徑中。

我意識到,可以在導出后手動將資源放入JAR,或者將資源文件的副本保留在bin/src/ ,或者將庫的源代碼直接復制到我的項目中,但是這些解決方案在一般情況下似乎效率不高。 我的大部分搜索似乎都表明,Ant或Maven之類的構建工具可能會提供可接受的解決方案,但如果可能的話,我寧願避免此時解決這一學習難題。 有沒有一種方法可以僅使用基本的Eclipse導出選項和文件夾層次結構來創建上述指定的JAR文件?

編輯:下面的 ThorbjørnRavn Andersen的評論確實幫助我發現了關於我如何將資源文件添加到項目中的一個大錯誤。 我沒有使用Eclipse的Import功能,而是通過OS手動將文件復制到源文件夾,然后使用右鍵單擊菜單中的Refresh更新Eclipse中的Package Explorer。 我錯誤地認為這將對項目進行任何必要的更新,但是我隨后還需要清理項目,以使文件反映在輸出文件夾中(或者僅使用導入功能在第一個文件中添加文件)地點)。

通過允許我只需要維護位於源文件夾中的資源文件的副本,就可以從根本上解決我的問題,但是它的確導致了磁盤上文件的多個副本。 對於我的小型項目,這不是問題。 但是,對於具有許多資源文件的大型項目,這可能導致重復文件占用大量磁盤。 當然,必須有一種無需重復就能達到類似結果的方法嗎?

創建一個新的源文件夾,並在其下放置template.pdf。 然后更改get resourceAsStream()以也包括新的文件夾名稱。

getResourceAsStream(“ \\ resources \\ template.pdf”)

如果jar文件在該文件的路徑中位於資源文件夾內,則可以在Project-> Build路徑中添加jar文件,並使用以下InputStream = ClassLoader.getSystemResourceAsStream(“ resources / sample.txt”);

這對我有用。

暫無
暫無

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

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