如何将资源目录的路径添加到可执行jar

时间:2013-03-31 02:41:09

标签: java jar classpath

我正在尝试创建一个可执行jar(code.jar),它依赖于我在一个单独的项目(= directory)中创建的另一个jar文件(other.jar)。

我遇到的问题是other.jar中有一个类来查找该项目中包含的图像文件(xyz.gif): 例如,项目'other'看起来像:build / images / xyz.gif src / ... etc。

我创建了other.jar(包括/ images目录),然后创建了code.jar。

然而,当我跑步时     java -jar code.jar - 它无法找到xyz.gif:     java.lang.IllegalArgumentException:input == null!     在javax.imageio.ImageIO.read(ImageIO.java ...)

我已经尝试了一切我能想到的将图像/ xyz.gif的路径传达给jar,包括: 1.我尝试将CLASS-PATH:images /添加到MANIFEST.MF for other.jar 2.我尝试将images目录复制到code.jar的构建中,并将forcASS-PATH:images /添加到MANIFEST.MF中以获取code.jar。 3.我尝试在两个清单文件中放置CLASS-PATH:images / xyz.gif

这似乎是一个普遍的问题:如何将(非类)资源(例如图像文件)包含到java jar文件中 java可以找到它的方式(没有使用子包的后续包 - 例如,code.jar使用other.jar) 需要知道细节。

假设我可以使用以下方式成功运行代码项目:

  

java -cp somepath / images com.xyz.code

我想要做的是运行:

  

java -jar code.jar - 让它在类路径中找到images /目录。

我应该补充一点,包含图像的jar(other.jar)项目不是我的代码 - 我只是想编译它来使用。该代码尝试使用以下命令加载图像: javax.imageio.ImageIO.read(ClassLoader.getSystemResource( “xyz.gif”); 关于这是否是加载图像的正确/最佳方式似乎有很多讨论 - 我假设这个代码的作者DID让它使用Eclipse(whi) ch可能整理了路径),我只想让它在命令行上运行(最终在ant中)。

非常感谢任何帮助。我不明白为什么关于jar创建的文档很少。

1 个答案:

答案 0 :(得分:0)

不要直接运行jar,而是将其放在classpath中。像这样:

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
相关问题