从jar

时间:2017-07-04 03:26:30

标签: java resources package classloader

不要标记为重复!

听我说;我见过的所有解决方案都很好,但我不了解使用以下方法加载资源时类路径的工作原理:

ClassLoader classLoader = getClass().getClassLoader()

我想设置一个资源加载器(名为ResourceLoader),可以从jar包中的 加载。

因此,如果加载程序放在com.spikespaz.engine.loader.ResourceLoader中,我就不想陷入com.spikespaz.engine.loader的相对路径。

我希望能够从com.spikespaz.game.resources.texturescom.spikespaz.game.resources.models加载,而无需将阅读器放在父目录中。

我发现的是:https://stackoverflow.com/a/3862115/2512078

但是根据我的理解,他的答案中的所有选项必须相对于加载它们的类。 (getClass())有没有解决方法,或者我误解了它?

如果我误解了它,有人可以更好地解释一下吗?

任何解决方案都必须与jar包的 exact root 或开发环境的源相关,而且我不需要在该根目录中放置任何内容。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你误解或误读了他的回答https://stackoverflow.com/a/3862115/2512078

普通的类加载器和上下文类加载器都能够使用绝对路径加载资源。

要使用普通的类加载器执行此操作,请确保资源路径前面有一个前导/,否则它会加载相对于加载它的类的包的资源。

this.getClass().getResource("/foo/bar.txt")` 

上下文类加载器永远不会相对于类加载资源,路径总是被解释为绝对路径。

Thread.currentThread().getContextClassLoader().getResource("foo/bar.txt")

注意:不要在上下文类加载器中使用前导斜杠。