2013-03-31 55 views
1

我想創建一個可執行的jar(code.jar),它依賴另一個jar文件(other.jar),這是我在一個單獨的項目(=目錄)中創建的。如何將資源目錄的路徑添加到可執行的jar

我遇到的問題是other.jar中有一個類查找包含在該項目中的圖像文件(xyz.gif): 例如,項目'other'看起來像:build/images/xyz.gif src/...等

我做other.jar(包括/ images目錄),然後我做code.jar。

但是,當我運行 java -jar code.jar - 它無法找到xyz.gif: java.lang.IllegalArgumentException:input == null! 在javax.imageio.ImageIO.read(ImageIO.java ...)

我已經試過所有我能想到的通信路徑將圖像/ xyz.gif的罐子,其中包括:1。 我試着添加CLASS-PATH:images /到MANIFEST.MF for other.jar 2.我嘗試將images目錄複製到code.jar的build中,併爲code.jar添加CLASS-PATH:images /到MANIFEST.MF 3.我試圖把類路徑:images/xyz.gif - 在兩個清單文件中

這似乎是一個普遍問題:如何將一個(非類)資源(例如圖像文件)包含到java jar文件在 這樣的一種方式,Java可以找到它(沒有subseq使用子包的uent包 - 例如,code.jar使用需要知道詳細信息的other.jar) 。

說我可以用successfullly運行代碼項目:

java命令somepath /圖像com.xyz.code

我想要做的是運行:

java -jar code.jar - 讓它找到類路徑上的images /目錄。

我應該補充說,包含圖像的jar(other.jar)項目不是我的代碼 - 我只是想編譯它來使用。該代碼嘗試使用以下代碼加載圖像: javax.imageio.ImageIO.read(ClassLoader.getSystemResource(「xyz.gif」); 似乎有很多關於這是否是正確/最佳加載方式的討論圖像 - 我假設這段代碼的作者DID使用Eclipse工作(whi ch很可能將路徑整理出來),而我只是想讓它在命令行上工作(並最終在螞蟻中)。

。任何幫助,將不勝感激,我不明白爲什麼罐子上創建的文檔是微乎其微的

+0

你還想要一個答案? –

回答

0

而不是運行罐子直接嘗試把它在類路徑的事情是這樣的:。

java -cp code.jar MainClass

這可能工作。

編輯:

以上解決方案將無法正常工作。嘗試下面的代碼來獲取圖像。

ImageIcon myIcon = new ImageIcon(this.getClass().getResource("/resources/icon.gif")); 

,並把圖像以低於位置:

/myApp/src/resources/icon.gif 
/myApp/bin/resources/icon.gif