7

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

application
    - src
    - JRE System Library [1.6]
    - Referenced Libraries
    - lib
    - rsc

在我们的项目中,我们想使用 File > Export... > Executable JAR

好吧,除了一些例外:如果我们想运行我们的 application.jar,我们仍然需要将文件夹 rsc/ 复制到与 application.jar 相同的位置。

在 rsc/ 中,我们还有其他用于分隔不同部分的文件夹。基本上,我们使用代码加载片段(稍作改动,但路径样式是正确的)

strUrl = "file:rsc/properties/Constants.properties";
url = new URL(strUrl);
ImageIcon icon = new ImageIcon(url);

我可以右键单击 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 行的堆栈跟踪。


有人知道怎么做吗?谢谢和问候

4

5 回答 5

15

如果您标记rsc为源文件夹,Eclipse 会将其内容复制到输出目录。rsc或者,src如果您想对输出中的资源进行分组,您可以直接下移。

然后,您可以使用Class.getResource("/properties/Constants.properties")or Class.getResource("/rsc/properties/Constants.properties"),无论您的应用程序是打包为 jar 还是从源代码运行,它都可以正常工作。

作为旁注,该file:协议仅适用于普通文件,要访问 jar 中的文件,您必须使用类似new URL("jar:file:app.jar!/rsc/properties/Constants.properties").

于 2010-01-22T10:00:53.040 回答
4

您可以尝试:在 Java Build Path 对话框中,转到 Libraries 选项卡并选择“Add Class Folder...”。rsc从类文件夹选择对话框中选择。目录的内容rsc现在将包含在可执行 jar 文件中。

(注意 rsc 本身不会包含在内,因此您可能必须在 rsc 下添加一个新的子目录才能使 jar 中的目录结构正确。)

于 2010-01-16T01:30:08.240 回答
2

对于这种用途,我建议使用Maven,它会在创建 jar 时自动执行此操作。甚至还有一个 Eclipse 插件

您也可以使用Ant

于 2010-01-15T17:08:07.600 回答
1

我通常手动执行此操作,在您的情况下 jar -uf foo.jar rsc 包含您的所有资源。您可以编写脚本或在 ant 中执行此操作

于 2010-01-18T17:32:05.077 回答
1

正如您在编辑 2中所说的那样,您将所有东西都放在一个罐子里,这应该可行:

String path = "rsc/img/img.gif";
URL url = this.getClass().getResource(path);
ImageIcon icon = new ImageIcon(url);
于 2010-01-19T21:21:46.173 回答