如何在构建JAR时在项目中包含资源文件(logback.xml),而不是在嵌入WAR时?

时间:2014-07-17 19:42:03

标签: maven logback

我正在开发一个使用两个maven项目的项目(名为corewebapp); core是使用JAR打包构建的,用于两个不同的目的:作为独立的应用程序(本质上是可执行的JAR),也嵌入到webapp中。

作为独立应用程序,core需要有自己的logback配置(logback.xml文件),需要包含在类路径中。普通Maven惯例会让我把它放在src/main/resources/logback.xml中。这工作正常,但core JAR包含在webapp中时会导致问题。 webapp需要有自己的logback配置,但容器(tc Server或Jetty)首先从core.jar获取一个。

我意识到可以在命令行上讲述custom config location via a system property-D)的回溯,但这在Tomcat或Jetty等应用容器中不可行。

我读过一些其他人询问这种情况,但我见过的解决方案都不适合我。 One solution involved setting up a context listener that runs early in the webapp initialization并根据<context-param>显式配置回退。在我看来,这有点野蛮,当log4j在这种情况下“正常工作”时,可能很难卖给我的开发团队。

我离Maven专家很远,所以我希望有一些优雅的方式让Maven在这里帮助我。或者可能是一些logback扩展或附加组件,使其更适合Web应用程序。甚至是一个我没想过的聪明主意。

2 个答案:

答案 0 :(得分:0)

有许多可能的解决方案,但最简单的方法是将文件放在自己的模块中,并按提供的方式标记依赖关系。在运行独立版本的应用程序时,密谋将它放在类路径上。

答案 1 :(得分:0)

我们最终使用的解决方案是只留下常见的&#34;非应用程序&#34; core中的片段(代码和配置),然后提取另一个&#34; app&#34;分成新模块(batch-app)。 日志记录配置仅存在于依赖webapp的2个应用项目(batch-appcore)中。 core中包含logback-test.xml个配置,但是它已从maven构建的JAR中排除(因为它位于src/test/resources文件夹中)。