Maven - 从JAR加载资源?

时间:2013-12-10 21:23:55

标签: java eclipse maven

我觉得在使用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"/>。它也不起作用。

编辑3:好的,这真的很蠢,但我刚才意识到问题所在。我实际上并没有将Maven用于本地开发构建。它使用Eclipse内置的Ant配置或其他任何东西。 Maven用于自动部署构建,因此问题。很抱歉浪费每个人的时间。

3 个答案:

答案 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"

来执行此操作。