在 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.propertiesIntelliJ 是否显示资源不在问题之列。您需要做的是检查结果是否包含在您的目标工件中。
在 IntelliJ 中执行build all
,使用您最喜欢的 ZIP 查看器打开生成的 WAR/JAR/EAR,然后浏览到“com/abc/xyz”文件夹。您应该在那里看到这两个文件。
【讨论】:
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>
注意<directory>
元素是相对于.pom
文件的位置,即项目的根目录,<targetPath>
元素表示包名,用斜杠隔开。
【讨论】:
谢谢,对我来说我不需要从菜单运行/编辑配置 在 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 IntelliJ IDEA 15 创建maven项目