当前位置: 首页 > article >正文

Ant + WebLogic 环境下的 JDK8 → JDK17 迁移调查

Ant WebLogic 环境下的 JDK8 → JDK17 迁移调查使用 jdeps / jdeprscan 进行依赖关系分析的实践记录1. 整理调查对象本次处理的是日本业务系统中常见的以下构成Java EE 系统Ant 构建WebLogic Server 12c对应 JDK8Eclipse 开发环境无依赖管理工具不使用 Maven / Gradle注意WebLogic Server 对 JDK17 的支持需要14.1.1.0 → 14.1.2.0 以上版本。请确认现有的 WebLogic 版本必要时请考虑升级。本次工作是 JDK8 → JDK17 迁移的前期调查。首先进行的是「确定扫描对象」的整理。本系统以 EAR 格式进行分发内部包含WAREJB jar等多个模块。因此首先展开 EAR将本次的调查对象整理为以下两类classes 目录已编译的 class 文件各种 jar 文件也就是说本次的任务是以从 EAR 分解得到的 class / jar 为对象调查与 JDK17 的不兼容性。2. jdeps 与 jdeprscan 的作用在开始扫描之前先整理一下两个工具的作用。工具目的jdeps调查 jar / class 所依赖的类和模块jdeprscan检测 Deprecated / Removed API 的使用位置作业流程如下首先使用jdeps掌握依赖关系补全 classpath然后使用jdeprscan检测 JDK17 不兼容的 API3. 确定依赖关系构建 classpath在使用jdeps或jdeprscan时如果无法解析依赖的类会出现以下错误class … not found由于本项目不使用 Maven因此不存在pom.xml或 dependency tree 这样的依赖管理。在本项目中最初的 classpath 设定仅使用了服务启动时.bat文件中所记载的内容从日志中获取。然而在扫描第一个 jar 文件时便出现了上述错误。原因在于日志中记载的 classpath 仅包含 EAR 文件启动所需的依赖而当前扫描对象是 jar 文件因此需要的是 jar 文件构建时所使用的依赖。为此查阅了 Ant 的build.xml将 jar 构建时所使用的依赖补充到了 classpath 中。即便如此在后续扫描中该错误再次出现。借助jdeps的输出信息与 AI 辅助找到了最后一块拼图——散布在各个 WAR 包中的lib目录。这说明同一 EAR 包内的各模块之间存在依赖关系。将各 WAR 的lib也加入 classpath 后class not found的错误得以彻底解决。然而另一个问题随之出现。扫描结果中出现了「エラー Methodref ……を解決できません」。原因是 classpath 中存在同名但版本不同的 jar 包。由于 classpath 按从左到右的顺序进行类的检索旧版 jar 被优先引用。而应用程序实际运行时使用的是新版 jar——新版相较旧版新增了方法的重载オーバーロード。因此jdeprscan 参照旧版 jar 进行扫描时该重载方法不存在从而导致了解析失败。Ant 项目的注意事项Ant 项目中不存在 Maven 的 dependency tree因此还原 classpath 是最大的工作量。本次案例中通过整合以下内容构建了可供扫描的 classpath启动脚本中的 classpath项目内lib目录EAR 展开结果的 jar各 WAR 内的lib实行命令示例set cplib\*;modules\*;thirdparty\* set JAR扫描对象的绝对路径 set OUT日志输出目标的绝对路径 :: 依赖调查 %JAVA_17_HOME%\bin\jdeps.exe --class-path %cp% %JAR% %OUT% 214. API 扫描jdeprscanclasspath 构建完成后执行jdeprscan。set cplib\*;modules\*;thirdparty\* set JAR扫描对象的绝对路径 set OUT日志输出目标的绝对路径 :: 执行扫描必须指定 --class-path 和 --release %JAVA_17_HOME%\bin\jdeprscan.exe --class-path %cp% --release 17 %JAR% %OUT% 21注意省略--class-path选项辛苦构建的 classpath 将完全不被使用请务必明确指定。同时明确指定--release 17可以从命令中一目了然地看出正在与 JDK17 的废弃 API 列表进行对照也能防止在其他环境复用时发生误操作。通过将日志输出到文件可以在之后随时确认。扫描结果示例class com/example/app/LegacyUtil uses deprecated method java/lang/Thread::stop()V class com/example/app/DataHelper uses deprecated method java/util/Date::init(III)V class com/example/app/XmlParser uses deprecated class com/sun/org/apache/xml/internal/utils/URI注意输出中包含forRemovaltrue的项目是预计在未来版本中被删除的 API请优先处理。本次幸运的是仅存在对旧 API 的引用部分 deprecated API因此不需要大规模的依赖更新或代码修改。5. 应对大量代码修改JDK 迁移还有另一个课题那就是大量的代码修改。确认jdeprscan的结果后会在多处检测到 Deprecated API / Removed API。由于手动修改这些内容非常耗时目前正在开发一款使用 PowerShell v5.1 的辅助工具。工具的使用流程如下解析扫描结果提取修改候选将 Evidence 输出到 CSV人工审查仅自动应用已批准的修改也就是说采用AI 自动化 人工审查的形式。关于该工具的详细内容将在另一篇文章中介绍。总结对于 Ant WebLogic 这样的遗留 Java EE 系统JDK 迁移的第一道门槛就是掌握依赖关系。本次调查采取了以下步骤展开 EAR整理扫描对象从启动脚本、build.xml、EAR 展开结果、各 WAR 的lib构建 classpath使用jdeps --class-path调查、补全依赖关系使用jdeprscan --class-path --release 17检测 API 不兼容性对于不使用 Maven 的系统正确构建 classpath以及必须明确指定--class-path是非常重要的。目前正在开发使用 PowerShell 的辅助工具关于该工具也将在另一篇文章中介绍。本文转载自作者的 Zenn 主页https://zenn.dev/lockie2022

