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

正在 Spring Boot 中开发应用程序。我在 src/main/java 中有两个包1. com.project.test2. 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加载资源



慕工程0101907
浏览 130回答 2
2回答

幕布斯7119047

引用相关的Java文档(重点是我的):资源名称类使用的资源名称的通用约定是使用类包的完全限定名称,但将所有句点 ( ) 转换为斜杠 ( ),并添加.形式/的资源名称name.extension。getClassLoader为了支持这一点,并简化处理系统类(返回)的细节null,该类Class提供了两个方便的方法来调用ClassLoader.赋予类方法的资源名称可能有一个初始的开始“/”,将其标识为“绝对”名称。不以“/”开头的资源名称是“相对的”。绝对名称从它们的起始“/”中剥离,并在不做任何进一步修改的情况下传递给适当的 ClassLoader 方法以定位资源。相对名称根据前面描述的约定进行修改,然后传递给 ClassLoader 方法。

BIG阳

您需要进入wsdl/test.wsdl内部src/main/resources才能加载资源。当您打包时app.jar,wsdl/test.wsdl进入 jar 文件内的根路径,因此.getClassLoader().getResource("wsdl/test.wsdl")按预期工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java