Jar包反编译,修改代码后,重新打jar包

这篇具有很好参考价值的文章主要介绍了Jar包反编译,修改代码后,重新打jar包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

最近遇到一个问题,需要把现有的jar包反编译成java代码,然后运行,测试,修改后再次打jar包。并不复杂的项目,只是一个很简单的main方法,并不是spring项目。可能是之前的开发走了,然后代码丢失了,只剩下客户那边有一个用的jar包。

jar包:xxx-0.0.1-SNAPSHOT-jar-with-dependencies.jar

二、反编译

先对jar包进行反编译,拿到java代码

1. 在idea中找到decompiler插件

Jar包反编译,修改代码后,重新打jar包

2. 找到这个插件的地址(在idea的安装目录中)

Jar包反编译,修改代码后,重新打jar包

 3. 新建一个文件夹(存放反编译后的代码)

例如:文件夹名称叫decompile_file

4. 开始反编译

在刚刚创建的文件夹中,右击,git bash,执行

java -cp "D:\xxx\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true Esdataproducer-0.0.1-SNAPSHOT-jar-with-dependencies.jar decompile_file

记得修改文件路径和文件名 

5. 得到反编译后的代码

文件夹中会出现一个跟反编译前名称一模一样的jar包,解压它,得到如下代码

Jar包反编译,修改代码后,重新打jar包

 三、运行代码

把反编译后的代码导入idea中,会发现,之前项目的jar包都会反编译成代码

Jar包反编译,修改代码后,重新打jar包

 我没有调试好,选择新建一个maven项目,然后把我需要的代码拷进去。

Jar包反编译,修改代码后,重新打jar包

 把需要的相关依赖放入pom中,此时,项目可以正常跑了。

四、重新打包

代码修改完成后,需要重新打包

1. 直接通过maven package打包

得到xxx-1.0-SNAPSHOT.jar, 放到服务器上执行

报错:xxx-1.0-SNAPSHOT.jar中没有主清单属性

搜了一下报错,是因为没有main-class。看了一眼之前反编译后的代码,里面有MANIFEST.MF文件,这个文件指定了main-class

Jar包反编译,修改代码后,重新打jar包

2.  在pom中加manifest配置

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.xxx</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

此时,maven package打包生成 xxx-0.0.1-SNAPSHOT-jar-with-dependencies.jar 可以使用

3. 手动生成MANIFEST

Jar包反编译,修改代码后,重新打jar包

生成 MANIFEST文件,但是此时maven package后MANIFEST文件跟生成的不一样

Jar包反编译,修改代码后,重新打jar包

还可以按照以下操作生成jar包 

 Jar包反编译,修改代码后,重新打jar包

 Jar包反编译,修改代码后,重新打jar包

 bulid完,会生成一个jar包

Jar包反编译,修改代码后,重新打jar包

 这个jar包也可以运行,不过生成的名称是xxx.jar, 给我的jar包是xxx-0.0.1-SNAPSHOT-jar-with-dependencies.jar这种格式,所以我最后选择的是上面那种方法,在pom中加manifest配置这种方式重新打包。文章来源地址https://www.toymoban.com/news/detail-400100.html

到了这里,关于Jar包反编译,修改代码后,重新打jar包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于安卓jar包修改并且重新发布

    背景: 对于某些jar包,其内部是存在bug的,解决的方法无外乎就有以下几种方法: (1)通过反射,修改其赋值逻辑 (2)通过继承,重写其方法 (3)修改jar包的源码,从根源上修复问题 对于改动量,难易程度,(1)和(2)都是比较适合的,但是,有些情况下,不能满足修

    2024年02月13日
    浏览(35)
  • 【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行

    测试环境(Linux)的代码(jar包)拉取到本地电脑(Windows10),然后连接本地电脑上的数据库并在本地电脑运行。 前提:Windows10电脑,jar包文件,本地电脑已安装好MySQL数据库。 需求:需要将下面jar包中配置文件的数据库连接地址修改成本地电脑连接地址,并把修改后的配置

    2024年02月12日
    浏览(45)
  • 【Linux】linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序

    需求:发现线上的 iotp-irsb-server-v1.0.0.2.jar 包中配置文件的日志级别配置错误,需要在线修改jar包中文件的application-prod.yml的日志级别配置,修改完成后并重启该jar包。 进入到该jar包所在的目录,使用 vi 命令打开 jar 包内文件列表。 1、vi iotp-irsb-server-V1.0.0.2.jar 如下图所示:

    2024年02月08日
    浏览(38)
  • hive 3.1.3 on spark 3.0.0 安装教程 (内附重新编译好的jar包)

    首先,如果想要在hive 3.1.3上使用spark 3.0.0,不可避免地要重新编译hive 如果只是配置了hive-site.xml和spark-defaults.conf,那么在插入测试的时候会报如下错误: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the

    2024年01月21日
    浏览(31)
  • 如何修改JAR包内的代码

    有时候由于找不到源码,只有一个jar包,但又想去修改jar包中的代码,就可以进行将jar包反编译后,修改,再重新编译的方式来实现。 一、下载反编译软件JD-GUI https://github.com/java-decompiler/jd-gui/releases 二、用JD-GUI打开所要修改代码的jar包 三、将要修改的代码复制到一个新的

    2024年02月08日
    浏览(24)
  • 外部配置文件和Class打包到jar 然后重新启动java -jar

    我这边以demo.jar和application-dev.properties配置文件为例 一.将Test1.class和Test2.class替换到jar内部 步骤1:解压原始demo.jar 将两个class文件拷贝到jar目录下后cd到文件目录执行: 步骤2:替换或添加class文件 步骤3:重新打包jar 二、优先加载外部的配置文件application-dev.properties,启动ja

    2024年01月19日
    浏览(29)
  • VS2019编译器修改背景壁纸(写代码背景不再单薄,试试换一张清晰的美女照片)

    第一步:打开vs2019编译器,在上方菜单栏找到【扩展】-【管理扩展】-【联机】,在右方搜索栏搜索“claudiaIDE”,找到ClaudiaIDE 2019,点击下载 第二步:下载完成后,关闭所有的VS文件,关闭VS后回到桌面,发现有一个“VSIX Installer”的弹窗,选择“Modify”进行安装,等到修改完

    2023年04月21日
    浏览(43)
  • 关于jar包的命令:运行jar包时指定端口、直接修改jar包里的配置文件

    如下:指定端口为8081,不管jar包里面之前是指定了什么端口号,最终访问服务时还是以8081这个端口进行访问 vim进入jar包后,会有类似如下的的内容 在定位到具体某行(文件名)后,该文件会有提示,直接回车进入编辑模式,即可编辑了

    2024年02月12日
    浏览(37)
  • mvn build jar依赖和源码本身分开。减轻编译后的jar大小

    问题场景:平时在springboot项目中,打jar包都是默认把开发的代码和依赖jar包都打到一个jar包里,导致每次打包费时而且jar包还很大,升级一下都要把一个很大的包拷来拷去。如果是修改问题需要频繁替换jar包,那简直要疯 解决方案:把代码包打成我们需要的jar包,把依赖的

    2024年02月14日
    浏览(31)
  • 修改jar包内容

    windows下修改jar包的内容: 1、使用winrar解压jar包,或者使用 jar -xvf xxx.jar 命令解压 2、进行需要的修改 3、cmd中进入解压的目录 4、运行命令 jar -cvfm0 xxx.jar META-INF/MANIFEST.MF ./ 解压 注意要加 m 参数,指定清单文件,否则生成的jar包无法运行。 参数解释: c 创建一个jar包 v 输出详

    2024年02月05日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包