【问题标题】:Eclipse: export to .jar AND include resource files (ANT)Eclipse:导出到 .jar 并包含资源文件 (ANT)
【发布时间】:2010-01-15 16:46:11
【问题描述】:

我们在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 行的堆栈跟踪。


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

【问题讨论】:

    标签: eclipse ant executable-jar java-6


    【解决方案1】:

    如果您将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") 的东西。

    【讨论】:

    • 是的。这是解决方案,但是在 Eclipse 中将 rsc/ 标记为 src-folder 并不能完成这项工作。另一个学生让我找到了同样的解决方案。问题是我们必须使用 Class.getResource("..."),该路径以/ 开头。谢谢和问候
    • 抱歉,Class#getResource() 是什么意思? Class 类中没有这样的静态方法。
    • @m0skit0 该方法不是静态的,很抱歉造成混乱。
    • @Dan Berindei 你能回答我的问题吗? stackoverflow.com/questions/38685537/…
    • @Talib 有一个非静态方法getResource(String)
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回复。嗯,是的,那会奏效。但问题是我无法将这些对象移动到 rsc/rsc/ 中,因为本地运行(没有创建 jar 文件)将不再工作......
    【解决方案3】:

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

    您也可以使用Ant。

    【讨论】:

    • thx,我知道这种工具是存在的。但我对它们没有任何经验,我的观点是,如果 eclipse 提供了一个创建可执行 jar 的工具,我想应该可以简单地在 jar 中添加另一个文件夹而不修改它。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      正如您在 Edit 2 中所说,您将所有东西都放在一个罐子里,这应该可以:

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

      【讨论】:

      • 感谢您的回复。不得不说“this.getClass()”位于src/util/ 会试一试
      猜你喜欢
      • 2017-07-31
      • 2014-10-20
      • 2015-07-03
      • 2015-12-17
      • 1970-01-01
      • 2012-02-09
      • 2015-02-01
      • 1970-01-01
      • 2013-09-07
      相关资源
      最近更新 更多