如果使用 maven,通常会将 log4j.properties 放在 java 或 resources 下?

当使用传统的 Maven 目录时,我应该将 log4j.properties 文件放在哪里?

154483 次浏览

src/main/resources 是这个的“标准放置”。

更新: 以上回答了这个问题,但并不是最好的解决方案。查看其他的答案和相关的评论... ... 您可能不会使用 jar 来提供您自己的日志属性,而是将它留给客户机(例如 app-server、 stage Environment 等)来配置所需的日志。因此,把它放在 src/test/resources是我的首选解决方案。

注意: 说到将具体的日志配置留给客户机/用户,您应该考虑在应用程序中用 slf4j替换 log4j

一些“数据挖掘”说明 src/main/resources是典型的地方。

谷歌代码搜索测试结果:

  • 4877
  • 215

当把资源文件放在另一个位置不是最好的解决方案时,你可以使用:

<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>

例如,当资源文件(例如 jaxb.properties)与 Java 类一起深入到包的内部时。

用于初始化项目的资源最好放在 Src/main/resources文件夹中。要在构建期间加载这些资源,只需在 maven 项目的 pom.xml 中添加条目作为构建资源

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>

其他. properties 文件也可以保存在这个用于初始化的文件夹中。 如果您希望在资源文件夹的属性文件中包含一些变量,并从配置文件过滤器属性文件中填充它们,过滤器属性文件保存在 src/main/filter 中,设置为 资料,但这是完全不同的用例。现在,你可以无视他们。

这是一个伟大的资源 Maven 资源插件,它是有用的,只是浏览其他部分了。

只要将其放入 src/main/resources中,就可以将其绑定到工件中。例如,如果您的工件是一个 JAR,您将在其中包含 log4j.properties文件,从而失去了使日志记录可配置的初始点。

我通常将它放在 src/main/resources中,并将其设置为输出到目标,如下所示:

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>

此外,为了让 log4j 真正看到它,您必须将输出目录添加到类路径中。 如果您的工件是一个可执行的 JAR,那么您可能使用 maven-Assembly-plugin 来创建它。在这个插件中,您可以通过添加一个 Class-Path清单条目(如下所示)将 JAR 的当前文件夹添加到类路径:

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

现在,log4j.properties 文件就在您的 JAR 文件旁边,可以独立配置。

要直接从 Eclipse 运行应用程序,请在运行配置中将 resources目录添加到类路径: Run->Run Configurations...->Java Application->New选择 Classpath选项卡,选择 Advanced并浏览到 src/resources目录。

如果在 src/main/resources 下找不到 log4j.properties 或 log4j.xml 文件,请使用这个 PropertyConfigurator.configure (“ log4j.xml”) ;

   PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);

将下面的代码从构建标记中的 pom.xml 中的 resources 标记添加到构建标记中。 所以它意味着资源标记必须位于 pom.xml 中的 build 标记内部

<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>