相关文章:

Ant + WebLogic 环境下的 JDK8 → JDK17 迁移调查

Ant WebLogic 环境下的 JDK8 → JDK17 迁移调查 使用 jdeps / jdeprscan 进行依赖关系分析的实践记录1. 整理调查对象 本次处理的是日本业务系统中常见的以下构成: Java EE 系统Ant 构建WebLogic Server 12c(对应 JDK8)Eclipse 开发环境无依…...

C# WPF上位机开发:FreeSql+MVVM实战避坑指南(含MySQL/SQLServer双数据库配置)

C# WPF上位机开发:FreeSqlMVVM实战避坑指南(含MySQL/SQLServer双数据库配置) 从Java转型到C# WPF开发的工程师们,往往会在MVVM架构下遇到数据库集成的各种"坑"。本文将分享如何用FreeSql这一轻量级ORM框架,在…...

松材线虫病检测仪 松材线虫快速检测系统

松材线虫病检测仪之所以能实现超高精准度,核心依托行业领先的实时荧光定量PCR分子检测技术,从分子层面锁定病害痕迹,彻底杜绝经验判断带来的误差,这也是其灵敏度远超传统检测设备的核心原因。设备通过专业流程提取松木样本中的遗传…...

Fish-Speech-1.5镜像:基于Xinference部署,稳定高效的TTS服务

Fish-Speech-1.5镜像:基于Xinference部署,稳定高效的TTS服务 想不想拥有一个能说12种语言、声音自然流畅的AI语音助手?无论是给视频配音、制作有声书,还是开发智能客服,高质量的语音合成都是关键。今天,我…...

电池充电放电控制的Matlab/Simulink仿真模型搭建

电池充电放电控制 Matlab/simulink仿真搭建模型: 介绍:该模型介绍了在案例研究中实现的电池充电/放电控制,该案例研究涉及直流总线 (恒定电压)、电池、公共负载和双向双开关降压-开压 DC-DC 转换器。 电池充 电和放电的…...

如何通过microG实现Android自由生态:终极解决方案完全指南

如何通过microG实现Android自由生态:终极解决方案完全指南 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore 在当今Android生态中,设备制造商与Google服务的深度绑定常…...

通义千问3-Reranker-0.6B效果实测:中英文混合文本排序案例分享

通义千问3-Reranker-0.6B效果实测:中英文混合文本排序案例分享 你是否遇到过这样的烦恼:在一个文档库里搜索“如何配置TensorFlow GPU内存”,结果返回的文档里既有英文技术说明,也有中文的模型可视化教程,甚至还有完全…...

