我觉得在使用Maven捆绑JAR文件中的资源时,我遗漏了一些重要的东西。我的目录结构是标准的Maven (即\ src \ main \ java,\ src \ main \ resources)。
使用IDE时,我将资源文件引用为\ main \ resources \ images \ blah ...并且工作正常,但是当Maven捆绑JAR文件时,它会将路径相对于根目录(“\ images \ blah” “),所以没有一条路径是正确的。
我的问题真的是双重的,第一个是我错过了一些明显的东西吗?第二个是处理这个问题的最佳方法是什么?我知道当我去捆绑所有部分进行部署时,我可以替换所有路径,或者在try / catch块中包围所有路径,甚至更改maven输出目录,但我觉得这些都很优雅而且我是遗漏了什么。 提前谢谢。
编辑:我像这样引用资源文件:
getClass().getResource("/main/resources/images/lightboardImage.jpg"));
EDIT2:这显然是一个IDE配置问题,可能源于我使用Maven将旧项目转换为一个项目。我真的不明白它是如何配置错误的。我的文件夹结构是:
的src /主/ JAVA
的src /主/资源
我的类路径有一个“src”<classpathentry kind="src" path="src"/>
如果我右键单击/main/resources/images/
文件夹并将其用作源文件夹,则会将classpathentry转换为此<classpathentry excluding="main/resources/images/" kind="src" path="src"/>
并创建一个新的<classpathentry kind="src" path="src/main/resources/images"/>
。它也不起作用。
答案 0 :(得分:3)
这应该来自IDE和JAR。
getClass().getResource("images/lightboardImage.jpg");
src/main/resources
中的文件已复制到target/classes
。
在运行时期间,所有资源都应该从类路径中显示为images/lightboardImage.jpg
。这适用于我的IDE。如果没有,请将您的IDE配置检查为@juanluisrp。
从我的IDE执行的Java看起来像这样:
java -classpath (...) /home/.../target/classes (...)
因此,运行时类路径配置为target/classes
目录。
答案 1 :(得分:3)
在Maven的生命周期中,资源被复制到target/classes
。组装JAR时target/classes
内容将转到JAR根目录。因此,如果要加载JAR中的资源,可以使用
getClass().getResource("/images/lightboardImage.jpg"));
除非您没有正确配置类路径,否则从IDE应该使用相同的路径。如果您使用Eclipse检查src/main/resources
被标记为源文件夹。
答案 2 :(得分:0)
我认为这里的问题是您需要将IDE设置为指向src/main/resources
作为类路径的一部分。然后,您可以使用getClass().getResource("images\lightboardImage")
在maven和IDE下运行。
例如,在Eclipse中,您可以通过右键单击Project Explorer中的src/main/resources
并单击"Build Path" -> "Use as Source Folder"