關於在打包Jar文件時遇到的資源路徑問題(二)


在關於《關於在打包Jar文件時遇到的資源路徑問題(一)》中,以及描述了當資源與可執行JAr分離時的資源路徑代碼的編寫問題,后來想了想,為什么將《Java核心技術卷一》中的程序10-1即ResourceTest的Jar文件放在任何地方都可以執行呢?

圖:將原本一起放入目錄中的Jar放到桌面上,點擊依然能執行

於是我將這個Jar包進行解壓,發現在這個包中依然有資源,這就說明了這個包在脫離了原先目錄而執行時,依據的資源路徑應該是在自己的Jar包中。(至於這個Jar在原先目錄時是根據自己包中的資源還是目錄中的資源我並不清楚,因為按照在關於在打包Jar文件時遇到的資源路徑問題(一)所描述的,在同一目錄下的資源能作為URL傳遞進去也是可以解釋的)

   解壓之后:------>     

 

接下來的問題就是如何在打包的時候將資源也一同打包進Jar包中

方法(一) : 在cmd中使用 jar cvf *.class *.gif 或者后面再接別的資源類型的通配符格式,然后再使用 java -jar XXX.jar 。

方法(二) : 使用Eclipse方式如何操作呢:

    方法:將資源或者包含資源的文件目錄放入項目文件夾中的某個文件夾,這里又有兩種方式可以放置:

首先注意一點:打包時只有在項目文件下的src文件夾中才能打包進Jar包中,其他地方即使在該項目下也不能被打包進Jar包中

其次,每次新放置了資源后要對Eclipse的項目資源管理器進行刷新,這樣才能正確打包

最后以下兩種方法都是在Eclipse編譯時會報錯,但是打包出來運行時就可以了,這就是本文同上一篇《關於在打包Jar文件時遇到的資源路徑問題(一)》最大的不同之處。

================================正文開始分割線=================================================

 

方式一:放在src文件下,就是同其他任何包在src目錄下,這種方式需要使用絕對資源位置(最前面加“/”):

  例如在ImageViewerProject項目中,將palette.gif放在src目錄下,同在這個目錄下的還有image包,該包中就是主程序

圖:將palette.gif放在src目錄下

 

圖:在Eclipse中的項目資源管理器空白處進行刷新

 

圖:刷新之后將會看到palette.gif資源將會出現在src目錄下

程序一定要使用絕對資源路徑:

chooser.setAccessory(new PreImageViewer(chooser));
URL picUrl = this.getClass().getResource("/palette.gif");

 

這時將該程序導出成Jar包,無需再添加資源到該Jar包所在目錄,就可以直接運行了:

將這個Jar包進行解壓,可以看到palette.gif就在其中,而且同image包處於同一目錄下:

 

但是還是離《Java核心技術》所示的例子還差一步,因為其示例代碼所用的是相對資源路徑,那么該如何做到呢,答案就在方式二。

 

=========================================================================

方式二:將資源放入程序所在的包中,此時還未打包前該包中還是各種.java文件:

例如在ImageViewerProject項目中,將palette.gif放在src目錄下的image包中,該包中就是主程序,也就是說資源和源代碼放在了一起:

圖:將palette.gif放在源碼包目錄下,和源程序放在了一起

對Eclipse進行刷新:

這樣,在程序中就可以不一定使用絕對資源路徑,可以使用相對資源路徑,代碼就可以變成這樣:

chooser.setAccessory(new PreImageViewer(chooser));
URL picUrl = this.getClass().getResource("palette.gif");

 

 

現在利用Eclipse對程序進行打包,同樣的,無需無需再添加資源到該Jar包所在目錄,就可以直接運行了:

依然對這個Jar進行解壓來看看內部,與方式一不同,這次資源就在解壓的目錄下,而是在class文件所在的包中,和字節碼文件在一起:

  打開image包------->

 

=================================================================================================================

因此可以使用這兩種方式將資源進行同代碼一起打包進Jar包,這兩種方式並沒有說哪個好哪個壞,從資源所在的位置就能看出,因此還是具體情況具體分析。

  同理,無論是這一篇博客還是上一篇的《關於在打包Jar文件時遇到的資源路徑問題(一)》,這些方法都必須根據實際情況進行選擇:

如果是資源需要經常修改,那么就可以使用《關於在打包Jar文件時遇到的資源路徑問題(一)》所介紹的方法,將可執行Jar包和資源分離,這樣易於改動,而不需要將Jar包解壓修改后在復原;

如果是某些資源不需要修改,那么就可以使用本文中的方式,將資源和字節碼文件一起打包進Jar包中,這樣易於將應用程序移動,

當然,如果結合這兩者方式,對固定資源和常修改資源進行分類處理,能獲得更好的效果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM