Resources 使用前导斜杠从类加载器获取资源
我试图通过反射访问第三方jar的外部方法 1) 我通过系统类加载器的“addUrl”方法将外部jar添加到类路径中 2) 我检索类类型和方法,然后调用该方法,它就可以正常工作了 我反编译外部jar的一部分:Resources 使用前导斜杠从类加载器获取资源,resources,classloader,Resources,Classloader,我试图通过反射访问第三方jar的外部方法 1) 我通过系统类加载器的“addUrl”方法将外部jar添加到类路径中 2) 我检索类类型和方法,然后调用该方法,它就可以正常工作了 我反编译外部jar的一部分: public class Deploy { ... public static Deploy init() { InputStream i = Deploy.class .getClassLoader() .getRe
public class Deploy
{
...
public static Deploy init()
{
InputStream i = Deploy.class
.getClassLoader()
.getResourceAsStream(
"/com/example/props");
}
}
使用第三部分组件,这个调用可以工作,因为它可以正确读取“props”文件。
但在我的代码中,它返回null,intead of:
“/com/example/props”
我试过:
“com/example/props”
没有斜线,它就可以工作
如何使代码在我的应用程序中工作?有解决办法吗?(我不得不通过反思来称呼它)
谢谢
的确,
URLClassLoader.getResource
在JavaSE中不应该有一个前导的/
,但是我发现一个前导的/
在JavaEE中起作用。但我不知道为什么。也许是实现中的一个bug,也许只是对基于目录的类路径比较宽容。即使它可以工作,我也不会依赖于它,因为即使对类加载器资源没有具体的要求,也有一些已经建立的约定。我检查了Tomcat的源代码,发现它在其WebappClassLoader
中覆盖了JDK的classloader
逻辑。