【问题标题】:How to package resources in Jar properlyJar中如何正确打包资源
【发布时间】:2011-11-07 23:24:43
【问题描述】:

我知道还有其他针对同一问题的问题,但问题是这些解决方案对我不起作用。 我有一个小工具,可以读取我想要拥有的文件并将其打包为资源并依赖于其他项目(我使用的是 Eclipse Helios),我希望将其作为 jars 而不是单个类。

作为 Eclipse 中的应用程序,我可以通过

访问我的资源
String path = MyClass.class.getClassLoader().getResource("resources/" + name + ".SOURCE").getPath();
System.out.println(path);
File file = new File(MyClass.class.getClassLoader().getResource("resources/" + name + ".SOURCE").toURI());
defaultSource = readSOURCEFile(file);

当且仅当我将资源文件夹放在输出路径(已编译的源)下时,而不是将其放在我的 src 文件夹中。

当我打包项目时,根文件夹或classes文件夹中的资源根本没有打包。如果我的 src 文件夹中有资源,它会打包在 src/resources 下。

我使用 Export - Runnable Jar,我做错了什么? 如果我尝试使用 Export - Jar,我可以正确打包我的源和资源,但我在设置主类时遇到问题并且无法执行 jar。 Manifest 是正确的,并且类在那里 :-(.

第二个问题:在打包的 jar 中我得到错误:URI 不是分层的(在我手动移动 jar 中的资源后,我可以执行 jar)

提前致谢!

我已将源链接到工作区,这是一个问题吗?

【问题讨论】:

    标签: java eclipse resources jar


    【解决方案1】:

    将项目根文件夹下的resource 文件夹标记为Eclipse 中的“源文件夹”(右键单击该文件夹,转到“构建路径”>“用作源文件夹”)。然后像这样阅读资源:

    InputStream is = MyClass.class.getClassLoader().getResourceAsStream(name + ".SOURCE");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String line = reader.readLine();
    

    【讨论】:

    • 如果我这样做,资源会被打包,而没有直接在根文件夹下的文件夹资源。
    • 你是对的。我相应地更改了代码以从资源路径中删除resources。如果你想在你的 jar 中创建一个名为 resources 的目录,那么创建这个文件夹层次结构:<root>/resources/resources 并将 <root>/resources 添加到 eclipse 源路径中,如上所述。还要在代码的资源路径中加回resources
    • 这是一件如此简单的事情,但如果没有 SO 和你惊人的答案,我会摸索这么多小时...... 谢谢你!!!!
    • 工作就像一个魅力:)
    猜你喜欢
    • 1970-01-01
    • 2020-04-24
    • 2014-07-26
    • 2012-02-23
    • 2018-04-26
    • 2019-06-18
    • 2016-01-29
    • 1970-01-01
    • 2016-03-17
    相关资源
    最近更新 更多