在IntelliJ for Maven项目中添加资源

时间:2013-09-10 10:55:23

标签: java maven intellij-idea

我有一个像这样的项目结构:

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建议的解决方案,但仍然无法正常工作

7 个答案:

答案 0 :(得分:59)

launcher.properties不应位于名为Login的文件夹下。它应该直接放在src/main/resources/com/abc/xyz文件夹中。


这真的很简单,但如果资源文件夹没有标记为源文件夹,那么这可能就是问题所在。

这是初始课程和设置:

enter image description here

现在创建资源文件夹:

enter image description here

enter image description here

这个新创建的文件夹应该自动标记为源文件夹,如果是蓝色标记,那么它就是。否则你必须手动标记它:

enter image description here

现在您可以向其添加包:

enter image description here

enter image description here

现在您可以将文件添加到其中:

enter image description here

enter image description here

重新运行该应用程序不会给您任何null值:

enter image description here

包视图肯定会显示launchers.properties文件:

enter image description here

答案 1 :(得分:3)

正如@maba指出的那样,您的属性文件应与您的类位于同一个包中,以便您的代码能够正常工作。

所以,你应该有两个文件:

  • 的src /主/ 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构思检查online for tutorials如何执行此操作。

答案 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或目录->选择资源目录->类