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


    一、背景

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

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

    二、反编译

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

    1. 在idea中找到decompiler插件

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

     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包,解压它,得到如下代码

     三、运行代码

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

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

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

    四、重新打包

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

    1. 直接通过maven package打包

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

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

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

    2.  在pom中加manifest配置

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.maven.plugins</groupId>
    5. <artifactId>maven-assembly-plugin</artifactId>
    6. <configuration>
    7. <descriptorRefs>
    8. <descriptorRef>jar-with-dependencies</descriptorRef>
    9. </descriptorRefs>
    10. <archive>
    11. <manifest>
    12. <mainClass>com.xxx</mainClass>
    13. </manifest>
    14. </archive>
    15. </configuration>
    16. <executions>
    17. <execution>
    18. <id>make-assembly</id>
    19. <phase>package</phase>
    20. <goals>
    21. <goal>single</goal>
    22. </goals>
    23. </execution>
    24. </executions>
    25. </plugin>
    26. </plugins>
    27. </build>

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

    3. 手动生成MANIFEST

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

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

     

     

     bulid完,会生成一个jar包

     这个jar包也可以运行,不过生成的名称是xxx.jar, 给我的jar包是xxx-0.0.1-SNAPSHOT-jar-with-dependencies.jar这种格式,所以我最后选择的是上面那种方法,在pom中加manifest配置这种方式重新打包。

  • 相关阅读:
    手把手带你体验一场属于Linux的学习之旅
    基于hough变换的多个重叠圆检测matlab仿真
    学弟:功能测试转测试开发容易吗?
    申请国外博士后的常识
    品RocketMQ 源码,学习并发编程三大神器
    自研 MySQL Binlog 分析程序介绍
    R语言中更改R包安装路径
    【C#】自动升级工具
    PHP毕业设计项目作品源码选题(8)电影院售票系统毕业设计毕设作品开题报告
    SPA首屏加载速度慢
  • 原文地址:https://blog.csdn.net/CelineT/article/details/127670178