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

Java 将配置文件放在JAR中可以吗?,java,architecture,deployment,jar,Java,Architecture,Deployment,Jar,我们正在我的办公室就JAR文件中哪些可以和哪些不能进行讨论。有人建议,将任何非.class文件放入JAR中是一种糟糕的形式。我们目前有一些Ibatis/etc的XML配置和一些属性文件。。和往常一样。但是,有一个从jar中提取所有这些文件并将它们放在每个部署机器的本地文件系统中的推送。这听起来合理吗?如果您在JAR内的配置文件中进行了更改(即使没有更改任何一行Java代码),那么整个JAR都需要重建和重新部署。这听起来合理吗?您希望或期望在不发布新代码的情况下更改它们吗?然后你需要提取它们 如果

我们正在我的办公室就JAR文件中哪些可以和哪些不能进行讨论。有人建议,将任何非.class文件放入JAR中是一种糟糕的形式。我们目前有一些Ibatis/etc的XML配置和一些属性文件。。和往常一样。但是,有一个从jar中提取所有这些文件并将它们放在每个部署机器的本地文件系统中的推送。这听起来合理吗?

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

您希望或期望在不发布新代码的情况下更改它们吗?然后你需要提取它们

如果问题的答案是否定的,那么您不应该提取它们,因为这将允许支持人员在不经过发布过程的情况下修补它们。(当然,如果它们在罐子里,这也是可能的,但稍微不那么诱人。)

更新:但既然您提到了多台部署计算机,那么还有第三种选择:提取它们并将它们放置在网络驱动器上的一个常见可访问区域。在多台机器上复制的手动可编辑配置文件(但应该相同)因不同步而臭名昭著

有这样的东西是不礼貌的 不是一个.class文件进入一个JAR

那是胡说八道。事实上,将用户使用的图标和其他数据文件等资源与代码一起放入JAR是一种非常好的形式。这就是
Class
ClassLoader
getResource()
getResourceAsStream()和
getResourceAsStream()
方法的作用,它使应用程序比手动处理资源路径更健壮

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

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

根据您的需求,可以将应用程序范围的配置文件放在Jar/War之外,这样就可以修改它们,而无需重新构建Jar。
请记住,在生产中修改应用程序参数是一种糟糕的做法。更改应该首先在一些预生产环境中进行测试。

将非类文件放入JAR文件中是完全可以的,特别是应用程序需要的资源(图像、本地化字符串等)。知道这一点,您必须决定哪种场景适合您的情况:

  • 如果配置是固定的,并且只有在部署新的JAR文件时才会更改,请将其放入JAR中
  • 如果必须手动或由应用程序更改配置,请将其存储在文件系统中

如果您选择后者,请注意,在JAR文件中包含一个默认配置是一个很好的做法,以处理缺少外部配置文件的情况。默认配置可以直接从JAR加载,也可以复制到文件系统,成为新的可编辑配置。

我觉得这不合理。我相信,某些应用程序的配置应该在jar文件中。诸如ORM映射、spring配置、定制spring命名空间XSD、其他XSD等。。在大多数情况下都应该在jar中。它是部署工件的重要部分

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


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

归根结底,这些文件是否要由应用程序的最终用户编辑,或者如果存在依赖于计算机的配置指令。有时,您不希望人们对配置文件进行更改,例如,如果配置是特定于环境的。