`
JerryWang_SAP
  • 浏览: 1030322 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

如何通过Java代码判断当前的环境是否支持JRE 9

阅读更多

JDK9已经出来有一段时间了,因此很多流行的Java应用纷纷增添了对JDK9乃至JDK10的支持,比如Tomcat。

我们通过这个链接下载最新的Tomcat源文件包,总共7MB:

https://tomcat.apache.org/download-90.cgi

解压之后,在文件夹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;

}
 
如何通过Java代码判断当前的环境是否支持JRE 9

一旦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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

 

 
 
0
0
分享到:
评论
1 楼 cs6641468 2018-10-12  
检查每个Java版本特有的class是一种思路,你这个例子是,其实还有更好的例子,可以看看SpringBoot @ConditionalOnJava的源码:
enum JavaVersion {

/**
* Java 1.9.
*/
NINE(9, "1.9", "java.security.cert.URICertStoreParameters"),

/**
* Java 1.8.
*/
EIGHT(8, "1.8", "java.util.function.Function"),

/**
* Java 1.7.
*/
SEVEN(7, "1.7", "java.nio.file.Files"),

/**
* Java 1.6.
*/
SIX(6, "1.6", "java.util.ServiceLoader");
               .......
            }


当然,还有一种思路是获取System.getProperty("java.version")来直接判断版本, commons-lang3 和 guava里都有个JavaVersion的类(枚举)可以了解下。

相关推荐

    java 程序 环境变量修改

    在Java代码中,你可以使用`SystemUtils`来判断当前运行环境,例如: ```java import org.apache.commons.lang3.SystemUtils; public class Main { public static void main(String[] args) { if (SystemUtils.IS...

    java源码包---java 源码 大量 实例

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    JAVA上百实例源码以及开源项目源代码

    支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,...

    java判断题博学谷.doc

    5. **classpath设置**:如果不设置classpath环境变量,Java虚拟机会默认将其设置为".",即当前目录,这意味着Java会在这个目录下查找类文件。 6. **JDK安装路径**:JDK的安装路径是可以自定义的,用户在安装过程中...

    第三方调用U9服务说明(Java平台).docx

    在开发过程中,我们需要验证服务是否可用,通常可以通过访问服务的WSDL地址来判断。如果能够成功加载服务的WSDL文档,并且没有出现错误信息,则说明该服务是可以正常被调用的。 #### 五、生成代理类 为了方便地...

    java判断题java判断题.docx

    19. **内存管理**:Java通过垃圾回收机制自动回收不再使用的对象,但不会立即释放。 20. **封装**:封装是面向对象编程的核心原则之一,隐藏实现细节,提供公共接口。 21. **类与对象**:类是对象的模板,对象是类...

    java判断题-博学谷.doc

    ### Java 判断题知识点解析 #### 1. Java 核心源码包位置 - **题目**: Java 核心源码包存放在 JDK 安装目录的 bin 目录下。 - **答案**: 错误 - **解析**: 实际上,Java 的核心源码包(`src.zip` 文件)位于 JDK ...

    java源码包3

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 ...

    java源码包2

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 ...

    java获取jdk路径

    以下是一个简单的Java代码示例,展示如何获取`JAVA_HOME`环境变量的值: ```java public class JdkPathFinder { public static void main(String[] args) { String javaHome = System.getenv("JAVA_HOME"); if ...

    shell 脚本调用Java类

    这个脚本首先通过`command -v java`检查Java是否在PATH环境变量中,然后使用`java`命令执行Java程序。`JAVA_CLASS_PATH`指定了类路径,这里我们设置为当前目录,因为`HelloWorld.class`就在当前目录下。`MAIN_CLASS`...

    Java语言基础小结

    - **JRE(Java Runtime Environment)**:Java运行时环境包含了运行Java应用程序所需的所有软件,包括JVM以及Java核心类库等。JRE是用户运行Java程序的基础环境。 - **JDK(Java Development Kit)**:Java开发工具...

    java面试题精选题目

    "java面试题精选题目" 本文涵盖了 Java 面试中常见的知识点,涵盖了 Java 虚拟机...它的工作原理是通过判断当前内存是否为垃圾对象,如果是,则释放其占用的内存空间。这种机制可以避免内存泄漏和过度消耗内存的问题。

    java项目路径(相关信息)的取得

    - 应用场景:根据Java版本判断是否支持某些新特性。 2. **`java.vendor`** - 描述:Java运行时环境供应商。 - 示例代码:`System.getProperty("java.vendor")` - 应用场景:确定使用的是哪个供应商的JRE。 3....

    Java 基础核心总结.pdf

    Java的设计哲学是“一次编写,到处运行”(Write Once, Run Anywhere),这意味着Java代码可以在任何支持Java的平台上运行,无需重新编译。 总之,Java语言涵盖了丰富的编程概念和技术,从基本语法到面向对象编程,...

    01_java基础语法_条件语句_循环语句

    建议同时安装JRE和JDK,这样可以确保在开发过程中有足够的支持,并且能够在不同的环境中运行Java程序。 ##### 1.2 Java程序运行流程 Java程序的运行过程大致如下: 1. 编写Java源代码,文件扩展名为`.java`。 2. ...

    电大Java语言与WWW技术形成性考核判断题.pdf

    2. Java Applet:是Java早期用于在网页中嵌入小程序的技术,可以让浏览器支持运行Java代码。 3. Java MouseListener:Java中的鼠标事件监听器接口,可以通过实现这个接口来响应鼠标事件,实现交互式应用。 4. Java...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,...

    java判断题.docx

    JDK(Java Development Kit)是Java开发的核心工具集,包含了JRE(Java Runtime Environment),它是运行Java应用程序所需的环境。在安装JDK时,用户可以根据需求选择安装目录。JDK的安装目录包含多个子目录,如bin...

    java练习题

    - **跨平台**:Java的“一次编写,到处运行”(Write Once, Run Anywhere,WORA)特性得益于Java虚拟机(JVM),使得Java代码可以在任何安装了JVM的平台上运行。 - **有类库**:Java拥有丰富的类库,如Java ...

Global site tag (gtag.js) - Google Analytics