前言

工作中,难免会遇到升级版别的事情。这次由于两个系统中,系统 A 是用的 JDK8 版别,系统 B 是用 JDK11 版别;要求同步 JDK 版别,也便是升级到11版别。那么接下来将进行介绍~

问题与处理

1. .sh 脚本发动无法发动问题

发现的问题

由于脚本改动并没有什么改变,发动 jdk8 不存在问题能发动成功,发动 jdk11 却无法发动。

JVM 参数 -XX:PermSize、参数 -XX:MaxPermSize、参数 -XX:+PrintGCDateStamps

导致的原因

(1) JDK 11 现已弃用-XX:PermSize 参数和 -XX:MaxPermSize 参数,然后会存在导致发动失利。 (这两个参数在 JDK 8 及之前版别被用来设置永久代内存的初始大小和最大大小。)
(2) -XX:+PrintGCDateStamps这个参数在 JDK 8 和 JDK 9 中都是支持的,但在之前的版别中可能会呈现不支持的情况。(注:是 -XX:+PrintGCDateStamps 不是 PrintGCDetails

处理的办法

(1) ① 去掉 -XX:PermSize 参数和 -XX:MaxPermSize 参数。
② 在 JDK 11 上使用 -XX:MetaspaceSize 参数和 -XX:MaxMetaspaceSize 替代-XX:PermSize 参数和 -XX:MaxPermSize 参数.
(注:JDK 11 中-XX:MetaspaceSize 参数和 -XX:MaxMetaspaceSize 参数是设置元空间内存的大小。)
(2) 去掉 -XX:+PrintGCDateStamps 这个参数。

2. javafx.util.Pair 替换

发现的问题

发动项意图时分,呈现 Error:(27, 19) java: 程序包javafx.util.Pair不存在

导致的原因

JDK 11 现已没有内嵌 javafx

处理的办法

(1) 假如是只要使用 javafx.util.Pair,可以用其他引进的依靠去替代。(如 cn.hutool.core.lang.Pair 等其他)
(2) 项目引进 JavaFX 的相关依靠。

【引进 JavaFX 的相关依靠】(点击打开)
<dependencies>
   <dependency>
       <groupId>org.openjfx</groupId>
       <artifactId>javafx-controls</artifactId>
       <version>11</version>
   </dependency>
   <dependency>
       <groupId>org.openjfx</groupId>
       <artifactId>javafx-fxml</artifactId>
       <version>11</version>
   </dependency>
</dependencies>

3. sun.misc.BASE64Decoder 替换

发现的问题

发动项意图时分,呈现 Error:(5, 16) java: 程序包sun.misc不存在

导致的原因

JDK 9 之后现已删去和弃用 sun.misc

处理的办法

(1) 假如是需要替换sun.misc.BASE64Decoder,可以考虑 java.util.Base64替代掉 sun.misc.BASE64Encodersun.misc.BASE64Decoder

【sun.misc.BASE64Decoder 替换 java.util.Base64 实例】(点击打开)
import org.apache.commons.lang3.StringUtils;
import sun.misc.BASE64Decoder;
import java.util.Base64;
/**
 * TODO:升级 jdk11 替换 被弃用 base64 示例
 *
 * @Author: nanfangzhe
 * @DateTime: 2023/6/1 20:10
 **/
public class Base64Utils {
    public static void main(String[] args) {
        String txt = "南边者";
        try {
            String oldEncode = OldBase64Decode.base64Encode(txt.getBytes());
            System.out.println("sun.misc.BASE64Decoder Encode:" + oldEncode);
            String newEncode = NewBase64Decode.base64Encode(txt.getBytes());
            System.out.println("java.util.Base64 Encode:" + newEncode);
            byte[] oldBytes = OldBase64Decode.base64Decode(oldEncode);
            System.out.println("sun.misc.BASE64Decoder Decode:" + new String(oldBytes));
            byte[] newBytes = NewBase64Decode.base64Decode(newEncode);
            System.out.println("java.util.Base64 Decode:" + new String(newBytes));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
// jdk 8之前的版别
class OldBase64Decode {
    /**
     * TODO:Decode
     */
    public static byte[] base64Decode(String txt) throws Exception {
        if (StringUtils.isBlank(txt)) {
            return null;
        }
        byte[] bytes = new BASE64Decoder().decodeBuffer(txt);
        return bytes;
    }
    /**
     * TODO:Encode
     */
    public static String base64Encode(byte[] bytes) {
        return Base64.getEncoder().encodeToString(bytes);
    }
}
// jdk11版别
class NewBase64Decode {
    /**
     * TODO:Decode
     */
    public static byte[] base64Decode(String txt) throws Exception {
        if (StringUtils.isBlank(txt)) {
            return null;
        }
        byte[] bytes = Base64.getDecoder().decode(txt);
        return bytes;
    }
    /**
     * TODO:Encode
     */
    public static String base64Encode(byte[] bytes) {
        return Base64.getEncoder().encodeToString(bytes);
    }
}

关键

【关键】(点击打开)

由于不过于纠结 JDK11 版别升级 弃用删去了哪些办法或许哪些类不再内嵌。最快的办法是直接修改版别后,发动再发现缺失的东西,再进行替换、去掉、或许其他依靠办法进行处理。

  1. 修改 JDK 版别
    【JDK 11】【JDK 8】项目 jdk 版本升级,修改方案与实践
    【JDK 11】【JDK 8】项目 jdk 版本升级,修改方案与实践
  1. 直接发动,等候缺少需要
    【JDK 11】【JDK 8】项目 jdk 版本升级,修改方案与实践

总结

本篇文章介绍了, jdk8 升级 jdk11 的一些注意问题。首要环绕-

  1. .sh 脚本发动无法发动问题
  2. javafx.util.Pair 替换
  3. sun.misc.BASE64Decoder 替换
  4. … (后续碰到会继续更新)

(首要关键:)

文章小尾巴

【文章小尾巴】(点击打开)

文章写作、模板、文章小尾巴可参阅:《写作“小心思”》
  感谢你看到最后,最后再说两点~
  ①假如你持有不同的看法,欢迎你在文章下方进行留言、评论。
  ②假如对你有帮助,或许你认可的话,欢迎给个小点赞,支持一下~
   我是南边者,一个热爱计算机更热爱祖国的南边人。
  (文章内容仅供学习参阅,如有侵权,非常抱歉,请当即联系作者删去。)