Maven 2 如何使用Maven 2使部署的资源可编辑?

Maven 2 如何使用Maven 2使部署的资源可编辑?,maven-2,resources,Maven 2,Resources,我有一个项目,我在其中创建了一个JAR,其中包含一组带有main()的类,以及一组设置环境以调用它们的脚本。其中大多数是长时间运行的进程,日志记录量很大(~10-20GB) 这意味着我有一个非常复杂的log4j.xml文件,它位于src/main/resources/中,进入JAR。当生产系统中出现故障时,我想动态修改日志记录,只进行一次运行 所以我想到了在产品上有一个conf/目录,并首先将其放入类路径中。然后,我想如果M2将配置文件放在那里(而不是JAR),那就太好了。但这将覆盖我非常不喜欢

我有一个项目,我在其中创建了一个JAR,其中包含一组带有
main()
的类,以及一组设置环境以调用它们的脚本。其中大多数是长时间运行的进程,日志记录量很大(~10-20GB)

这意味着我有一个非常复杂的
log4j.xml
文件,它位于
src/main/resources/
中,进入JAR。当生产系统中出现故障时,我想动态修改日志记录,只进行一次运行

所以我想到了在产品上有一个
conf/
目录,并首先将其放入类路径中。然后,我想如果M2将配置文件放在那里(而不是JAR),那就太好了。但这将覆盖我非常不喜欢的自动部署过程中的任何手动更改。我也不喜欢时间戳之类的东西

因此,我的下一个想法是:M2应该将配置文件留在JAR中,但在
conf/
目录中创建名为
*.tpl
的文件副本。然后管理员可以将模板复制到basename以覆盖JAR中的文件
.tpl
-文件将被覆盖,但不会造成伤害。管理员可以完全控制哪个版本的日志处于活动状态,他们可以运行diff来查看是否进行了任何重要更改


现在的问题是:有没有人看到一个插件可以自动完成这个过程?这是创建一个<代码> CONF/<代码>目录,在代码> > SRC/main /Reals/< /Cord>中重命名所有的或一个选定的子集,并且重命名文件。

我可能丢失了一些东西,这并不能直接回答问题,但是您是否考虑过生成所需工件的爆炸内容的zip组件?(要在目标环境上解压)?

听起来像是以错误的方式解决了问题。为什么不直接使用
-Dlog4j.configuration=/some/where/my-log4j.properties运行应用程序呢?
?如果需要,可以向直接调用
  • Maven处理配置文件的最佳实践是将它们放在单独的conf目录中,并使用assembly插件将它们打包到二进制程序集中。将配置文件(如log4j.xml)放在src/main/resources中没有意义,因为它不是真正的应用程序资源,而更像是一个配置文件

  • 我们通过使用posfix.def打包配置文件来处理覆盖。例如:myapp.properties作为myapp.properties.def打包到程序集中。当使用程序集的人解包时,它不会覆盖其原始文件。解包后,他只需通过外部工具将其合并(我们在Fedora Core中使用)


  • 我可以这样做,但这会让管理员淹没在一大堆文件中。我更喜欢只包含少量文件的文件,这样在部署后更改某些内容才有意义。此外,此解决方案将覆盖任何后续部署中的手动更改。因为我还生成启动脚本,所以此更改将也会被覆盖。我正在寻找一些不会妨碍自动部署的东西。但是你不能在启动脚本中允许这样做吗?这仍然不能为他们提供一个配置文件模板,当他们需要进行更改时可以开始。他们必须解包JAR,找到文件,复制它们。我不喜欢:/Sounds很有趣。当文件不在类路径上时,如何让log4j拾取该文件?例如,当您在IDE中运行应用程序时?通常,您有专门用于测试目的的log4j.xml文件。如果您想在测试中使用conf文件,那么您应该在maven中将conf目录定义为资源目录,并在构建ja时将其排除r、 但我认为,位于src/test/resources中的特定log4j.xml更好