weixin_44462494 2022-09-03 13:22 采纳率: 0%
浏览 49
已结题

如何覆盖rt.jar包中一个类?

  1. ideal启动springboot服务时,rt中有个类,在项目中重写了。但是没有效果,还是加载了rt.jar中的相同的类。
  2. 如何设置vm参数,加载项目中重写的相同类?
  3. maven中的jar重写后是生效的。
  4. jdk中jar包重写类没有生效,求解决方案。
  • 写回答

2条回答 默认 最新

  • 燕少༒江湖 2022-09-03 15:03
    关注

    之前用beyond compare替换过class,你可以试一下

    评论
  • 一只老狼飞起来 2022-09-03 15:08
    关注

    在我们日常的开发中,经常需要使用第三方的jar包,但是很多时候总是会发现第三方的jar包中的某一个类,有问题,但是又无法继承,因为你继承后 变成了你自己的,jar包中 调用的 还是 他自己内部包含的,如何能让 jar包中调用的类就是我们自己的呢,就是覆盖jar包中的某一个类。

    需求:京东的jar包中的 有一个类写错了,京东也不更新他的SDK,且他的SDK没有源码,这个时候的解决方案是:

    1. 找到错误的类,然后反编译拿到这个类的源码。

    2.在我们自己的项目中的src-java 目录下,新建一个 与他jar包中 同名的类,举例:

    package com.jd.open.api.sdk.internal.parser;

    img

    这样 就可以修改 这个 JsonParser类 纠正他的错误,同时其他地方不做任何改变。外部第三方的 sdk调用这个类的时候,实际上是调用我们自己修改过的,因为优先级的问题,

    class目录下的类 优先级 大于 lib下的类。这点设计的是秒啊!!!。

    img

    3.然后再打包成 root.war 就可以了。

    =============================================================================================

    以下是我自己的测试:

    1.common.jar里有一个 ApiResponse类

    2.在另一个oauth模块里 再次建立一模一样的包路径的 ApiResponse类

    3.在使用 ApiResponse类的时候 会发现他是优先 oauth里 我们自己新建的

    img

    img

    img

    img

    img

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月3日
  • 创建了问题 9月3日

悬赏问题

  • ¥30 矩阵分析与古诗词意境
  • ¥15 在win10 64位的vs打包MSI文件,放到win7 64位上安装成可执行exe文件后,点击程序不运行。
  • ¥50 大众点评用户浏览/消费记录爬虫
  • ¥15 求制作一个个人网页,
  • ¥15 寻涂色内存脚本作者有项目有市场有资源.却技术
  • ¥15 蓝桥杯c51单片机问题
  • ¥15 ajax跨域问题请求修改代码
  • ¥15 python matplotlib
  • ¥15 短信测压+语音,有偿,必须用Python
  • ¥20 COCOS2DX的protobuf协议注册函数问题