如何正确地将资源打包到Jar文件中

18
我知道有其他问题也在解决这个问题,但是那些解决方案对我并不适用。 我有一个小工具,它应该读取我想要作为资源打包的文件,并依赖于其他项目(我正在使用Eclipse Helios),我希望这些依赖能够作为JAR文件而不是单个类。 作为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 下。我使用“导出-可运行的 JAR”选项,但是我做错了什么?如果我尝试使用“导出-JAR”选项,我可以正确地打包我的源代码和资源文件,但我在设置主类方面遇到问题,无法执行 JAR 文件。清单是正确的,类也在那里 :-( 第二个问题:在打包的 JAR 文件中,我收到错误消息:URI 不是分层结构(手动将资源移动到 jar 文件中后,我可以执行该 jar)。非常感谢!我将源代码链接到了工作区,这会有问题吗?
1个回答

19

将项目根目录下的resource文件夹标记为Eclipse中的“源文件夹”(右键单击文件夹,进入“构建路径” > “用作源文件夹”)。然后按照以下方式读取资源:

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

如果我这样做,资源将被打包而不是直接放在根目录下的“资源”文件夹中。 - UMY
你是对的。我已经相应地更改了代码,从资源路径中删除了“resources”。如果您想在您的jar包中创建一个名为“resources”的目录,则需要创建此文件夹层次结构:<root>/resources/resources,并将<root>/resources添加到eclipse源路径中,如上所述。还要在代码中将“resources”添加回资源路径。 - Abhinav Sarkar
这是一个非常简单的事情,但是如果没有 Stack Overflow 和你惊人的答案,我会在这个问题上摸索很多小时... 谢谢!!! - Chris Cirefice
运行得非常顺利 :) - Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接