在 IntelliJ for Maven 项目中添加资源

Posted

技术标签:

【中文标题】在 IntelliJ for Maven 项目中添加资源【英文标题】:Adding resources in IntelliJ for Maven project 【发布时间】:2013-09-14 01:15:02 【问题描述】:

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

src
 |-main
    |-java
       |-com.abc.xyz
          |-Login.java

我必须在其中添加一个资源文件并使用

读取资源
InputStream is = getClass().getResourceAsStream("launchers.properties");

这是给null。

在 Intellij 中,我无法在 src/main 下为 resources 文件夹添加新包,所以 项目结构看起来像这样。如何将launchers.properties 资源文件加载到项目中?

src
 |-main
    |-java
       |-com.abc.xyz
          |-Login.java
    |-resources
       |-com.abc.xyz
          |-Login
             |-launcher.properties

我尝试了@maba 建议的解决方案,但仍然无法正常工作

【问题讨论】:

你有问题的答案吗? @maba 有一个非常令人满意的答案,它在我的情况下有效。 你需要从 src 开始你的路径。看我的回答here 这是一个构建工具,就像 Maven 为您所做的那样 - JDK 不会自动使资源“可用”AFAIK。 【参考方案1】:

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


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

这是初始类和设置:

现在创建资源文件夹:

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

现在您可以向其中添加包了:

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

并且重新运行应用程序不会返回任何null 值:

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

【讨论】:

谢谢@maba,它不工作。当我将 intellij 的视图更改为 Packages 时,它仍然给出 null 和另一件事,我没有看到 xyz 下的属性文件。我假设该类的属性文件不可用。我认为的问题是无法在resources目录下创建包。 感谢您提供如此精美的插图..我真的很喜欢它....我尝试了您的建议,但没有运气:(我附上了我的 intellij 快照imageshack.us/photo/my-images/96/v6cn.png 不......结构错误......你不应该在资源下创建相同的包,那是丑陋且不正确的:resources 用于资源,不应包含源包。 在资源文件夹下创建一个包对我不起作用。只需在资源文件夹下创建一个属性文件就足够了!【参考方案2】:

正如@maba 指出的那样,您的属性文件应该与您的类在同一个包中,这样您的代码才能正常工作。

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

src/main/java/com/abc/xyz/Login.java src/main/resources/com/abc/xyz/launcher.properties

IntelliJ 是否显示资源不在问题之列。您需要做的是检查结果是否包含在您的目标工件中。

在 IntelliJ 中执行build all,使用您最喜欢的 ZIP 查看器打开生成的 WAR/JAR/EAR,然后浏览到“com/abc/xyz”文件夹。您应该在那里看到这两个文件。

如果是,则说明您的代码有问题。检查拼写错误,尤其是结尾或开头的点和空格(例如“launcher.properties[space]”),复制/粘贴文件名以确保 如果它们不存在,则您的 IntelliJ 设置有误。资源不会包含在您的目标构建中。查看online for tutorials 如何使用 IntelliJ idea 做到这一点。

【讨论】:

launchers.properties 位于类路径中,具有@maba 指向的结构。但仍然在代码中返回 null。它是否与UiAutomator有关,因为我正在创建java项目来运行UiAutomator测试用例。 属性文件添加到项目classes目录。但我没有在 jar 中找到 com/abc/xyz。让我看看为什么。【参考方案3】:

不......结构是错误的......你不应该在resources下创建相同的包,那是丑陋且不正确的:resources是资源包,不应该包含源包。

使用ClassLoader.getResources(asStream)(path)方法时,该方法只是从类路径的根开始搜索,路径名不能以/作为前导字符。您需要做的就是在 IntelliJ 中将 resources 标记为 resources folder。然后resources 下的文件将列在类路径下,您可以像以前一样轻松使用它们。

(我在之前的答案中看到这个选项在 2013 年还不可用,你只有 mark as source folder,就像在 Eclipse 中一样,直到现在我们有“添加源文件夹”,但现在在 2018 年它在 Intellij 中可用:你可以将文件夹标记为源、资源、测试源、测试资源,都将添加到classpath的根目录。)

【讨论】:

【参考方案4】:

我有同样的问题,并注意到资源文件,例如: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>

注意&lt;directory&gt;元素是相对于.pom文件的位置,即项目的根目录,&lt;targetPath&gt;元素表示包名,用斜杠隔开。

【讨论】:

谢谢,对我来说我不需要 ,所以我删除了它,然后它就起作用了!【参考方案5】:

从菜单运行/编辑配置 在 VM 选项中,您应该添加 -Dspring.config.location=路径文件

我已经在 IntelliJ 中尝试过,它可以工作!

【讨论】:

【参考方案6】:

按照这两个步骤进行

1) 创建目录

右键 ==> 新建 ==> 目录

2) 将目录标记为资源根

右键单击目录 ==> 将目录标记为 ==> 资源根

【讨论】:

【参考方案7】:

只有解决方案对我有用:

文件 -> 项目结构 -> 模块 -> 依赖选项卡 -> + 符号 -> JAR 或目录 -> 选择资源目录 -> 类

【讨论】:

以上是关于在 IntelliJ for Maven 项目中添加资源的主要内容,如果未能解决你的问题,请参考以下文章

用maven来创建scala和java项目代码环境(图文详解)(Intellij IDEA(Ultimate版本)Intellij IDEA(Community版本)和Scala IDEA for

未定义步骤参考 InteliJ + Cucumber for Java + Maven 项目

Intellij:在项目中搜索maven依赖的来源

IntelliJ IntelliJ IDEA 15 创建maven项目

如何在Intellij 14中获取Maven项目窗口更新:无法在Maven项目中看到右侧的“标签栏”

IntelliJ IDEA 15 创建maven项目