Chatwoot开源客服系统Docker部署全攻略:从零搭建到邮件配置

Chatwoot开源客服系统Docker部署实战:从零搭建到邮件服务集成 在当今数字化客户服务领域,开源解决方案正成为企业降本增效的重要选择。Chatwoot作为一款现代化的开源客服平台,以其多渠道集成、自动化工作流和实时分析功能脱颖而出。本文将带您…...

Windows平台最全ico制作指南:从icofx3安装到多尺寸图标导出

Windows平台ICO图标制作全流程指南:从工具选择到专业输出 在Windows生态中,图标(ICO)作为软件视觉识别的第一触点,直接影响用户对产品的第一印象。一个专业的开发者不仅需要关注代码质量,更要掌握图标制作的核心技能。本文将带您深…...

图像篡改检测技术详解(下篇)--文本与金融图像篡改检测

在图像篡改检测技术系列分享的上篇中,我们梳理了通用检测算法的技术脉络。然而,当这些算法从自然场景迁移到金融文档图像时,性能往往急剧下降——这不是算法本身的失败,而是场景迁移带来的“维度之困”。通用算法在金融场景中的局…...

多线程优化:DamoFD-0.5G高并发推理的性能调优实践

多线程优化:DamoFD-0.5G高并发推理的性能调优实践 1. 引言 在实际的人脸检测应用场景中,我们经常需要同时处理大量的图片请求。比如一个智能相册应用,用户上传几百张照片后,系统需要在短时间内完成所有人脸的检测和关键点定位。…...

Java高频面试题(十一):SpringCloud微服务核心技术全解析

Spring Cloud技术框架(动态路由、灰度发布、流量控制、熔断降级、链路追踪等)微服务概念每一个微服务的开发其实跟我们Spring boot的单体项目开发是一样的,只是开发的时候,我们就需要考虑,单体的项目多了,我们如何来管控&#xff…...

【科研人聊方法】断点回归:用“自然实验”搞定因果推断

本期嘉宾:老章(某985高校应用经济学博士,用Stata做断点回归研究3年,发表CSSCI论文5篇) 主持人:小研(科研人小助手)小研:老章您好,很多刚接触实证研究的同学对…...

手把手教你用国内镜像源安装Selenium(避坑指南+完整流程)

国内开发者高效安装Selenium全攻略:镜像源配置与避坑实践 每次在Python项目中引入Selenium时,你是否也遇到过因网络问题导致的安装失败?作为国内开发者,直接通过官方源安装Python包往往速度缓慢甚至无法完成。本文将带你彻底解决这…...

土豆矮砧密植水肥一体化系统:从安装到高产的实操手册

导读你是否还在为土豆种植费工、产量低发愁?传统大水漫灌既浪费水又烧苗,人工施肥不均还累人。现在有一种“懒人种植法”——矮砧密植(Dwarf rootstock dense planting) 搭配水肥一体化(Fertigation)&#…...

Stata门槛模型实操指南:从原理到论文应用

作为一个用Stata做面板数据研究快4年的“老玩家”,我必须说门槛模型是我工具箱里的“宝藏工具”——它完美解决了传统线性回归模型忽略“结构突变”的痛点,比如“当经济发展水平达到某个阈值后,产业结构对经济增长的影响会发生显著变化”。今…...

