我们应该将JRE存储在CVS / SVN中吗?

时间:2009-09-08 23:01:47

标签: repository cvs java

我想将JRE 6.0与我的java应用程序捆绑在一起。我的所有源代码都驻留在CVS中。我的客户将签出代码并自行构建。我应该将JRE存储在CVS中吗?

7 个答案:

答案 0 :(得分:7)

我通常主张将大部分内容都放在源代码控制中,但这似乎有些过分。为什么?

  1. JRE可以从http://java.sun.com
  2. 获得
  3. 它不经常改变。我希望您指定要运行的代码的最低版本(例如1.5,1.6等)

答案 1 :(得分:4)

我不会将JDK或JRE放入源代码存储库中:

  • 将外部版本化的东西放入版本控制中是不好的做法,因为它通常会导致应用程序的外部依赖性过度约束,模糊和/或硬连接。 (Maven或Ivy是处理外部依赖关系的好方法,但不是在这种情况下,)
  • 将二进制文件放入版本控制对某些版本控制系统来说是一个坏主意。

但我认为您真正的问题(实际上是您的用户组织的问题)是那些拒绝考虑升级JRE的IT人员:

  • 他们需要了解这一点 事实上,他们可以安装多个 一台机器上的JRE版本,和 配置要使用JRE启动的应用程序 他们需要的版本。 (这是微不足道的 在Linux上...)
  • 他们需要了解这一事实 他们的政策是一个障碍 进展。
  • 他们需要了解这一事实 他们的政策是潜在的安全 问题。如果他们强迫用户部署他们的 在随机位置拥有JDK / JRE的副本, 很难确保JRE的安全性 补丁得到应用。 (此外,1.4.2到期了 很快就会结束生命,安全 它的补丁将停止。)

编辑:还有一个法律问题,即从源代码存储库中“重新分发”JRE是否违反了Sun的点击式JRE / JDK下载许可证。 (我不知道......)

答案 2 :(得分:2)

作为最佳实践,您不应在源代码管理系统中保留任何二进制文件。对于Java开发人员来说,maven在版本化jar文件方面做得更好。原因是我们希望保持源存储库尽可能小,这样对于那些第一次检查我们的代码的人来说更快。

但是如果你仍然希望在源代码控制中保留二进制文件,最好避免使用CVS,因为CVS在版本化二进制文件方面很糟糕。你可以用谷歌搜索,为什么它是坏的。如果您使用SVN,那么它仍然可以,因为SVN处理二进制文件比CVS好得多。

答案 3 :(得分:0)

我认为将JRE存储在CVS中没有错。

但是,只要您的脚本可以将其作为构建的一部分来提取,那么您是否重要并不重要。例如,如果您想在HTTP服务器上托管可下载的jre.zip,或者在Maven仓库中指向它,那就一样好。

答案 4 :(得分:0)

如果您希望他在运行之前编译代码,那么您的客户端是否准备好了JRE? JDK包含JRE。

答案 5 :(得分:0)

取决于您用来处理依赖项的内容。如果您使用Maven,那么使用您需要的东西创建一个maven包,并将其托管在本地存储库中。

如果您只是拥有CVS(就像我们一样),那么可以创建大型二进制包(因为您需要它们),然后您可以将它们放入CVS中。请注意,它们应该是静态的,以获得最佳的CVS性能。

另请注意,jsmooth软件包可以创建jar的EXE文件,其中嵌入了JRE。这可能会解决您的部署问题。

对于远程编译,Eclipse可以使用普通的JRE。您只需要告诉Eclipse上面已经准备好的JRE位于磁盘上。 Eclipse发行版中还有一个文件夹,启动器会自动查看。

答案 6 :(得分:0)

我想知道客户自己构建应用程序。它需要某种Java编译器,最有可能的是javac是JDK的一部分。因此,您的客户端不仅需要JRE,还需要JDK(除非他们将使用Jikes或其他替代编译器)。

javac能够为以前版本的Java生成字节码,因此使用较新的编译器不会造成任何问题。

就个人而言,我不会将像JRE这样的大型二进制文件包含在我自己的存储库中。可以认为JRE非常稳定,只需列出所需的最低版本即可。安装JRE也与安装单个Java应用程序完全不同。这两项活动不应混为一谈。