当前位置:首页 > 未来畅想 > 正文内容

getattributevalue JDK从8升级到21的问题集

admin2周前 (06-11)未来畅想25

getattributevalue JDK从8升级到21的问题集

一、背景与挑战

1.升级动因

长期支持策略

现代特性需求:协程、模式匹配、ZGC等

安全性与性能的需求

AI新技术引入的版本要求

2.项目情况

100+项目并行升级的协同作战

多技术栈并存

持续集成体系的适配挑战

二、进度

三、主要问题域与解决方案1. 依赖管理的"蝴蝶效应"

•sun.misc.等内部API废弃 → 引发编译错误

•JAXB/JAX-WS从JDK核心剥离 → XML处理链断裂

•与新版编译器兼容性问题(尤其类型)

核心原因在于提案:



案例1:历史SDK的编译陷阱

Compilation failure: Compilation failure:
#14 4.173 [ERROR] 不再支持源选项 6。请使用 8 或更高版本。
#14 4.173 [ERROR] 不再支持目标选项 6。请使用 8 或更高版本。



    org.apache.maven.plugins
    maven-compiler-plugin
    3.5
    
        1.6
        1.6
    


    org.apache.maven.plugins
    maven-compiler-plugin
    3.13.0
    
        8
    

运行 HTML

案例2:JAXB的模块化剥离

javax.xml.bind.JAXBException:Implementation of JAXB-API has not been found


    org.glassfish.jaxb
    jaxb-runtime
    4.0.5

案例3:与新版编译器兼容性问题

java: java.lang.NoSuchFieldError


 org.projectlombok
 lombok
 1.18.30

案例4:注解找不到

Caused by: java.lang.NoSuchMethodError: 'java.lang.String javax.annotation.Resource.lookup()'
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.(CommonAnnotationBeanPostProcessor.java:664)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.lambda$buildResourceMetadata$0(CommonAnnotationBeanPostProcessor.java:395)
at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:669)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.buildResourceMetadata(CommonAnnotationBeanPostProcessor.java:377)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:358)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:306)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1116)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
... 37 more


    jakarta.annotation
    jakarta.annotation-api
    1.3.5


getattributevalue JDK从8升级到21的问题集 第1张

javax.annotation javax.annotation-api 1.3.2

上述两个依赖代码基本一样,推荐使用该版本:

.:.-api。

2. 模块化的破与立

反射访问的模块墙

[ERROR] Unable to make field private int java.text.SimpleDateFormat.serialVersionOnStream accessible

# 启动参数添加模块开放配置
--add-opens java.base/java.text=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED

完整模块开放配置模板

export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xmx4096m --add-opens java.base/sun.security.action=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/sun.util.calendar=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.base/java.util.concurrent.locks=ALL-UNNAMED
--add-opens java.base/java.security=ALL-UNNAMED
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
--add-opens java.management/java.lang.management=ALL-UNNAMED
--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED
--add-opens java.management/sun.management=ALL-UNNAMED
--add-opens java.base/sun.security.action=ALL-UNNAMED
--add-opens java.base/sun.net.util=ALL-UNNAMED
--add-opens java.base/java.time=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED"

3. 语法层面的"时空穿越"

案例1:编解码改造

// JDK8写法(已废弃)
BASE64Encoder encoder =newBASE64Encoder();
String encoded = encoder.encode(data);
// JDK21规范写法
Base64.Encoder encoder =Base64.getEncoder();
String encoded = encoder.encodeToString(data);

案例2:日期序列化问题

Caused by:java.lang.reflect.InaccessibleObjectException: 
Unable to make field private int java.text.SimpleDateFormat.serialVersionOnStream accessible

解决方案

1.使用替代

2.或添加模块开放参数:--add-opens java.base/java.text=ALL-

4. 隐秘的"依赖战争"

注解包冲突典型案例

[ERROR] javax.annotation.Resource exists in both 
jsr250-api-1.0.jar and jakarta.annotation-api-1.3.5.jar



    jakarta.annotation
    jakarta.annotation-api
    2.1.1



    
        javax.annotation
        jsr250-api
    

5. 构建体系的改造

Maven插件兼容性问题

[ERROR] The plugin org.apache.maven.plugins:maven-compiler-plugin:3.13.0 
requires Maven version 3.6.3

升级策略

1.升级Maven版本

2.统一插件版本


    
        
            

                org.apache.maven.plugins
                maven-compiler-plugin
                3.13.0
            
            
                org.apache.maven.plugins
                maven-war-plugin
                3.4.0
            
        
    

四、最佳实践总结1. 本地编译

第一步:在本地进行编译getattributevalue,提前识别出语法错误、版本冲突及不兼容问题。

主要有以下几种场景:

:参照 【编解码改造】

:升级版本

、jaxb-、.-api:参照 【注解包冲突典型案例】

maven--:升级版本

maven--:升级版本

maven-war-:升级版本

2. 行云构建

同【本地编译】

3. 行云部署

a、镜像不匹配:自定义镜像或者使用已申请的jdk21镜像

b、权限不够:参照【完整模块开放配置模板】

c、加解密

所有数据库操作:.配置文件的处理方式

:. 使用

进行处理,不要用





4. 运行

a、序列化异常

