代码之家  ›  专栏  ›  技术社区  ›  Atmocreations

eclipse:导出到.jar并包含资源文件(ant)

  •  7
  • Atmocreations  · 技术社区  · 15 年前

    Eclipse中的项目大致显示以下文件夹:

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

    在我们的项目中,我们希望使用文件>导出…>可执行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为什么不能正确处理这个问题?为什么“嵌套”输出文件夹有问题?在“生成路径”对话框的“源”选项卡中,我可以轻松添加输出文件夹设置为bin/rsc/的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行的stacktrace。


    有人知道怎么做吗?此致

    5 回复  |  直到 15 年前
        1
  •  15
  •   Dan Berindei    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") .

        2
  •  4
  •   Ash    15 年前

    您可以尝试:在Java构建路径对话框中,转到“库”选项卡并选择“添加类文件夹…”。选择 rsc 从类文件夹选择对话框。的内容 RSC 目录现在将包含在可执行JAR文件中。

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

        3
  •  2
  •   Valentin Rocher    15 年前

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

    你也可以用 Ant .

        4
  •  1
  •   Frank    15 年前

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

        5
  •  1
  •   rodrigoap    15 年前

    正如你所说的 编辑2 如果你把所有的东西都放在一个罐子里,这就可以了:

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