一、背景

最新想要修改rebeyond大佬的冰蝎项目,特地去网上搜索如何修改jar包中的源码再替换回去的方法,但由于现在的一些文章写的太烂,导致走了很多弯路,因此写下这篇快速使用IDEA修改源码并替换class文件再打成jar包的文章。

二、具体步骤

1、下载冰蝎项目jar包,放入D盘目录下:

2、使用IDEA新建一个maven项目,这里就叫test_123:

3、打开File -> Project Structure:

在Libraries中加入刚刚下载的jar包:

加载完如下,点击Apply和OK即可。

此时整个项目结构如下:

4、假设现在想要修改net.rebeyond.behinder.core包中的ShellService类,就需要在我们的项目中创建一个同名的包以及同名的ShellService类,然后将jar中的ShellService类的内容复制过去:

5、看到复制过去之后,代码中有报错,此时就需要我们自己修改这些报错。

这里我遇到的大致有两类报错:

  • 一类是java版本的报错,整个项目使用的jdk版本是1.5,但某些函数只能在jdk1.8中使用

    此时就需要修改项目的编码,这里主要也是在File->Project Structure -> Modules中调整Language Level为jdk 8:

    然后在Project一项,也修改成jdk8:

    在File -> Settings中找到Java Compiler项,修改编译环境为1.8:

  • 另一类问题是通过class文件反编译得到的java源码中存在变量重复声明的问题:

    这里只需要删除重复多余的声明即可。

6.修改完错误之后,即可编译项目:

7.编译完成之后,在target目录会生成ShellService.class文件:

8、解压jar包,然后用刚刚生成的ShellService.class替换掉jar包解压之后文件夹内net/rebeyond/behinder/core目录下的ShellService.class:

9、回到D:\Test\Behinder_v3.0_Beta_6_win (1)目录下,进入cmd窗口,使用下面的命令重新生成jar包:

jar cfm test.jar Behinder_v3.0_Beta6_win\META-INF\MANIFEST.MF -C Behinder_v3.0_Beta6_win\ .

执行完会在当前目录生成一个test.jar的文件,该jar包即为修改源码并替换class文件之后的jar包。

三、参考

1、https://www.javatt.com/p/83085

IDEA修改jar包中class文件后重新生成jar包的更多相关文章

  1. jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件

    虽然现在已经有各种智能的IDE可以为我们生成jar包,war包,ear包,甚至带上了自动替换,部署的功能.但一定会有那么些时候,你需要修改或是替换jar包,war包,ear包中的某个文件而不是整个重新 ...

  2. jar包中File 文件找不到的异常分析与解决

    源链接: http://hxraid.iteye.com/blog/483115#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会 ...

  3. java读取jar包中的文件

    随手写了一个java小工具,maven打包成功后,发现工具总是读不到打在jar包中的文件信息,要读取的文件位于 /src/main/resources 目录下,打包成功后,文件就在jar包中根目录下, ...

  4. 使用命令动态更新JAR包中的文件

    动态更新JAR包中的文件,经本人实际测试可正常执行! 一.查询jar包中要替换的文件位置 jar  -tvf  gateway.jar  |  grep  topjui.config.js 二.在当前 ...

  5. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  6. cpio - 存取归档包中的文件

    总览 (SYNOPSIS) cpio {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message] [-O [[user@]host:]a ...

  7. 『学了就忘』Linux软件包管理 — 44、在RPM包中提取文件

    目录 1.RPM包中文件的提取 2.在RPM包中提取文件的操作 (1)cpio命令介绍 (2)提取RPM包中文件 1.RPM包中文件的提取 为什么要做这个事呢? 在操作Linux系统的时候误删除一个文 ...

  8. 修改win7电脑中所有文件的默认查看方式

    怎么修改win7电脑中所有文件的默认查看方式   如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“ ...

  9. 修改了系统自带头文件后,Xcode会报错

    1.Xcode自带头文件的路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Develo ...

随机推荐

  1. WSL2 新建dotnet core mvc项目

    我们知道dotnet sdk会有很多命令,但在我们完全不知道如何去使用哪个命令. 我们使用dotnet -h进行查看: 我们看到SDK的new命令,但是new命令又如何使用呢? 我们再次使用帮助: 可 ...

  2. ABP设置管理模块: Abp.SettingUi

    开源地址: https://github.com/EasyAbp/Abp.SettingUi 一直想宣传一下SettingUi, 因为 懒 工作比较忙, 所以才拖到今天. 关于ABP就不需要我再多废口 ...

  3. CF1478-A. Nezzar and Colorful Balls

    CF1478-A. Nezzar and Colorful Balls 题意: 有\(n\)个球,每个球上面都有一个数字\(a_i\),这些数字是组成的序列是非递减的.现在你要给每个球涂色,你必须保证 ...

  4. Django实现文件上传

    一.HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  5. leetcode 39 dfs leetcode 40 dfs

    leetcode 39 先排序,然后dfs 注意先整全局变量可以减少空间利用 class Solution { vector<vector<int>>ret; vector&l ...

  6. Redis 集合统计(HyperLogLog)

    统计功能是一类极为常见的需求,比如下面这个场景: 为了决定某个功能是否在下个迭代版本中保留,产品会要求统计页面在上新前后的 UV 作为决策依据. 简单来说就是统计一天内,某个页面的访问用户量,如果相同 ...

  7. keras自定义网络层

    在深度学习领域,Keras是一个高度封装的库并被广泛应用,可以通过调用其内置网络模块(各种网络层)实现针对性的模型结构:当所需要的网络层功能不被包含时,则需要通过自定义网络层或模型实现. 如何在ker ...

  8. rrweb 用户操作录制和还原

    rrweb 用户操作录制和还原 demos https://www.rrweb.io/replay refs https://www.rrweb.io/ xgqfrms 2012-2020 www.c ...

  9. JS Object Deep Copy & 深拷贝

    JS Object Deep Copy & 深拷贝 针对深度拷贝,需要使用其他方法 JSON.parse(JSON.stringify(obj));,因为 Object.assign() 拷贝 ...

  10. 一文搞懂 js 中的各种 for 循环的不同之处

    一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...