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

时间:2010-01-15 16:46:12

标签: eclipse ant executable-jar java-6

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

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

在我们的项目中,我们想使用File>导出...>可执行的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 / -folder中。然后我们不能再从终端运行它(没有打包到jar)

编辑:为什么eclipse无法正确处理?为什么“嵌套”输出文件夹有问题?在Build Path对话框的Source-tab中,我可以轻松添加rsc / -folder,输出文件夹设置为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仍然讨厌我,并且使用大约100行的堆栈跟踪抛出java.io.FileNotFoundException: rsc/properties/Constants.properties


任何人都知道如何做到这一点? thx&问候

5 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:4)

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

(请注意,rsc本身不会被包含在内,所以你可能需要在rsc下添加一个新的子目录来使jar中的目录结构正确。)

答案 2 :(得分:2)

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

您也可以使用Ant

答案 3 :(得分:1)

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

中执行此操作

答案 4 :(得分:1)

正如你在编辑2 中所说,你在一个罐子里都有这个,这应该有效:

String path = "rsc/img/img.gif";
URL url = this.getClass().getResource(path);
ImageIcon icon = new ImageIcon(url);