添加一个属性文件到IntelliJ的类path

我使用Run-> Run菜单从IntelliJ IDE运行一个简单的Java程序。 它工作正常。 现在我想添加log4j日志logging。

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

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

用IntelliJ 8,我可以猜得像醉猴子,并最终得到它的工作。 我现在有9个,而我完全没有成功。 我一直在尝试一个小时。 如何在某个地方的“添加到类path”选项? /烟/发泄/咆哮

尝试这个:

  • 转到项目结构。
  • select你的模块。
  • find右侧树中的文件夹并select它。
  • 单击该树上方的源button(使用蓝色文件夹)将该文件夹设置为源文件夹。

实际上,至less有两种方法可以实现,第一种方法是由ColinD描述,您只需在IDEA中将“resources”文件夹configuration为Sources文件夹即可。 如果资源模式包含资源的扩展名,那么当您创build项目并且输出目录自动成为应用程序的类path时,它将被复制到输出目录。

另一个常见的方法是直接将“resources”文件夹添加到类path中。 转到项目结构| 模块| 你的模块| 依赖项 ,单击添加单项模块库 ,指定“资源”文件夹的path。

另一个解决scheme是将log4j.properties文件直接放在项目的源代码根目录下(在默认的软件包目录中)。 除了不需要在模块path设置中添加另一个源根外,它与第一种方式相同,该文件将被复制到Make上的输出目录中。

如果要使用不同的log4jconfiguration进行testing,则可以更容易地在运行/debuggingconfiguration中直接指定自定义configuration文件, VM参数的存档方式如下:

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

我有同样的问题,它非常惹恼我!

我一直认为我是作为答案2来做的。曾经在Intellij 9(现在使用10)工作。

但是我想通过添加这些行到我的maven pom文件可以帮助:

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

我在Intellij 13x上花了相当多的时间去思考如何做到这一点。 我显然从未将属性文件添加到需要它们的工件中,这是Intellij中的一个单独步骤。 下面的设置也适用于有多个模块共享的属性文件。

  • 转到您的项目设置(CTRL + ALT + SHIFT + S)
  • 在列表中,select要添加一个或多个属性文件的模块。
  • 在右侧,select依赖关系选项卡。
  • 点击绿色加号并select“jar子或目录”。
  • 现在select包含属性文件的文件夹。 (我还没有尝试包括一个单独的文件)
  • Intellij现在会问你所选文件的“类别”是什么。 select“class级”(即使他们不是)。
  • 现在,您必须将属性文件添加到工件。 Intellij会给你下面的快捷方式。 它将在底部的红色部分显示错误,并显示一个“红色灯泡”,单击时显示一个选项将文件添加到工件。 您也可以转到“工件”部分,并手动将文件添加到工件。

在这里输入图像描述

面临类似的挑战,添加.ini扩展名的文件到类path。 find这个答案 ,即将其添加到首选项 – >编译器 – >资源模式 – > […]; *。ini

对于那些从Eclipse迁移到IntelliJ的人或者其他方式,在处理属性文件或其他资源文件时是一个提示。

它令人生气(花了我整整一晚的时间才发现),但是当你想要从IDE本地运行或在debugging过程中查找资源/资产文件时,IDE的工作方式会有很大的不同。 (打包成一个.jar也是很不一样的,但是那个更好。)

假设你的代码中有这样的相对path引用:

 new FileInputStream("xxxx.properties"); 

(如果您使用env特定的.properties文件(这些文件您不希望与您的JAR一起打包)

的IntelliJ

(我使用13.1,但可能对更多版本有效)

文件xxxx.properties需要位于ROOT项目的PARENT目录中,以便在IntelliJ中像这样在运行时被拾取。 (项目ROOT是/ src文件夹所在的地方)

当xxxx.properties文件位于项目ROOT本身时,Eclipse才会很开心。

所以IntelliJ期望.properties文件比Eclipse更高一级。

当您在导出的.jar中有相同的代码行(新的FileInputStream(“xxxx.properties”);)时,这也会影响您执行代码的方式。 当你想变得敏捷,不想打包.properties文件,你必须执行下面的jar,以便从命令行正确引用.properties文件:

INTELLIJ出口JAR

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

ECLIPSE出口JAR

 java -jar some.jar 

Eclipse导出的可执行文件的jar文件只是希望被引用的.properties文件位于.jar文件所在的位置

如果您最终遇到与Scala和SBT相同的问题:

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

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

  • 在右边的模块列表中,select您的项目名称的模块(没有构build),然后select来源选项卡

  • 在中间,展开我的项目根目录/home/<username>/IdeaProjects/<projectName>

  • 看看右侧的Content Root部分,红色的path是你没有做的目录。 您将要将属性文件放在资源目录中。 所以我创build了src/main/resources并把log4j.properties放在里面。 我相信你也可以修改内容根,把它放在任何你想要的地方(我没有这样做)。

  • 我用SBTconfiguration运行我的代码,发现我的log4j.properties文件。

在这里输入图像描述

也许这有点偏离主题,因为这个问题已经被回答了,但是我也遇到过类似的问题。 在我的情况下,只有一些unit testing资源在编译时被复制到输出文件夹。 我的META-INF文件夹中的persistence.xml被复制, 但没有别的

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

我有一个unit testinglog4j.xml文件类似的问题,做了以上所有。 但是发现这是因为我只是重新运行一个失败的testing….如果我重新运行整个testing类,正确的文件被拿起。 这是在Intelli-j 9.0.4下