Eclipse:导出到.jar并包含资源文件(ANT)
我们在eclipse中的项目大致显示了以下文件夹:Eclipse:导出到.jar并包含资源文件(ANT),eclipse,ant,executable-jar,java-6,Eclipse,Ant,Executable Jar,Java 6,我们在eclipse中的项目大致显示了以下文件夹: application - src - JRE System Library [1.6] - Referenced Libraries - lib - rsc 在我们的项目中,我们希望使用文件>导出…>可执行JAR 这很好,但有一些例外:如果我们想运行application.jar,我们仍然需要将文件夹rsc/复制到application.jar所在的位置 在rsc/中,我们有其他文件夹用于分离不同的部
application
- src
- JRE System Library [1.6]
- Referenced Libraries
- lib
- rsc
在我们的项目中,我们希望使用文件>导出…>可执行JAR
这很好,但有一些例外:如果我们想运行application.jar,我们仍然需要将文件夹rsc/复制到application.jar所在的位置
在rsc/中,我们有其他文件夹用于分离不同的部分。
基本上,我们使用代码加载片段(虽然有点改动,但路径样式是正确的)
我可以右键单击rsc/>构建路径>用作源文件夹
但这也不起作用,因为eclipse不会自动将rsc文件夹复制到bin/-文件夹中。然后我们就不能再从终端运行它了(不打包到jar中)
编辑:为什么eclipse无法正确处理此问题?为什么“嵌套”输出文件夹会出现问题?在“生成路径”对话框的“源”选项卡中,我可以轻松添加rsc/-文件夹,并将输出文件夹设置为bin/rsc/,但它似乎无法放置嵌套文件夹
编辑2:现在我已经能够创建一个xml文件来使用ant构建内容,并且设法将rsc文件夹直接包含到jar中。由于相同的错误,仍然无法运行。我真的需要检查资源路径是否在JAR中吗?JAR的内容现在如下所示:
META-INF/
META-INF/MANIFEST.MF
configurator/
controller/
editor/
gui/
logic/
networking/
rsc/
rsc/gamesettings/
rsc/levels/
rsc/pics/
rsc/properties/
util/
但是Java仍然讨厌我,抛出Java.io.FileNotFoundException:rsc/properties/Constants.properties
,堆栈跟踪大约100行
有人知道怎么做吗?thx&ADVICES对于这种用法,我建议使用,它在创建jar时会自动这样做。甚至还有
您也可以使用。您可以尝试:在Java构建路径对话框中,转到库选项卡并选择“添加类文件夹…”。从类文件夹选择对话框中选择
rsc
。rsc
目录的内容现在将包含在可执行jar文件中
(请注意,不会包括rsc本身,因此您可能必须在rsc下添加一个新的子目录,以使jar中的目录结构正确。)在您的情况下,我通常手动执行此操作 jar-uf foo.jar rsc 这包括你所有的资源。
您可以在ant中编写脚本或执行此操作,正如您在编辑2中所说,您在一个jar中拥有所有内容,这应该可以工作:
String path = "rsc/img/img.gif";
URL url = this.getClass().getResource(path);
ImageIcon icon = new ImageIcon(url);
如果将
rsc
标记为源文件夹,Eclipse将把它的内容复制到输出目录。或者,如果要对输出中的资源进行分组,可以将rsc
移动到src
下
然后,您可以使用Class.getResource(“/properties/Constants.properties”)
或Class.getResource(“/rsc/properties/Constants.properties”)
,无论您的应用程序是打包为jar还是从源代码运行,它都可以工作
作为旁注,
文件:
协议仅适用于普通文件,要访问jar中的文件,您必须使用类似于新URL(“jar:file:app.jar!/rsc/properties/Constants.properties”)
thx的内容作为响应。嗯,是的,那会有用的。但问题是,我无法将这些对象移动到rsc/rsc/中,因为本地运行(不创建jar文件)将不再工作……thx,我知道存在这种工具。但是我对它们没有任何经验,我的观点是,如果eclipse提供了一个工具来创建可执行的jar,我想应该可以简单地向jar添加另一个文件夹而不修改它。谢谢您的回复。我必须说,“this.getClass()”位于src/util/中,我将尝试使用它。这是解决方案,但在eclipse中将rsc/as标记为src文件夹并不起作用。另一个学生引导我找到了同样的解决方案。问题是我们必须使用Class.getResource(“…”),路径前面有一个/
。thx和Regardsorry,你所说的类#getResource()
是什么意思?类中没有此类静态方法。@m0skit0该方法不是静态的,很抱歉造成混淆。@Dan Berindei您能回答我的问题吗@Talib有一个非静态方法getResource(String)
String path = "rsc/img/img.gif";
URL url = this.getClass().getResource(path);
ImageIcon icon = new ImageIcon(url);