我有一个像这样的项目结构:
src
|-main
|-java
|-com.abc.xyz
|-Login.java
我必须向此添加资源文件并使用
读取资源InputStream 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建议的解决方案,但仍然无法正常工作
答案 0 :(得分:59)
launcher.properties
不应位于名为Login
的文件夹下。它应该直接放在src/main/resources/com/abc/xyz
文件夹中。
这真的很简单,但如果资源文件夹没有标记为源文件夹,那么这可能就是问题所在。
这是初始课程和设置:
现在创建资源文件夹:
这个新创建的文件夹应该自动标记为源文件夹,如果是蓝色标记,那么它就是。否则你必须手动标记它:
现在您可以向其添加包:
现在您可以将文件添加到其中:
重新运行该应用程序不会给您任何null
值:
包视图肯定会显示launchers.properties
文件:
答案 1 :(得分:3)
正如@maba指出的那样,您的属性文件应与您的类位于同一个包中,以便您的代码能够正常工作。
所以,你应该有两个文件:
如果IntelliJ显示资源与否,则问题旁边。您需要做的是检查结果是否包含在目标人工制品中。
在IntelliJ中执行build all
,使用您喜欢的ZIP查看器打开生成的WAR / JAR / EAR,然后浏览到“com / abc / xyz”文件夹。你应该在那里看到两个文件。
答案 2 :(得分:0)
否.....结构错误。...您不应该在resources
下创建相同的包,这很丑陋且不合适:resources
用于资源,不应包含源程序包。
使用ClassLoader.getResources(asStream)(path)
方法时,该方法仅从类路径的根开始搜索,并且路径名不能以/
作为开头字符。您要做的是在IntelliJ中将resources
标记为resources folder
。然后resources
下的文件将列在classpath下,您可以像完成操作一样轻松地使用它们。
(我在先前的回答中看到此选项在2013年尚不可用,您只有mark as source folder
,就像在Eclipse中一样,到现在为止我们已经有了“添加源文件夹”,但是现在在Intellij中到2018年为止:您可以将文件夹标记为源,资源,测试源,测试资源,所有这些都将添加到classpath的根目录中。)
答案 3 :(得分:0)
我遇到了同样的问题,并且注意到资源文件(例如:my.properties
)在生成后没有复制到target
目录中的相应模块文件夹中。为了解决这个问题,我必须指示Maven在构建过程中将资源从模块目录复制到target
目录。在.pom
文件中,我添加了<resource>
这样的元素:
<project ...>
...
<build>
...
<resource>
<directory>src/main/java/com/abc/xyz</directory>
<targetPath>com/abc/xyz</targetPath>
</resource>
</build>
...
</project>
请注意,<directory>
元素是相对于.pom
文件(即项目的根目录)的位置的,而<targetPath>
元素则表示软件包名称,用斜杠分隔。
答案 4 :(得分:0)
从菜单运行/编辑配置 在VM选项中,您应该添加 -Dspring.config.location =路径文件
我已经在IntelliJ中尝试过了,而且有效!
答案 5 :(得分:0)
遵循这两个步骤
1)创建目录
右键单击==>新建==>目录
2)将目录标记为资源根
右键单击Direcory ==>将目录标记为==>资源根目录
答案 6 :(得分:0)
只有解决方案对我有用:
文件->项目结构->模块->依赖项选项卡-> +签名-> JAR或目录->选择资源目录->类