在Eclipse中运行时加载资源时出现问题

我正在研究一个swing项目,使用maven2(来自命令行)和eclipse(没有maven集成)。 所以,我通过maven eclipse插件mvn eclipse:eclipse )生成eclipse项目,在eclipse中导入它,并完成我的所有工作。

我的问题是:当我在eclipse中运行我的应用程序(作为Java应用程序)时,我找不到我的src目录中的任何资源。 挖掘我的问题的信息,我从另一个问题进入这个答案 。 所以,我比较了以下说明的输出:

 MyClass.class.getResource("/").getPath(); MyClass.class.getProtectionDomain().getCodeSource().getLocation().toString(); 

那些分别给了我以下输出:

$ {workspace_loc} / $ {my_project} / target / test-classes / file:/ $ {workspace_loc} / $ {my_project} / target / classes /

检查上面的位置,我可以看到前者是空的,而另一个包含我所有编译的类和资源。 所以,我得出结论,类加载器正在错误的地方寻找我的资源。 所以,我想我有三个问题:

  1. 我的理解是否正确?
  2. 如果是这样,它如何找到它正在加载的类?
  3. 我该如何解决这个问题?

更新:我已经改变了我的代码,所以我现在使用ClassLoader.getSystemResource(...)ClassLoader.getSystemResourceAsStream(...) ,而不是调用MyClass.class.getResource(...)MyClass.class.getResourceAsStream(...) ClassLoader.getSystemResource(...) ClassLoader.getSystemResourceAsStream(...) 。 通过这种方式,在日食中一切正常。 我只是不知道为什么。 有什么暗示吗?

我有两种可能的情况:

  • 您正在使用eclipse来编译您的项目。 然后将eclipse配置为排除(或不包括)src文件夹中的资源。 您可以在Project / Properties / Java Build Path / Source中设置它。 然后你花费你的src文件夹,并确保你有“包括所有”,“排除无”之类的东西。

  • 即使您使用eclipse作为IDE,也可以使用maven运行maven应用程序来编译而不是eclipse。 然后默认情况下,maven不会将资源从源文件夹复制到输出文件夹…因为它不是标准的maven方式。 因此,类路径中缺少资源,您找不到它们。 只需更改maven配置,也可以包含源文件夹中的资源。

我认为你必须将src/main/resources添加到构建路径。 这在“ Project Properties > Build Path > Source 。 以下是标准maven项目的外观:

在此处输入图像描述

在将来使用Eclipse时,我建议使用m2eclipse插件并使用它创建项目。 这将自动确保所有这些文件夹都在构建路径中。

试试这个:运行配置… – >类路径 – >用户条目 – >高级… – >添加文件夹

你能尝试使用下面的资源加载吗?

 this.getClass().getClassLoader().getResourceAsStream(propertyFileName) 

这可能是有用的信息

Eclipse Maven插件有自己的Classpath Container,在启用时会与生成的类路径冲突。

我建议停止使用eclipse:eclipse(对不起 – 我知道苛刻)。 我用它大约8个月,不能相信它花了我很长时间,并使用M2Eclipse。 M2Eclipse是一个eclipse插件,您可以在其中执行以下操作。

  1. 启用依赖关系管理。
  2. 更新项目配置
  3. (在Eclipse中)项目 – >构建项目
  4. (在Eclipse中)运行应用程序

它可能看起来不是,但它更容易,更不令人沮丧。

以前,用eclipse:eclipse。 你必须运行它然后点击刷新并希望一切都配置好 – 如果你有一个多模块pom事情真的可能出错。

对我来说,WEB-INF中的文件没有被包含在内。 因此我将它们添加到Buildpath(项目 – >构建路径 – >配置构建路径 – >添加文件夹(项目/ src / main / webapp)。这解决了这个问题。