1

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

我遇到的问题是 other.jar 中有一个类可以查找该项目中包含的图像文件(xyz.gif):例如,项目“其他”看起来像: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...)

我已经尝试了所有我能想到的将 images/xyz.gif 的路径传达给 jar 的方法,包括: 1. 我尝试将 CLASS-PATH: images/ 添加到 other.jar 的 MANIFEST.MF 2. 我尝试复制将图像目录添加到 code.jar 的构建中,并将 CLASS-PATH: images/ 添加到 code.jar 的 MANIFEST.MF 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"); 关于这是否是加载图像的正确/最佳方式似乎有很多讨论 -我假设这段代码的作者确实使用 Eclipse 运行它(可能会整理出路径),我只是想让它在命令行上运行(最终在 ant 中运行)。

任何帮助将不胜感激。我不明白为什么关于 jar 创建的文档如此之少。

4

1 回答 1

0

而不是直接运行 jar 尝试将其放在类路径中。像这样的东西:

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
于 2013-03-31T14:28:57.427 回答