为了账号安全,请及时绑定邮箱和手机立即绑定

getResource() 在 Eclipse 中返回 null,而不是在 JAR 文件中

getResource() 在 Eclipse 中返回 null,而不是在 JAR 文件中

慕工程0101907 2023-06-21 13:47:55
正在 Spring Boot 中开发应用程序。我在 src/main/java 中有两个包1. com.project.test和2. wsdl。在第一个包中,我有 Spring Boot 主类。在第二个包中我有test.wsdl文件。我尝试使用下面的代码在主类中加载test.wsdl文件URL wsdl = MainClass.class.getClassLoader().getResource(/wsdl/test.wsdl); system.out.println("wsdl: "+wsdl);它在 Eclipse 中运行时返回 null。将应用程序构建为 jar 并使用java -jar app.jar运行应用程序时。它返回正确的路径。为什么它在 Eclipse 中返回 null。但是当我运行下面没有前缀“/”的代码时,如下所示。它在 Eclipse 和 JAR 中都运行良好URL wsdl = MainClass.class.getClassLoader().getResource(wsdl/test.wsdl); system.out.println("wsdl: "+wsdl);但我的要求是使用路径/wsdl/test.wsdl加载资源
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

引用相关的Java文档(重点是我的):

资源名称

类使用的资源名称的通用约定是使用类包的完全限定名称,但将所有句点 ( ) 转换为斜杠 ( ),并添加.形式/的资源名称name.extensiongetClassLoader为了支持这一点,并简化处理系统类(返回)的细节null,该类Class提供了两个方便的方法来调用ClassLoader.

赋予类方法的资源名称可能有一个初始的开始“/”,将其标识为“绝对”名称。不以“/”开头的资源名称是“相对的”。

绝对名称从它们的起始“/”中剥离,并在不做任何进一步修改的情况下传递给适当的 ClassLoader 方法以定位资源。相对名称根据前面描述的约定进行修改,然后传递给 ClassLoader 方法。

查看完整回答
反对 回复 2023-06-21
?
BIG阳

TA贡献1859条经验 获得超6个赞

您需要进入wsdl/test.wsdl内部src/main/resources才能加载资源。

当您打包时app.jarwsdl/test.wsdl进入 jar 文件内的根路径,因此.getClassLoader().getResource("wsdl/test.wsdl")按预期工作。


查看完整回答
反对 回复 2023-06-21
  • 2 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信