我正在使用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} /目标/类/
检查上面的位置,我可以看到前者是空的,而另一个包含我所有编译的类和资源。所以,我得出结论,类加载器正在错误的地方寻找我的资源。所以,我想我有三个问题:
更新:我已更改了我的代码,因此我现在使用的不是MyClass.class.getResource(...)
或MyClass.class.getResourceAsStream(...)
,而是ClassLoader.getSystemResource(...)
和ClassLoader.getSystemResourceAsStream(...)
。通过这种方式,在日食中一切正常。我只是不知道为什么。有什么暗示吗?
答案 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项目的外观:
将来使用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插件,您可以在其中执行以下操作。
它可能看起来不是,但它更容易,更不令人沮丧。
之前,用eclipse:eclipse。你必须运行它然后点击刷新并希望一切都配置好 - 如果你有一个多模块pom事情真的可能出错。
答案 6 :(得分:0)
对我来说,WEB-INF中的文件没有被包含在内。因此我将它们添加到Buildpath(项目 - >构建路径 - >配置构建路径 - >添加文件夹(project / src / main / webapp)。这解决了这个问题。