我有一种感觉,在使用 Maven 将资源捆绑到 JAR 文件中时,我错过了一些关键的东西。我的目录结构是标准的Maven目录结构 (即\src\main\java、\src\main\resources)。
使用 IDE 时,我将资源文件引用为\main\resources\images\blah...并且工作正常,但是当 Maven 捆绑 JAR 文件时,它会将路径相对于根目录(“\images\blah”) "),所以没有一条路径是正确的。
我的问题实际上有两个,第一个是我是否遗漏了一些明显的东西?第二个问题是处理这个问题的最佳方法是什么?我知道当我打包所有内容进行部署时,我可以替换所有路径,或者将所有路径包围在 try/catch block 中,甚至更改 Maven 输出目录,但我觉得这些很不优雅,我遗漏了什么。 提前致谢。
编辑:我像这样引用资源文件:
getClass().getResource("/main/resources/images/lightboardImage.jpg"));
EDIT2:这显然是一个 IDE 配置问题,可能源于我使用 Maven 将旧项目转换为项目这一事实。我真的不明白它是如何配置错误的。我的文件夹结构是:
src/main/java
src/main/resources
我的类路径有一个“src”条目 <classpathentry kind="src" path="src"/>
如果我右键单击 /main/resources/images/
文件夹并用作源文件夹,它将类路径条目变成此 <classpathentry excluding="main/resources/images/" kind="src" path="src"/>
并创建一个像这样的新的 <classpathentry kind="src" path="src/main/resources/images"/>
。它也不起作用。
EDIT3:好吧,这真的很愚蠢,但我刚刚意识到问题是什么。我实际上并没有使用 Maven 进行本地开发构建。它使用 Eclipse 内置的 Ant 配置或其他配置。 Maven 用于自动部署构建,因此出现了问题。抱歉浪费了大家的时间。
最佳答案
在Maven的生命周期中,资源被复制到target/classes
。组装 JAR 后,target/classes
内容将转到 JAR 根目录。因此,如果您想加载 JAR 中的资源,您可以使用
getClass().getResource("/images/lightboardImage.jpg"));
从 IDE 中,它应该使用相同的路径,除非您没有正确配置类路径。如果您使用的是 Eclipse,请检查 src/main/resources 是否已标记为源文件夹。
关于java - Maven - 从 JAR 加载资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20505562/