几个小时后我放弃调试以下内容:
这有效:
URL[] urls = ((URLClassLoader) MyClass.class.getClassLoader()).getURLs();
URL myURL = null;
for (URL url : urls) {
if (url.getPath().endsWith("some.jar")) {
myURL = url;
}
}
System.out.println(myURL);
返回
file:/C:/Users/Me/.m2/repository/path/to/some.jar
但是,以下所有内容都会返回 null
:
MyClass.class.getClassLoader()).getResource("/some.jar");
MyClass.class.getClassLoader()).getResource("some.jar");
MyClass.class.getClassLoader()).getResource("/C:/Users/Me/.m2/repository/path/to/some.jar");
MyClass.class.getClassLoader()).getResource("/path/to/some.jar");
如您所见,如果可能的话,我希望通过不绝对地址来获取用户的 Maven 存储库的 jar。 jar 位于类路径中,如 getURLs()
所示
但是我到底该如何在 getResource() 中解决它才能获取它呢?
感谢任何帮助!
最佳答案
URLClassLoader.getURLs()
返回类路径中目录和 JAR 的 URL。 ClassLoader.getResource(String)
正在类路径内查找资源。因此,除非类路径中的 JAR/目录之一包含 some.jar
,否则预计会失败。
换句话说,如果some.jar
包含pkg/thingy.png
,则getResource("pkg/thingy.png")
会成功的。
另请注意,getResource(String)
返回资源的 URL...您在 myURL
中已有的 URL。
关于java - getResource ("/some.jar") 返回 null,尽管 "some.jar"存在于 getURLs() 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9911686/