java - Maven - 从 JAR 加载资源?

标签 java eclipse maven

我有一种感觉,在使用 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/

相关文章:

eclipse - POM 依赖项不起作用(Eclipse、Maven、POM)

java - 如何使用 maven-jar-plugin 和 groovy 构建可执行 jar?

java - 同一实体上的 JPA 一对一

java - 为什么我的自定义 ArrayAdapter 没有被填充?

eclipse - 在 Eclipse 的透视图中恢复 View 的原始布局

php - PHP Eclipse Internal Browser 通常有 CSS 问题吗?

java - 为什么我会收到此 NoClassDefFoundError?

java - Maven多模块子pom版本

java - jsp文件中这些行表示什么? :

java - 在 Webclient Post 之前检测到空的 Flux 窗口