2009-09-08 59 views
1

我想将JRE 6.0与我的Java应用程序捆绑在一起。我所有的源代码都驻留在CVS中。我的客户会检查代码并自行构建它。我应该将JRE存储在CVS中吗?我们应该在CVS/SVN中存储JRE吗?

+1

您的源代码管理系统并不意味着成为互联网的镜像 – 2009-09-09 02:32:20

回答

7

我通常主张将大多数东西放在源代码控制中,但是这似乎有点过分。为什么?

  1. 的JRE很容易从http://java.sun.com
  2. 它不经常改变。我希望你指定你的代码运行的最低版本(例如1.5,1.6等)
+0

他们的机器正在使用JRE 1.4,他们的IT人员拒绝安装JRE 6.0,因为他们担心它可能会破坏当前正在运行的程序。 – janetsmith 2009-09-09 00:22:00

+1

@janet,他们将如何编译它,除非他们安装了JDK。除非您在构建脚本中设置source = 1.4,否则它们将需要JDK(甚至不包括JRE)。 – 2009-09-09 01:27:03

+1

您应始终拥有下载的安装文件的本地镜像。东西在Sun网站上移动。 – 2009-10-25 09:46:04

0

我在CVS中存储JRE没有任何问题。

然而,无论你做还是不做,只要你的脚本可以把它作为构建的一部分,它不是那么重要。例如,如果您想要在HTTP服务器上托管可下载的jre.zip,或者在Maven repo中指向该目录,那就好。

0

井将不是你的客户都准备好的JRE,如果指望他能运行之前编译代码? JDK包含JRE。

2

最佳做法是,你不应该保留在源代码控制系统的任何二进制文件。对于Java开发人员来说,Maven在版本控制jar文件方面效果更好。原因是我们希望保持我们的源代码库尽可能小,所以对于那些首次检查我们的代码的人来说,速度会更快。

但是,如果你仍想保留的二进制文件的源代码控制,这将是最好避免使用CVS,因为CVS是版本的二进制文件坏了。你可以用谷歌搜索,为什么它不好。如果你使用SVN,那么它仍然可以,因为SVN处理二进制文件比CVS好得多。

4

我不会把一个JDK或JRE到源代码库:

  • 这是不好的做法,把外部版本东西到你的版本控制,因为它通常会导致过度约束,模糊和/或硬连线你的应用程序的外部依赖关系。 (Maven的常春藤或者是用于与外部的依赖关系处理,虽然不是在这种情况下,良好的解决方案)
  • 把二进制代码版本控制是一个坏主意,一些版本控制系统。

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

  • 他们需要意识到的 事实,他们可以在一台计算机上安装多个 JRE版本,并且 配置应用程序以使用他们所需的JRE 版本启动。 (这在Linux上是微不足道的 ...)
  • 他们需要意识到事实 他们的政策阻碍了 的进展。
  • 他们需要意识到的事实 他们的政策是一个潜在的安全问题 。如果他们强制用户随机部署 自己的JDK/JRE副本,则很难确保JRE安全 补丁得到应用。 (此外,1.4.2是由于 是soonish续航最好要结束和安全 补丁将停止。)

编辑:而且也有是否“重新分配”的法律问题源代码库中的JRE违反了Sun的点击型JRE/JDK下载许可证。 (我不知道...)

0

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

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

也注意到jsmooth包可以创建一个嵌入了JRE的jar的EXE文件。这可能会解决您的部署问题。

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

0

我想知道建立应用程序本身的客户端。它将需要某种Java编译器,最有可能的是javac,它是JDK的一部分。所以你的客户不仅需要一个JRE,而且还需要一个JDK(除非他们将使用Jikes或其他编译器)。

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

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

相关问题