Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse:导出到.jar并包含资源文件(ANT)_Eclipse_Ant_Executable Jar_Java 6 - Fatal编程技术网

Eclipse:导出到.jar并包含资源文件(ANT)

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/中,我们有其他文件夹用于分离不同的部

我们在eclipse中的项目大致显示了以下文件夹:

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);