首页 存档 技术 查看内容

Java 9 内部探索版本架构,多版本 jar 包及其他

2018-3-30 13:00 |来自: 互联网 400 0

摘要: #2016年 OSC 北京源创会年终盛典# OSC 协作翻译英文原文: Inside Java 9 Version Schema, Multi-Release JARs, and More 译者:边城,leoxu,Tony,无若,xufuji456,wnull,debugging,Robbie_ZhuJShell因为已经有很多人 ...


#2016年 OSC 北京源创会年终盛典#


OSC 协作翻译

英文原文:

Inside Java 9 Version Schema, Multi-Release JARs, and More

译者:边城,leoxu,Tony,无若,xufuji456,wnull,debugging,Robbie_Zhu


JShell

因为已经有很多人在谈论 Jigsaw,因此在第一部分我们先跳过不去讲它。在这一部分我们将会照本宣科地拿 JShell 做些事情, 这是 Java 的一个全新的 REPL (说到它能做的事情,例如你在一个地方敲入了 Java 代码,有了它就可以马上把代码的运行结果计算出来)。如果你还并不(特别地)了解这个东西但又感觉有点兴趣的话,可以看看 Robert Field在去年的 Devoxx Belgium 上提供的这份不错的介绍https://www.youtube.com/watch?v=jziVaht480w。(JEP 222 :http://openjdk.java.net/jeps/222)


新的版本字符串

让我们先来个简单的入门介绍: 版本名称。


我尝试过去理解Java的版本命名模式,直到这样做的时候才觉得值得去深究一番。它是从 1.0 和 1.1 版本的 JDK 开始的 这俩版本还算是那么回事儿,但这俩版本以后就越来越不那么像话了。版本 1.2 到 1.5 对商标进行了重命名,如 Java 2 这样的,改变比较明显(还记得J2SE 吗? 其实指的就是 2 这个版本)。到了JDK 1.5 就很明显可以看出上述的命令模式没有真正起作用,因此Sun就开始将它叫做 Java 5了。围绕 Java 6,整个自 Java 2 开始的命名创意被悄无声息的埋没了,不过这样反而更让人明白我们简单的叫它“Java X”就可以了。 (你是否知道 Java 版本,包含 Java 7 其实都有一个像Tiger和Mustang 这样很酷的工程名字?)


JVM 所报告的版本字符串并没有做出修改它们总会是 1.x.... 这样的形式,不过现在有了JEP 223, 版本字串和命令模式做了对齐。如果检查相关的系统属性(见这里的demo), 输出会是下面这样的内容:

java.version:9-ea

java.runtime.version:9-ea ***jigsaw-nightly-h5561-20161003

java.vm.version:9-ea ***jigsaw-nightly-h5561-20161003

java.specification.version:9

java.vm.specification.version:9


这并非过分显示的信息,因为它是跑在一个早期可访问的构建本上的。在将来java.version 会报告像 9.1.2 这样的字符串, 所遵循的是 $MAJOR.$MINOR.$SECURITY 模式:

● $MAJOR 所标识的是 Oracle 计划每两到三年发布的主版本号。


●$MINOR 所标识的是针对Bug修复以及一些其它需要定期跟进的更小一点的版本号当主版本号发布时,这个标识就会被重置为零。


●$SECURITY 则相当有意思 这个标识在每次发布中“含有包括为提升安全性而进行的重要修复”时就会要用到,并且在 $MINOR 变大的时候它并不会被重置。


现在我们已经没必要对这些字符串进行转换了,因为有了Version, 这是一个能为我们做这些事情的小类,很不错。

Versionversion=Runtime.version();

System.out.println("Reportedbyruntime:" version);

switch(version.major()){

case9:

System.out.println("Modularity!");

break;

case10:

System.out.println("ValueTypes!");

break;


GNU 风格的命令行选项

当涉及到命令选项的语法时,Java 的各种工具就有点太过于形式各异了:

有些会在长版本选项前面使用一个短横线(-classpath),其它则会使用两个(--gzip)


●有些用短横线分隔单词(--no-gzip),其它则没有这样做(-classpath)


●有些是单个字母形式的(-d), 其它则是两个字母形式的(-cp, 真不知道那样搞是为了啥?!)


●有些用等号赋值(-D

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部