向 IntelliJ 的类路径添加一个属性文件

我使用 Run-> Run 菜单从 IntelliJ IDE 运行一个简单的 Java 程序。很好用。现在我要添加 log4j 日志记录。

我在项目根目录下添加了一个资源文件夹。 我在该文件夹中添加了一个 log4j.properties 文件。 我改了代码来记录一些东西。

告诉 IntelliJ 在类路径中包含资源文件夹以便查看属性文件的正确方法是什么?

有了 IntelliJ8,我可以像一只喝醉的猴子一样猜测,并最终让它工作。我现在有9个,我完全失败了。我已经试了一个小时了。在某个地方设置“添加到类路径”选项怎么样?/烟雾/发泄/咆哮

206512 次浏览

试试这个:

  • 进入项目结构。
  • 选择您的模块。
  • 找到右边树中的文件夹并选择它。
  • 单击该树上方的“源”按钮(带有蓝色文件夹) ,使该文件夹成为“源”文件夹。

实际上,您至少有两种方法可以做到这一点,第一种方法是 ColinD 描述的,您只需在 IDEA 中将“ resources”文件夹配置为 Source 文件夹即可。如果 资源模式包含资源的扩展名,那么当您 制造时,它将被复制到输出目录,并且输出目录将自动成为应用程序的类路径。

另一种常见的方法是将“ resources”文件夹直接添加到类路径。转到 项目结构 | 模块 | 模块 | 依赖项,单击 单入口模块库,指定“ resources”文件夹的路径。

另一种解决方案是将 Log4j.properties文件直接放在项目的 Source 根目录下(默认包目录中)。它与第一种方法相同,只是不需要在模块 路径设置中添加另一个 Source 根目录,文件将被复制到 Make 上的输出目录。

如果您想测试不同的 log4j 配置,那么直接在 运行/调试配置VM 参数文件中指定一个自定义配置文件可能更容易,比如:

-Dlog4j.configuration=file:/c:/log4j.properties.

我也有同样的问题,这让我非常恼火! !

我一直认为我应该做的答案2。这在 Intellij 9中曾经可以使用(现在使用10)。

然而,我发现将这些行添加到我的 maven pom 文件中会有所帮助:

<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
...
</build>

我在单元测试的 log4j.xml 文件中遇到过类似的问题,我完成了以上所有工作。但是我发现这是因为我只是重新运行了一个失败的测试... ... 如果我重新运行了整个测试类,正确的文件就会被提取出来。这是智力 -j9.0.4

在添加文件时遇到了类似的挑战。对类路径的 ini 扩展。找到了答案,将其添加到 Preferences-> Compiler-> Resource pattern-> [ ... ] ; * 。爱妮

也许这有点跑题了,因为这个问题已经得到了回答,但是我也遇到过类似的问题。在我的例子中,在编译时只有单元测试资源的 一些被复制到输出文件夹。我的 XmlMETA-INF文件夹中被复制了 除此之外没别的了

最后,我通过重新命名有问题的文件,重新构建项目,然后将文件名改回原来的文件来“解决”这个问题。不要问我为什么这个工作,但它做到了。我最乐观的猜测是,不知何故,我的 IntelliJ 项目与文件系统有点不同步,重命名操作触发了某种内部“资源重新扫描”。

对于那些从 Eclipse 迁移到 IntelliJ 或其他方式的人来说,这里是使用属性文件或其他资源文件时的一个提示。

它令人抓狂(我花了整整一个晚上才找到) ,但是当您希望从 IDE 本地运行或在调试期间查找资源/属性文件时,这两种 IDE 的工作完全不同。(包装至。Jar 也有很大的不同,但是有更好的文档记录。)

假设您的代码中有这样一个相对路径引用:

new FileInputStream("xxxx.properties");

(如果您使用特定于 env 的。不希望与 JAR 一起打包的属性文件)

INTELLIJ

(我使用的是13.1,但可能适用于更多版本)

Properties 文件需要位于项目 ROOT 的 PARENT 目录中,以便在运行时像 IntelliJ 中这样获取它。(项目 ROOT 是/src 文件夹所在的位置)

日食

当 xxxx.properties 文件位于项目 ROOT 本身时,Eclipse 非常高兴。

所以 IntelliJ 期望. properties 文件在这样引用时比 Eclipse 高1级! !

这也会影响在导出的代码中有相同的代码行(new FileInputStream (“ xxxx.properties”) ;)时执行代码的方式。罐子。 当您想要变得敏捷并且不想打包。属性文件,您必须像下面这样执行 jar,以便引用。从命令行正确地输入 properties 文件:

INTELLIJ 出口罐

java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod

日食出口罐

java -jar some.jar

Eclipse 导出的可执行 jar 只需要引用的。属性文件位于。Jar 文件是

我花了相当多的时间来研究如何在 Intellij 13x 中做到这一点。显然,我从未将属性文件添加到需要它们的工件中,这是 Intellij 的一个独立步骤。当您有一个由多个模块共享的属性文件时,下面的设置也可以工作。

  • 进入项目设置(CTRL + ALT + SHIFT + S)
  • 在列表中,选择要向其中添加一个或多个属性文件的模块。
  • 在右侧,选择 Dependency 选项卡。
  • 单击绿色加号并选择“ Jars or Directory”。
  • 现在选择包含属性文件的文件夹(我还没有尝试包含单个文件)
  • Intellij 现在将询问您所选文件的“类别”是什么。选择“类”(即使它们不是)。
  • 现在必须将属性文件添加到工件中。Intellij 将提供下面所示的快捷方式。它会显示底部红色部分的错误和一个“红色灯泡”,当点击它时,会显示一个选项,将文件添加到工件中。您还可以转到“工件”部分,并手动将文件添加到工件中。

enter image description here

如果你在 Scala 和 SBT 中遇到同样的问题:

  • 转到项目结构。快捷方式是(CTRL + ALT + SHIFT + S)

  • 在最左边的列表中,选择“项目设置”> “模块”

  • 在模块列表的右侧,选择项目名称的模块(不包括生成)并选择 source 选项卡

  • 在中间,为我展开你项目的根目录即 /home/<username>/IdeaProjects/<projectName>的文件夹

  • 看看右边的 ContentRoot 部分,红色的路径是您还没有创建的目录。您需要将属性文件放在 Resources 目录中。所以我创建了 src/main/resources并在其中放入 log4j.properties。我相信您还可以修改 ContentRoot,将其放在任何您想要的位置(我没有这样做)。

  • 我使用 SBT 配置运行代码,它找到了 log4j.properties 文件。

enter image description here

这是我犯过的最愚蠢的错误之一。我花了很多时间来调试这个问题,并且尝试了上面发布的所有回复,但是最后,这是我犯的许多愚蠢的错误之一。

我使用的是 org.apache.logging.log4j.Logger(: fml:) ,而我应该使用的是 org.apache.log4j.Logger

右键单击您的目录并从 Mark 目录中选择 Resources root,如下所示:

enter image description here