摘要:已经出来有一段时间了,因此很多流行的应用纷纷增添了对乃至的支持,比如。来自,这个类正是引入的。因此如果用加载不到这个类,一定说明当前的运行环境是以下。通过这种方式进行运行环境的检测比准确,因为后者获取的信息理论上有可能被别人用覆盖。
JDK9已经出来有一段时间了,因此很多流行的Java应用纷纷增添了对JDK9乃至JDK10的支持,比如Tomcat。
我们通过这个链接下载最新的Tomcat源文件包,总共7MB:
https://tomcat.apache.org/dow...
解压之后,在文件夹apache-tomcat-9.0.10-srcjavaorgapachecatalinacore里找到文件JreMemoryLeakPreventionListener.java:
可以看到大量调用工具类JreCompat检测JRE9是否可用:
JreCompat.isJre9Available()
查看isJre9Available的具体实现:
public static boolean isJre9Available() { return jre9Available; }
被一个boolean控制:jre9Available。
jre9Available这个boolean被Jre9Compat.isSupported()控制: static { // This is Tomcat 9 with a minimum Java version of Java 8. // Look for the highest supported JVM first if (Jre9Compat.isSupported()) { instance = new Jre9Compat(); jre9Available = true; } else { instance = new JreCompat(); jre9Available = false; } }
再看Jre9Compat.isSupported()的代码:
static boolean isSupported() { return inaccessibleObjectExceptionClazz != null; }
一旦inaccessibleObjectExceptionClazz不为null,说明JRE9可用。
inaccessibleObjectExceptionClazz来自Class.forName("java.lang.reflect.InaccessibleObjectException"),
java.lang.reflect.InaccessibleObjectException这个类正是Java 9引入的。因此如果用Class loader加载不到这个类,一定说明当前的运行环境是Java 9以下。
通过这种方式进行Java运行环境的检测比System.getProperty准确,因为后者获取的信息理论上有可能被别人用setProperty覆盖。
ABAP通过表CVERS查看Software component的版本信息:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71932.html
摘要:然而,作为学生代表的我,绝对不允许老师混入进来充当间谍。而且,该方法由所独享,并不需要判断是否为学生。由此,改进为以下版本。得到如下测试代码而对于教学分类的判断,则有以下两种情形。 前言 入学不久之后,我就在想,对于学校的这么多人,这么多教师,这么多学生,以及其他种种事物,能否对应的做一套系统下来呢?随之也跟着思考了起来。 设计 好了,最直观的映入大脑的就是三个实体:人、教师、学生。这...
今年3月,Google 破天荒提前半年发布了 Android N 开发者预览版。当然,作为一个不合格的谷粉并没有第一时间体验安装,因为至今仍然能够回忆起来去年今日此门中(雾)兴冲冲刷了 Android M Preview 的时候发现各种 Crash 就连微信也(不出所料得)中招时自己一脸懵逼的心情。当然,为自己的机智而庆幸并没有过多久,很快就有微信好友(当然也是纯纯的谷粉)反馈微信又双叒叕在 An...
摘要:内部长期使用来管理代码。审核通过并且成功后,触发静态测试单元测试镜像构建镜像部署集成测试等测试通过后,创建一个从到的,由负责人进行审核。从图中我们可以看到,部分是一个单元测试,预发布部署,集成测试,,提交代码的循环过程。UCloud内部长期使用 Gitlab 来管理代码。虽然Gitlab作为一套开源平台已很优秀,但我们对于其能为CI/CD提供的敏捷性并不十分满意,内部实践中的代码发布周期仍需...
摘要:所以此版本号在这里的作用并不是用来区分版本的,小版本号才是真正用来做版本区分的,那么在引用这个就要这么来控制版本号,举个栗子锁定大版本号和小版本号,不管我们开发过程中提交了多少次,我们引用都是最新的。 最近在把公司内部用的一个库发布到内网的npm私服上,仅仅是发布的话是比较简单的,但这个库是由多个人一起维护的,而且npm私服只有一套,所以生产环境和开发环境,用的是同一个,那么,我们的需...
阅读 2554·2021-11-22 09:34
阅读 903·2021-11-19 11:34
阅读 2785·2021-10-14 09:42
阅读 1410·2021-09-22 15:27
阅读 2370·2021-09-07 09:59
阅读 1713·2021-08-27 13:13
阅读 3418·2019-08-30 11:21
阅读 753·2019-08-29 18:35