gpt4 book ai didi

java - 如何以直接从 Eclipse 和可运行 JAR 中工作的方式从/src/main/resources 加载资源?

转载 作者:行者123 更新时间:2023-11-30 07:06:33 25 4
gpt4 key购买 nike

我在 Eclipse 中有一个带有 main() 方法的 Maven 项目。该项目具有使用嵌入式资源的依赖项,即它包含 /src/main/resources 中的文件。我想从项目创建一个可运行的 JAR 文件。问题是 - 取决于我加载嵌入式资源的方式 - 我可以使用 java -jar my.jar 将项目作为可运行的 JAR 运行,或者我可以直接从 Eclipse 运行它,但不是两者都 - 原因是两种情况下这些资源的路径明显不同。

例如,我可以按如下方式加载资源:

// Loads /src/main/resources/script.rb;
// Works when run directly from Eclipse; throws an exception when run as a runnable JAR
InputStream resource = this.getClass().getResourceAsStream("/script.rb");

这样,我就可以直接从 Eclipse 成功运行该项目了。使用 Eclipse 的 Export → Runnable JAR file 创建可运行的 JAR 会将 script.rb 资源放入 JAR 根目录的 resources 文件夹中,这使得当我尝试将其作为 java -jar my.jar 运行时,上面的代码失败。我可以通过更改代码以指向 /resources 文件夹来解决此问题:

// Works when run as 'java -jar my.jar', fails when run from Eclipse.
InputStream resource = this.getClass().getResourceAsStream("/resources/script.rb");

现在,导出的 JAR 文件工作正常,但我无法再直接从 Eclipse 成功地将项目作为 Java 应用程序运行。

我阅读了其他几篇有关加载资源的文章,但到目前为止没有任何帮助。

有没有办法解决这个问题并以在两种情况下都能正常工作的方式加载资源?可能有效的方法是说服 Eclipse 将资源放入 JAR 的根目录中,而不是放在 resources 文件夹中,但我不确定这是否可行。

最佳答案

使用Class.getResourceAsStream(...)将相对于包进行加载。您应该使用 Classloader.getResourceAsStream(...) 从根加载。

例如

InputStream resource = this.getClass().getClassloader().getResourceAsStream("script.rb");

(假设src/main/resources位于ecliplse类路径上)

注意:/ 已被删除!

关于java - 如何以直接从 Eclipse 和可运行 JAR 中工作的方式从/src/main/resources 加载资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40024242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com