使用jd-gui反编译修改jar包里的.class并重新生成新jar问题

 更新时间:2024年05月20日 12:04:54   作者:wetools.online  
这篇文章主要介绍了使用jd-gui反编译修改jar包里的.class并重新生成新jar问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

准备工具:

jd-gui.exe反编译工具

下面以我本地修改graphql-java-15.0.jar包为例:

1.准备jar包

新建origin文件夹

将jar包通过win.rar或当前文件夹cmd运行解压命令jar -xvf graphql-java-15.0.jar解压到origin文件夹内

2.使用 jd-gui工具

打开graphql-java-15.0.jar

假如我要修改Assert.class,不要在 jd-gui工具里面修改,先ctrl+s保存要修改的文件到某目录

我保存在跟graphql-java-15.0.jar同目录下

3.使用文本编辑工具(我用nodepad)

修改java文件里的某段逻辑,然后通过命令重新编译该java文件为class文件

javac -cp graphql-java-15.0.jar Assert.java   //  -cp graphql-java-15.0.jar  表示Assert.java编译时依赖graphql-java-15.0.jar

4. 用编译好的Assert.class

替换掉原先解药的origin目录里的,使用命令将origin目录里的文件打包为新的jar包:

先进入到origin,执行打包命令:

jar -cvfm0 graphql-java-15.0-modify.jar META-INF/MANIFEST.MF ./

至此便生成新的jar包

5. 引用修改后的jar包

将jar包放在项目lib,修改pom文件

注意!!!

原本通过pom引入的jar包,如果有外部包,要手动引入,我们修改后引入的graphql-java-15.0-modify.jar不会自动导入这些外部依赖包

在pom文件引入:

<!--graphql-java-15.0.jar依赖的其他jar begin-->
		<dependency>
			<groupId>org.antlr</groupId>
			<artifactId>antlr4-runtime</artifactId>
			<version>4.7.2</version>
		</dependency>
		<dependency>
			<groupId>com.graphql-java</groupId>
			<artifactId>java-dataloader</artifactId>
			<version>2.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.reactivestreams</groupId>
			<artifactId>reactive-streams</artifactId>
			<version>1.0.3</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.29</version>
		</dependency>
		<!--graphql-java-15.0.jar依赖的其他jar end-->

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java编程—在测试中考虑多态

    Java编程—在测试中考虑多态

    这篇文章主要介绍了Java编程—在测试中考虑多态,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java处理不可见特殊字符要点解析

    Java处理不可见特殊字符要点解析

    这篇文章主要介绍了Java处理不可见特殊字符要点解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java中常见的5种WEB服务器介绍

    Java中常见的5种WEB服务器介绍

    这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat、Resin、JBoss、WebSphere、WebLogic,需要的朋友可以参考下
    2014-07-07
  • Java实现的简单掷骰子游戏示例

    Java实现的简单掷骰子游戏示例

    这篇文章主要介绍了Java实现的简单掷骰子游戏,涉及Java随机数的简单生成、运算与判定相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • SpringBoot项目启动慢的5个优化技巧

    SpringBoot项目启动慢的5个优化技巧

    SpringBoot以其约定优于配置的理念和快速开发的能力,已成为Java生态中最受欢迎的框架之一,然而,随着项目规模的扩大,许多开发者会发现一个令人头疼的问题:应用启动时间越来越长,本文将深入分析SpringBoot启动慢的根本原因,并分享5个经过实战验证的优化技巧
    2026-03-03
  • SpringMVC+MyBatis实现多数据源切换

    SpringMVC+MyBatis实现多数据源切换

    在企业级应用开发中,经常需要处理来自不同数据库的数据,为了满足这一需求,我们可以通过配置多个数据源来实现对不同数据库的访问,下面我们来看看具体实现吧
    2025-01-01
  • JAVA中的Configuration类详解

    JAVA中的Configuration类详解

    这篇文章主要介绍了JAVA中的Configuration类详解,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • SpringCloud微服务 Sentinel 实战指南

    SpringCloud微服务 Sentinel 实战指南

    文章主要介绍了Sentletinel在微服务中的应用及工作原理,涵盖了流控规则、熔断降级、授权控制等内容,强调了通过合理的限流和降级策略来保护系统稳定运行,感兴趣的朋友跟随小编一起看看吧
    2026-05-05
  • spring boot如何指定启动端口

    spring boot如何指定启动端口

    这篇文章主要介绍了spring boot如何指定启动端口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Spring Boot 实现Restful webservice服务端示例代码

    Spring Boot 实现Restful webservice服务端示例代码

    这篇文章主要介绍了Spring Boot 实现Restful webservice服务端示例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11

最新评论