我正在尝试创建一个可执行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创建的文档很少。
答案 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