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

时间:2011-03-30 18:29:17

标签: java eclipse maven-2 classloader

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

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

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

分别给了我以下输出:

  

$ {workspace_loc} / $ {MY_PROJECT} /目标/测试类/   文件:/ $ {workspace_loc} / $ {MY_PROJECT} /目标/类/

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

  1. 我的理解是否正确?
  2. 如果是这样,它如何找到正在加载的类?
  3. 我该如何解决这个问题?
  4. 更新:我已更改了我的代码,因此我现在使用的不是MyClass.class.getResource(...)MyClass.class.getResourceAsStream(...),而是ClassLoader.getSystemResource(...)ClassLoader.getSystemResourceAsStream(...)。通过这种方式,在日食中一切正常。我只是不知道为什么。有什么暗示吗?

7 个答案:

答案 0 :(得分:9)

对我来说有两种可能的情况:

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

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

答案 1 :(得分:4)

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

enter image description here

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

答案 2 :(得分:2)

试试这个: 运行配置... - > Classpath - >用户条目 - >高级... - >添加文件夹

答案 3 :(得分:1)

您可以尝试使用以下方式加载资源吗?

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

答案 4 :(得分:0)

这可能是有用的信息

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

答案 5 :(得分:0)

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

  1. 启用依赖关系管理。
  2. 更新项目配置
  3. (在Eclipse中)项目 - >建设项目
  4. (在Eclipse中)运行应用程序
  5. 它可能看起来不是,但它更容易,更不令人沮丧。

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

答案 6 :(得分:0)

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