我想将JRE 6.0与我的Java应用程序捆绑在一起。我所有的源代码都驻留在CVS中。我的客户会检查代码并自行构建它。我应该将JRE存储在CVS中吗?我们应该在CVS/SVN中存储JRE吗?
回答
我通常主张将大多数东西放在源代码控制中,但是这似乎有点过分。为什么?
- 的JRE很容易从http://java.sun.com
- 它不经常改变。我希望你指定你的代码运行的最低版本(例如1.5,1.6等)
他们的机器正在使用JRE 1.4,他们的IT人员拒绝安装JRE 6.0,因为他们担心它可能会破坏当前正在运行的程序。 – janetsmith 2009-09-09 00:22:00
@janet,他们将如何编译它,除非他们安装了JDK。除非您在构建脚本中设置source = 1.4,否则它们将需要JDK(甚至不包括JRE)。 – 2009-09-09 01:27:03
您应始终拥有下载的安装文件的本地镜像。东西在Sun网站上移动。 – 2009-10-25 09:46:04
我在CVS中存储JRE没有任何问题。
然而,无论你做还是不做,只要你的脚本可以把它作为构建的一部分,它不是那么重要。例如,如果您想要在HTTP服务器上托管可下载的jre.zip,或者在Maven repo中指向该目录,那就好。
井将不是你的客户都准备好的JRE,如果指望他能运行之前编译代码? JDK包含JRE。
最佳做法是,你不应该保留在源代码控制系统的任何二进制文件。对于Java开发人员来说,Maven在版本控制jar文件方面效果更好。原因是我们希望保持我们的源代码库尽可能小,所以对于那些首次检查我们的代码的人来说,速度会更快。
但是,如果你仍想保留的二进制文件的源代码控制,这将是最好避免使用CVS,因为CVS是版本的二进制文件坏了。你可以用谷歌搜索,为什么它不好。如果你使用SVN,那么它仍然可以,因为SVN处理二进制文件比CVS好得多。
我不会把一个JDK或JRE到源代码库:
- 这是不好的做法,把外部版本东西到你的版本控制,因为它通常会导致过度约束,模糊和/或硬连线你的应用程序的外部依赖关系。 (Maven的常春藤或者是用于与外部的依赖关系处理,虽然不是在这种情况下,良好的解决方案)
- 把二进制代码版本控制是一个坏主意,一些版本控制系统。
但我认为你真正的问题(实际上,您的用户组织的问题)是谁拒绝考虑升级JRE的IT人:
- 他们需要意识到的 事实,他们可以在一台计算机上安装多个 JRE版本,并且 配置应用程序以使用他们所需的JRE 版本启动。 (这在Linux上是微不足道的 ...)
- 他们需要意识到事实 他们的政策阻碍了 的进展。
- 他们需要意识到的事实 他们的政策是一个潜在的安全问题 。如果他们强制用户随机部署 自己的JDK/JRE副本,则很难确保JRE安全 补丁得到应用。 (此外,1.4.2是由于 是soonish续航最好要结束和安全 补丁将停止。)
编辑:而且也有是否“重新分配”的法律问题源代码库中的JRE违反了Sun的点击型JRE/JDK下载许可证。 (我不知道...)
取决于你用来处理依赖关系的方面。如果您使用Maven,那么使用您需要的东西创建一个maven包,并将其托管在本地存储库中。
如果你只有CVS(就像我们做的那样),那么创建大的二进制包(因为你需要它们)就可以了,然后你可以把它放到CVS中。请注意,它们应该是静态的,以获得最佳的CVS性能。
也注意到jsmooth包可以创建一个嵌入了JRE的jar的EXE文件。这可能会解决您的部署问题。
对于远程编译,Eclipse可以使用普通的JRE。您只需告诉Eclipse您已经准备好的JRE在哪里就位于磁盘上。 Eclipse发行版中还有一个文件夹,启动程序会自动查找。
我想知道建立应用程序本身的客户端。它将需要某种Java编译器,最有可能的是javac,它是JDK的一部分。所以你的客户不仅需要一个JRE,而且还需要一个JDK(除非他们将使用Jikes或其他编译器)。
javac能够为先前版本的Java生成字节码,因此使用较新的编译器应该不会造成任何问题。
就我个人而言,我不会像JRE那样包含大型二进制文件作为我自己的存储库的一部分。 JRE可以被认为非常稳定,只要列出所需的最低版本就足够了。安装JRE与安装单个Java应用程序完全不同。这两项活动不应混为一谈。
- 1. 我们应该在资源中存储格式字符串吗?
- 2. 我们应该将JWT作为cookie存储吗?
- 3. 我应该存储openid claims_id加密吗?
- 4. 我应该将相关模型保存在存储库中吗?
- 5. 我们应该开源吗?
- 6. 我们应该何时将图像存储在数据库中?
- 7. 库和媒体文件应该存储在存储库中吗?
- 8. 我们应该将活动内容存储在本地数据库吗?
- 9. 对于存储结果,我应该存储在MySQL或.txt中吗?
- 10. 我应该在Redshift中存储小数据集吗?
- 11. 我应该在会话中存储用户数据吗?
- 12. 我应该在存储过程中使用EntityFramework吗?
- 13. .git文件夹应该存储在我的SVN仓库中吗?
- 14. 我应该在Redis中存储JWT令牌吗?
- 15. 我应该在数据中存储默认行为吗?
- 16. 我应该在ViewState中存储数据库ID字段吗?
- 17. 我应该在SQLite数据库中存储图像吗?
- 18. 我应该在ID登录中持久存储ID令牌吗?
- 19. 我应该在Android Studio中存储大量图片吗?
- 20. 我应该直接在Angular 2中使用本地存储吗
- 21. 我应该在Redux中存储承诺吗?
- 22. 我应该将我网站的图片存储在heroku上吗?
- 23. 我应该在储存库界面外创建储存库项目吗?
- 24. 我应该在webroot之外存储上传的图片吗?
- 25. 我应该在调用web.py之间存储变量吗?
- 26. DDD。我应该修改存储库中的实体吗?
- 27. 我们应该使用哪一种方法,用于存储我们CoreData对象
- 28. 我们应该直接使用ScalaSignature吗?
- 29. 我们应该使用jms吗?
- 30. 我们应该引入BizTalk/ESB吗?
您的源代码管理系统并不意味着成为互联网的镜像 – 2009-09-09 02:32:20