将配置文件放在JAR中可以吗?

时间:2011-01-31 15:47:52

标签: java architecture deployment jar

我们正在办公室围绕JAR文件中可以和不可以进行的讨论。有人建议将任何不是.class文件的内容放入JAR中是很糟糕的。我们目前有一些Ibatis / etc的XML配置,一些属性文件......通常。但是,需要从JAR中提取所有此类文件并将它们放到每个部署机器的本地文件系统中。这听起来合理吗?

6 个答案:

答案 0 :(得分:14)

  

拥有任何东西都是糟糕的形式   不是.class文件进入JAR

这是胡说八道。事实上,将代码使用的图标和其他数据文件等资源与代码一起放入JAR非常良好形式。这就是getResource()getResourceAsStream()的{​​{1}}和Class方法的用途,与手动处理资源路径相比,它可以提供更强大的应用程序。

但是,配置文件可能是另一回事。如果要在部署期间或之后更改它们,那么将它们放在JAR文件中是相当不方便的,并且将它们放在单独的目录中是可取的。

答案 1 :(得分:4)

如果在JAR内的配置文件中进行更改(即使不更改任何Java代码行),则需要重建和重新部署整个JAR。这听起来合理吗?

答案 2 :(得分:4)

将非类文件放在JAR文件中是绝对可以的,尤其是应用程序需要的资源(图像,本地化字符串等)。了解这一点,您必须确定适合您情况的场景:

  • 如果配置已修复且仅在部署新JAR文件时更改,请将其放入JAR中。
  • 如果必须手动或通过应用程序更改配置,请将其存储在文件系统上。

如果您选择后者,请注意,最好在JAR文件中包含默认配置,以便在缺少外部配置文件时处理该情况。默认值可以直接从JAR加载或复制到文件系统,以成为新的可编辑配置。

答案 3 :(得分:3)

这对我来说听起来不合理。我相信,某些应用程序的配置应该在jar文件中。诸如ORM映射,spring配置,自定义spring命名空间XSD,其他XSD等等应该在jar中大多数情况下。它是部署工件的重要组成部分。

事实上,它不是class文件,并不意味着它应该从jar中取出,因为它理论上可以在不构建新jar的情况下进行修改。你能想象在生产中修改* .hbm.xml吗?对我而言,它听起来很强烈。

我认为一些配置,比如spring xml,在大多数情况下是为了更好地组织你的应用程序和依赖项,而不是在生产中在运行时更改它们。

答案 4 :(得分:2)

您是否希望在没有新版本代码的情况下更改它们?然后你需要提取它们。

如果问题的答案不是你不应该提取它们,因为这样可以让支持人员在不经过发布过程的情况下修补它们。 (当然,如果它们在JAR中,但稍微不那么诱人,这也是可能的。)

更新但是,由于您提到了多个部署计算机,因此还有第三个选项:提取它们并将它们放在网络驱动器上的常用区域中。在多台机器上复制的手动可编辑配置文件(但应该相同)因不同步而臭名昭着。

答案 5 :(得分:0)

部署应用程序后,实际上不应该修改ORM工具(例如Hibernate或IBatis)。所以,不,我会说这对那种文件没有意义。

根据您的要求,可以将应用程序范围的配置文件放在Jar / War之外,以便可以在不重建jar的情况下修改它们。 请记住,修改生产中的应用程序参数是一种不好的做法。应该在一些预生产环境中首先测试变更。