Java 9 将采用新的版本字符串格式

oschina
 oschina
发布于 2015年12月24日
收藏 27

在现有的版本编码格式使用了两年之后,从Java 9开始,Java版本方案将根据业内软件版本编码的最佳实践进行修改。使用或解析Java版本字符串的应用程序开发人员要注意了,因为这种变化可以会影响他们的应用程序。

正如JEP 223所阐述的那样,当前的版本方案会跳过某些版本号,而且安全补丁版本和更新版本混在一起。社区认为,该方案产生的版本号含义模糊、不直观。为了解决这个问题,Oracle引入了一种使用语义版本编码的新版本方案,就是说,Java版本字符串将依次包含如下三个部分:主版本号、小(维护)版本号和安全版本号。长版本格式还将包含像构建版本号和可用性这样的信息。

主版本号即我们通常所理解的Java版本,比如,Java 9的主版本是9。因此,按照Java的新版本发布计划,主版本的变化只会两年或三年发生一次。主版本的变化可能会包含破坏性变更,但这些变更至少会提前两个主版本通知。

小版本号将包含非重要Bug修复、所支持API的维护发布以及增加内部组件,如新的服务提供程序、新的垃圾收集器,或者支持新的架构。同更新补丁集一样,小版本有望每季度发布一次。

最后,安全版本将包含重要Bug修复。这些版本可能像重要补丁更新那样根据计划按季度发布,或者像安全警报那样按需发布。

关于这点,有个值得注意的结论是,在认识到社区将当前版本号中的第二个数字作为事实上的主版本号,而开头的1被理解为没有意义之后,Oracle去掉了版本号开头的“1”。这一变化可能会导致目前解析版本字符串而有假定版本号开头为1或点的应用程序出现问题。例如,

System.getProperty("java.version").indexof('.');

上述获取主版本的代码会返回-1(尾部的0会从版本字符串中去掉,因此,9.0.0会简单地表示成9)。

新方案将成为Java版本字符串的第三个标准。第一个始于Java 1.3。该方案相当简单,使用第二个数字作为实际的主版本,第三个数字表明是一个安全修复(奇数)还是更新(偶数)。这种编码系统存在缺陷,有时候会迫使一些版本重新编码

为了解决这个问题,Oracle引入了当前的版本系统。在当前的方案下,安全补丁仍然使用奇数,更新仍然使用偶数,虽然并不连续。更新总是20的倍 数,重要补丁更新的版本通过在最新的维护更新上增加5的倍数(为了保证版本号为奇数,必要的时候要加1)计算得出。这样,如果维护版本号是20,那么按照 计划,后续安全版本将是25、31和35。版本号之间留出的数字将用于安全警报补丁的发布,这样就不需要重新编码其他计划好的版本号。

新的版本编码系统旨在采用一种能够区分更新和安全补丁的方式,而且是一种识别要简单许多的方式。

查看英文原文:Java Version Strings Evolve for Java 9

转载自 InfoQ

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:Java 9 将采用新的版本字符串格式
加载中

最新评论(32

小宋
小宋
擦,还以为string类要大改那,吓得我都不敢再想用9了
Diluka
Diluka

引用来自“厉害吧24中”的评论

还以为string类要大改呢。。

引用来自“norahsea”的评论

同上

引用来自“帆船”的评论

++
+++
这下放心了,原来是这些然并卵的东西
mgzyao
mgzyao
谁想的标题!坑人啊
昊天金阙无上至尊自然妙有弥罗至真玉皇上帝
昊天金阙无上至尊自然妙有弥罗至真玉皇上帝

引用来自“厉害吧24中”的评论

还以为string类要大改呢。。

引用来自“norahsea”的评论

同上

引用来自“帆船”的评论

++

引用来自“一刀”的评论

++1

引用来自“彪大大”的评论

+10086

引用来自“袁弘龙”的评论

+65536
+4294967296
天命剑主
天命剑主

引用来自“厉害吧24中”的评论

还以为string类要大改呢。。

引用来自“norahsea”的评论

同上

引用来自“帆船”的评论

++

引用来自“一刀”的评论

++1

引用来自“彪大大”的评论

+10086
+65536
天命剑主
天命剑主

引用来自“厉害吧24中”的评论

还以为string类要大改呢。。

引用来自“norahsea”的评论

同上

引用来自“帆船”的评论

++
+1
ios之王
ios之王

引用来自“ios之王”的评论

这些C#十年前就有了,java,php什么真落后,瞬间被微软黑科技秒杀

引用来自“宇宙大将军”的评论

你错了,这些东西C#在Java出生之前就有了,微软的黑科技超乎你的想象。特别是在移动端和大数据方面,微软在公司成立前就已经给出完美解决方案,现在完全将其他人完全抛在自己前面!没有微软,明天的太阳就不会升起。
特别是在移动端和大数据方面,微软在公司成立前就已经给出完美解决方案 --- 没错,微软“从根上就早就赢了”,远远领先时代数十年的远见!比如webform,10年后,肯定IT界还是会用回的!
ios之王
ios之王

引用来自“ios之王”的评论

这些C#十年前就有了,java,php什么真落后,瞬间被微软黑科技秒杀

引用来自“宇宙大将军”的评论

你错了,这些东西C#在Java出生之前就有了,微软的黑科技超乎你的想象。特别是在移动端和大数据方面,微软在公司成立前就已经给出完美解决方案,现在完全将其他人完全抛在自己前面!没有微软,明天的太阳就不会升起。
所言极是!C#才是唯一可以跨平台完美开发移动端的语言,代码极其优雅,如诗如歌,.NET跨平台,开源,native,都是微软黑科技,微软外星小黑屋发明的黑科技
彪大大
彪大大

引用来自“厉害吧24中”的评论

还以为string类要大改呢。。

引用来自“norahsea”的评论

同上

引用来自“帆船”的评论

++

引用来自“一刀”的评论

++1
+10086
宇宙大将军

引用来自“ios之王”的评论

这些C#十年前就有了,java,php什么真落后,瞬间被微软黑科技秒杀
你错了,这些东西C#在Java出生之前就有了,微软的黑科技超乎你的想象。特别是在移动端和大数据方面,微软在公司成立前就已经给出完美解决方案,现在完全将其他人完全抛在自己前面!没有微软,明天的太阳就不会升起。
返回顶部
顶部