正在 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.extension
。getClassLoader
为了支持这一点,并简化处理系统类(返回)的细节null
,该类Class
提供了两个方便的方法来调用ClassLoader
.赋予类方法的资源名称可能有一个初始的开始“/”,将其标识为“绝对”名称。不以“/”开头的资源名称是“相对的”。
绝对名称从它们的起始“/”中剥离,并在不做任何进一步修改的情况下传递给适当的 ClassLoader 方法以定位资源。相对名称根据前面描述的约定进行修改,然后传递给 ClassLoader 方法。
BIG阳
TA贡献1859条经验 获得超6个赞
您需要进入wsdl/test.wsdl
内部src/main/resources
才能加载资源。
当您打包时app.jar
,wsdl/test.wsdl
进入 jar 文件内的根路径,因此.getClassLoader().getResource("wsdl/test.wsdl")
按预期工作。
添加回答
举报
0/150
提交
取消