jdk21使用列表视图作为入参getattributevalue JDK从8升级到21的问题集,导致jsf接口进行反序列化报错。报错代码如下:

List subList = venderCodes.subList(i * batchSize, Math.min(venderCodes.size(), (i + 1) * batchSize));
VendorQueryVo vendorQueryVo = new VendorQueryVo();
vendorQueryVo.setVendorCodes(subList);
// 该接口最多支持100条调用
List batchVendorNameByVendorCode = vendorBaseInfoService.getBatchVendorNameByVendorCode(vendorQueryVo, I18NParamFactory.getJDI18nParam());

.() 修改为

.(new ()) 即可解决问题

b、线程上下文类找不到:使用多线程场景下尽可能使用显式指定线程池【默认情况下 不同运行环境的处理机制不同】

5. JVM调优

垃圾回收调优

、和是 Java 虚拟机(JVM)中三种不同的垃圾回收器( , GC),它们的设计目标和使用场景有所不同。以下是它们的区别:

特性

设计目标

高吞吐量

平衡吞吐量和延迟

极低延迟

暂停时间

较长

较短

极短

适用堆大小

中小堆(几 GB 到几十 GB)

大堆(几十 GB 到几百 GB)

超大堆(TB 级别)

CPU 消耗

中等

中等

较高

适用场景

批处理、计算密集型任务

对延迟有一定要求的应用

对延迟极其敏感的应用

•如果你的应用对吞吐量要求高,且可以接受较长的暂停时间getattributevaluegetattributevalue JDK从8升级到21的问题集,选择。

•如果你的应用对延迟有一定要求,且堆内存较大,选择。

•如果你的应用对延迟极其敏感,且堆内存非常大getattributevalue,选择。

仅供参考,具体请按照实际情况来进行调整。

加入微信交流群:************ ,请猛戳这里→点击入群

扫描二维码推送至手机访问。

版权声明:本文由前沿科技娱乐汇发布,如需转载请注明出处。

本文链接:https://www.kejiyl.com/post/4695.html

分享给朋友:

“getattributevalue JDK从8升级到21的问题集” 的相关文章

脑机接口技术突破

脑机接口技术突破

在当今飞速发展的科技领域中,脑机接口前沿技术正逐渐成为备受瞩目的新热点。这一技术将人类的思维与外部设备紧密相连,为我们带来了前所未有的可能性和广阔的应用前景。脑机接口,简单来说,就是通过直接读取和解析大脑的电信号或其他生物信号,来实现人与外部设备之间的交互。它就像是一座连接人类大脑与数字世界的桥梁,...

脑机接口娱乐复合型人才培养的策略

脑机接口娱乐复合型人才培养的策略

在当今科技飞速发展的时代,脑机接口技术作为一项极具潜力的前沿领域,正逐渐引起全球的广泛关注。而与之相关的娱乐产业,也在期待着能够借助脑机接口技术的力量,开创出全新的发展局面。为了满足这一需求,培养脑机接口娱乐复合型人才成为了当务之急。我们需要明确脑机接口娱乐复合型人才的定义和能力要求。这类人才既要有...

全息投影演出空间利用的巧妙艺术

全息投影演出空间利用的巧妙艺术

在当今的艺术领域,全息投影技术犹如一颗璀璨的新星,正以其独特的魅力和无限的可能性,在演出空间中掀起一场震撼的。全息投影演出空间利用的巧妙艺术,将观众带入了一个前所未有的梦幻世界,让他们感受到了科技与艺术的完美融合。全息投影技术通过激光束的干涉和衍射,将三维图像在空中呈现出来,给人一种身临其境的感觉。...

太空旅游娱乐文化体验的深度挖掘

太空旅游娱乐文化体验的深度挖掘

在当今科技飞速发展的时代,太空旅游逐渐从梦想变为现实,成为了人们瞩目的焦点。太空旅游不仅仅是一次前往宇宙的冒险,更是一种全新的娱乐文化体验,蕴含着无尽的潜力等待我们去深度挖掘。太空旅游的魅力首先在于其独特的视觉体验。当我们远离地球的大气层,置身于浩瀚的宇宙之中,那璀璨的星空、巨大的行星以及神秘的星系...

全息投影演出互动环节的精彩设计

全息投影演出互动环节的精彩设计

在当今的演艺领域,全息投影技术以其独特的魅力和震撼的视觉效果,成为了吸引观众的重要手段。而其中,互动环节的设计更是为整个演出增添了无尽的活力和趣味性,让观众仿佛身临其境,与演出内容紧密相连。全息投影演出互动环节的设计首先要注重与观众的情感连接。通过巧妙的互动设计,让观众感受到自己不仅仅是旁观者,更是...

太空旅游娱乐历史文化传承的价值

太空旅游娱乐历史文化传承的价值

在人类探索宇宙的漫漫征程中,太空旅游娱乐犹如一颗璀璨的新星,逐渐在浩瀚的太空中闪耀。它不仅仅是一种新奇的体验,更是历史文化传承的重要载体,蕴含着深远的价值。从历史的角度来看,太空旅游娱乐承载着人类对未知的渴望和探索精神的传承。自古以来,人类就对头顶的星空充满了无尽的遐想和向往。从古代文明的神话传说到...