在IntelliJ for Maven项目中添加资源
我有这样的项目结构:
src |-main |-java |-com.abc.xyz |-Login.java
我必须向此添加资源文件并使用以下方式读取资源
nputStream is = getClass().getResourceAsStream("launchers.properties");
这是空的。
在intellij中,我无法在src / main下为resources
文件夹添加新包,以便项目结构如下所示。 我怎样才能将launchers.properties
资源文件导入到项目中?
src |-main |-java |-com.abc.xyz |-Login.java |-resources |-com.abc.xyz |-Login |-launcher.properties
我尝试了@maba建议的解决方案,但仍然无法正常工作
launcher.properties
不应位于名为Login
的文件夹下。 它应该直接放在src/main/resources/com/abc/xyz
文件夹中。
这真的很简单,但如果资源文件夹没有标记为源文件夹,那么这可能就是问题所在。
这是初始类和设置:
现在创建资源文件夹:
这个新创建的文件夹应该自动标记为源文件夹,如果是蓝色标记,那么它就是。 否则你必须手动标记它:
现在,您将能够向其添加包:
现在您可以将文件添加到它:
并且重新运行应用程序将不会返回任何null
值:
包视图肯定会显示launchers.properties
文件:
正如@maba指出的那样,您的属性文件应该与您的类在同一个包中,以便您的代码可以工作。
所以,你应该有两个文件:
- 的src / main / JAVA / COM / ABC / XYZ / Login.java
- SRC /主/资源/ COM / ABC / XYZ / launcher.properties
如果IntelliJ显示资源与否,则问题旁边。 您需要做的是检查结果是否包含在目标人工制品中。
在IntelliJ中进行build all
,使用您喜欢的ZIP查看器打开生成的WAR / JAR / EAR,然后浏览到“com / abc / xyz”文件夹。 你应该在那里看到两个文件。
- 如果是,您在代码中做错了。 检查拼写错误,特别是结尾或开头的点和空格(例如“launcher.properties [space]”),复制/粘贴文件名以确保
- 如果它们不存在,则IntelliJ设置错误。 资源不会包含在您的目标构建中。 使用IntelliJ创意在线查看如何执行此操作的教程 。
不……结构是错误的….你不应该在resources
下创建相同的包,这是丑陋的,不恰当的: resources
是资源,不应该包含源包。
使用ClassLoader.getResources(asStream)(path)
方法时,该方法只是从类路径的根开始搜索,路径名不能以/
作为前导字符开头。 您需要做的是将resources
标记为IntelliJ中的resources folder
。 然后resources
下的文件将列在classpath下,您可以像使用它一样轻松地使用它们。
(我在之前的答案中看到这个选项在2013年还没有,你只有mark as source folder
,就像在Eclipse中一样,我们有“添加源文件夹”,但是现在2018年它可以在Intellij中使用:你可以标记一个文件夹作为源,资源,测试源,测试资源,所有这些都将添加到类路径的根目录。)