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

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

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://kejiyl.com/post/4695.html

分享给朋友:

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

新能源科技创新的发展方向

新能源科技创新的发展方向

在当今快速发展的科技时代,新能源技术正成为引领产业变革的重要力量,不断突破传统能源的局限,为人类的可持续发展开辟新的道路。新能源技术的突破首先体现在太阳能领域。近年来,太阳能光伏技术取得了长足的进步。高效的太阳能电池板不断研发出来,其光电转换效率显著提高,能够更有效地将太阳能转化为电能。从传统的单晶...

全息投影演出如何增强观众的深度参与感

全息投影演出如何增强观众的深度参与感

在当今的演艺领域,全息投影技术犹如一颗璀璨的新星,正以其独特的魅力和强大的表现力,为观众带来前所未有的视听盛宴。而其中,最为引人瞩目的便是它能够极大地增强观众的深度参与感,让每一位观众都仿佛身临其境,成为演出的一部分。全息投影演出通过将虚拟影像与真实场景完美融合,创造出了一种超越现实的视觉效果。观众...

脑机接口娱乐对心理健康的积极促进作用

脑机接口娱乐对心理健康的积极促进作用

在当今科技飞速发展的时代,脑机接口作为一项极具潜力的创新技术,正逐渐走进人们的生活,并对心理健康产生着积极而深远的影响。脑机接口娱乐,简单来说,就是通过直接与大脑进行交互来实现各种娱乐体验。这种全新的娱乐方式为人们带来了前所未有的感受和体验,对心理健康的促进作用也日益凸显。脑机接口娱乐能够帮助人们缓...

全息投影演出观众反馈机制的构建

全息投影演出观众反馈机制的构建

在当今数字化时代,全息投影技术以其独特的魅力和震撼的视觉效果,在演出领域掀起了一股新的热潮。仅仅拥有出色的全息投影演出是不够的,为了不断提升演出质量,满足观众的需求,构建一个完善的观众反馈机制显得尤为重要。观众反馈机制是演出与观众之间的重要桥梁,它能够让演出团队及时了解观众的感受、意见和建议,从而有...

脑机接口娱乐在音乐创作中的创新应用

脑机接口娱乐在音乐创作中的创新应用

在当今科技飞速发展的时代,脑机接口技术正逐渐走进人们的生活,为各个领域带来了前所未有的创新与变革。其中,脑机接口娱乐在音乐创作领域的应用,更是展现出了巨大的潜力和无限的可能性。脑机接口技术能够直接读取和解析人类大脑的神经信号,将大脑的思维活动转化为可操作的指令。在音乐创作中,这意味着音乐家们可以通过...

脑机接口娱乐在虚拟社交的创新应用

脑机接口娱乐在虚拟社交的创新应用

在当今数字化飞速发展的时代,虚拟社交已成为人们生活中不可或缺的一部分。而随着科技的不断进步,脑机接口技术的兴起为虚拟社交带来了全新的创新应用,开启了一扇通往全新娱乐体验的大门。脑机接口,作为一种能够直接读取和解析大脑信号的技术,为人们与虚拟世界的互动提供了前所未有的可能性。在虚拟社交领域,脑机接口可...