首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持多JRE版本的最佳开发实践是什么?

支持多JRE版本的最佳开发实践是什么?
EN

Stack Overflow用户
提问于 2009-09-24 19:08:24
回答 5查看 478关注 0票数 3

我们的应用程序需要支持1.5和1.6 JVM。1.5支持需要避免任何1.6 JRE依赖,而1.6支持需要利用仅1.6的特性。

当我们将Eclipse项目更改为使用1.5 JRE时,我们会得到标记为错误的所有依赖项。这对于查看我们的依赖项在哪里很有用,但对于普通的开发没有什么用处。使用这样的编译错误提交源代码感觉也是错误的。

这种多JRE版本支持的最佳实践是什么?

在C语言中,我们有#ifdef编译器指令来相当干净地解决这类问题。最干净的Java等价物是什么?

EN

回答 5

Stack Overflow用户

发布于 2009-09-24 11:20:32

如果你的软件必须同时在JRE 1.5和1.6上运行,那么为什么你不只为1.5开发呢?为什么一定要使用Java 6中才有的特性,这有什么原因吗?是否没有运行在Java1.5上的第三方库包含您想要使用的1.6版特性的等价物?

维护两个代码库,使它们保持同步等是一项大量的工作,与您所获得的相比,可能不值得付出这些努力。

当然,Java没有预处理器,所以您不能(轻松地)像在C中使用预处理器指令那样进行条件编译。

当然,这取决于您的项目有多大,但我想说的是:不要这样做,只使用Java 5特性,如果您认为需要Java 6特定的功能,那么请寻找在Java 5上运行的第三方库来实现这些功能(或者甚至自己编写-从长远来看,这可能比试图维护两个代码库的工作量要少)。

票数 3
EN

Stack Overflow用户

发布于 2009-09-24 13:02:59

将大部分代码编译为1.5。有一个单独的源代码目录来存放1.6特定的代码。1.6版本的源代码应该依赖于1.5版本,但反之亦然。与1.6代码的接口应该通过子键入1.5代码中的类型来完成。1.5版本的代码可能有一个替代的实现,而不是到处检查null

使用单个反射一次来尝试加载根1.6类的实例。在允许创建实例之前,根类应该检查它是否在1.6上运行(我建议在静态初始化器中使用-target1.6`和只有1.6的方法)。

票数 2
EN

Stack Overflow用户

发布于 2009-09-24 11:34:44

有几种方法可以使用:

针对1.6进行编译,并使用测试来确保功能正常降级;这是我在商业产品上使用过的过程(1.4针对1.3 compatibility)

  • Use版本的插件,并使用运行时来确定要加载哪些插件;这需要针对1.5的某种插件framework

  • Compile,并使用反射来调用1.6功能;我会避免这种情况,因为在reduced performance中使用第一种方法会增加复杂性

在所有情况下,您都需要隔离功能,并确保生成的类文件具有version of 49.0 (使用1.5目标进行编译)。在初始化外观类时,您可以使用反射来确定方法/功能的可用性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1470996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档