暂时不要标记为重复!
听我说完;我见过的所有解决方案都很好,但我不明白使用以下方式加载资源时类路径如何工作:
ClassLoader classLoader = getClass().getClassLoader()
我想设置一个资源加载器(名为 ResourceLoader
),可以从 jar 包内的任何地方加载。
所以如果加载器放在com.spikespaz.engine.loader.ResourceLoader
中,我不想被困在com.spikespaz.engine.loader的相对路径中
.
我希望能够从 com.spikespaz.game.resources.textures
和 com.spikespaz.game.resources.models
加载,而不需要放置父目录中的阅读器。
我发现的是:https://stackoverflow.com/a/3862115/2512078
但据我了解,他的答案中的所有这些选项必须与加载它们的类相关。 (getClass()
) 有没有办法解决这个问题,或者我误解了它?
如果我误解了,有人可以解释一下吗?
任何解决方案都必须相对于jar包或开发环境源的精确根,而我一定不需要在该根中放置任何东西。
谢谢。
最佳答案
我认为你误解或误读了他的回答https://stackoverflow.com/a/3862115/2512078
普通类加载器和上下文类加载器都能够使用绝对路径加载资源。
要使用普通类加载器执行此操作,请确保资源路径前面有一个前导 /
,否则它将加载相对于加载它的类的包的资源。
this.getClass().getResource("/foo/bar.txt")`
上下文类加载器永远不会加载相对于类的资源,路径始终被解释为绝对路径。
Thread.currentThread().getContextClassLoader().getResource("foo/bar.txt")
注意:不要在上下文类加载器中使用前导斜杠。
关于java - 从 jar 内的绝对路径加载 Java 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896538/