智能充电管理系统(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T0892204C设计简介:本设计是基于单片机的智能充电管理系统,主要实现以下功能:1.通过按键来切换显示电压电流与电池电量预…...

YOLOv10赋能工业质检:快速识别微小缺陷的落地案例

YOLOv10赋能工业质检:快速识别微小缺陷的落地案例 1. 工业质检的挑战与机遇 在制造业数字化转型浪潮中,产品质量检测一直是自动化改造的难点。传统人工质检面临三大痛点: 效率瓶颈:熟练工人每分钟最多检测20-30个零件&#xff…...

NotaGen保姆级教程:无需乐理知识,快速生成肖邦风格钢琴曲

NotaGen保姆级教程:无需乐理知识,快速生成肖邦风格钢琴曲 你是不是也曾幻想过,自己也能像肖邦那样,坐在钢琴前即兴创作出优美的旋律?但一想到复杂的乐理知识、和声学、曲式结构,就望而却步了。现在&#x…...

CiteSpace关键词聚类图谱实战解析:从数据预处理到可视化解读

CiteSpace关键词聚类图谱实战解析:从数据预处理到可视化解读 作为一名经常和文献数据打交道的科研人员,我深知在浩如烟海的学术文献中快速把握一个领域的研究脉络是多么重要。CiteSpace作为一款强大的文献计量与可视化工具,其关键词聚类图谱功…...

ProxmoxVE Helper-Scripts 实战指南:高效管理家庭实验室的自动化解决方案

ProxmoxVE Helper-Scripts 实战指南:高效管理家庭实验室的自动化解决方案 【免费下载链接】ProxmoxVE Proxmox VE Helper-Scripts (Community Edition) 项目地址: https://gitcode.com/gh_mirrors/prox/ProxmoxVE 一、核心功能解析:从脚本架构到…...

嵌入式硬件工程师如何从菜鸟到专家?5年实战经验分享

嵌入式硬件工程师如何从菜鸟到专家?5年实战经验分享 刚入行时,我连示波器的触发模式都调不准,现在却能独立设计工业级嵌入式系统。这五年踩过的坑、熬过的夜、烧坏的芯片,都成了最宝贵的经验。如果你也处在职业迷茫期,…...

MMPose编解码器深度对比:Heatmap/SimCC/RLE三种方案在COCO数据集上的性能实测

MMPose编解码器性能实测:Heatmap/SimCC/RLE在COCO数据集上的全面对比 当开发者面临姿态估计算法选型时,编解码器的选择往往成为影响模型性能的关键因素。本文基于MMPose框架,在相同硬件条件下对Heatmap、SimCC和RLE三种主流编解码方案进行系统…...

传统问卷“手绘蓝图”VS书匠策AI“智能织网”:解锁科研新速度

在科研的浩瀚宇宙中,问卷设计如同搭建一座通往数据星辰的桥梁,既需要精准的规划,又离不开高效的执行。昔日,研究者们手持“手绘蓝图”,一笔一划勾勒出问卷的轮廓;而今,书匠策AI科研工具以其智能…...

Halcon图像分割实战:threshold、dyn_threshold等6种算子对比与选型指南

Halcon图像分割实战:6种阈值算子深度解析与工业场景选型策略 在工业视觉检测领域,图像分割的质量直接决定了后续特征提取和缺陷识别的准确性。作为Halcon核心功能模块,阈值分割算法家族提供了从基础到高级的多种解决方案。本文将打破常规参数…...

智科毕业设计最新课题思路

1 引言 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际应用需求&#xff…...

别用买白菜的劲儿,去谈理想

我们公司楼下菜市场有个王阿姨,每次称完菜总要硬塞根葱,惹得老太太们天天绕远来找她买菜。我当主管头两年却连王阿姨都不如,以为团队凝聚力就是每月聚餐的烤羊腿,就是年终奖数字后头多添个零。带项目组第一年,我靠着批…...

文件即真理:深度解析 OpenClaw 的 Markdown 记忆系统

大多数 AI Agent 的记忆,存在于对话窗口里,窗口关闭,记忆消失。 OpenClaw 选择了一条不同的路:把文件系统当成 Agent 的大脑。 一、问题的起点:AI Agent 为什么会"失忆"? 用过 AI Agent 的人都有…...

MedGemma Medical Vision Lab保姆级教程:Windows WSL2环境下GPU加速部署全流程

MedGemma Medical Vision Lab保姆级教程:Windows WSL2环境下GPU加速部署全流程 想在自己的电脑上搭建一个能看懂X光片、CT影像的AI助手吗?今天,我就带你一步步在Windows系统上,通过WSL2和GPU加速,把MedGemma Medical …...

告别Windows AI功能:RemoveWindowsAI实现系统优化的新方案

告别Windows AI功能:RemoveWindowsAI实现系统优化的新方案 【免费下载链接】RemoveWindowsAI Force Remove Copilot and Recall in Windows 项目地址: https://gitcode.com/GitHub_Trending/re/RemoveWindowsAI 当Windows系统不断集成AI功能,您是…...