我们正在办公室围绕JAR文件中可以和不可以进行的讨论。有人建议将任何不是.class文件的内容放入JAR中是很糟糕的。我们目前有一些Ibatis / etc的XML配置,一些属性文件......通常。但是,需要从JAR中提取所有此类文件并将它们放到每个部署机器的本地文件系统中。这听起来合理吗?
答案 0 :(得分:14)
拥有任何东西都是糟糕的形式 不是.class文件进入JAR
这是胡说八道。事实上,将代码使用的图标和其他数据文件等资源与代码一起放入JAR非常良好形式。这就是getResource()
和getResourceAsStream()
的{{1}}和Class
方法的用途,与手动处理资源路径相比,它可以提供更强大的应用程序。
但是,配置文件可能是另一回事。如果要在部署期间或之后更改它们,那么将它们放在JAR文件中是相当不方便的,并且将它们放在单独的目录中是可取的。
答案 1 :(得分:4)
如果在JAR内的配置文件中进行更改(即使不更改任何Java代码行),则需要重建和重新部署整个JAR。这听起来合理吗?
答案 2 :(得分:4)
将非类文件放在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的情况下修改它们。 请记住,修改生产中的应用程序参数是一种不好的做法。应该在一些预生产环境中首先测试变更。