springBoot项目只有打包好的jar,没有源码,在IDEA中调试代码(二)
在springBoot项目只有打包好的jar,没有源码,在IDEA中调试代码(一)中,详细介绍了只有jar包没有源码的情况下在IDEA中调试代码。文章在项目里面新建包,复制代码一节介绍的方式是复制jar包中代码和资源文件到src/main目录下。这种方式好处就是可以改jar包里面的代码,缺点就是当jar包中的类过多时,会耗费大量的时间来复制。而且如果代码是做了混淆等处理,通过复制jar包中的代码这种方式就不可行,因为反编译出来的代码可能是错误的。
 有时候,我们只是想debug,不想通过复制类的方式来运行,就需要通过其他方式来达到目的。
 首先,之所以第一篇文章会采用复制的方式,是因为当时发现把所要运行的jar包也当作依赖放到libs中,运行代码会提示类找不到或缺失一些什么配置,当时没时间排查是什么问题,就采用了复制代码的方式。
 这里介绍第二种方式,这里就不再详细介绍1、2、3步的操作了,具体请看第一篇文章。
 第4步是重点,第4步是重点,第4步是重点
 假设我们有一个a.jar
- 解压jar包
 解压a.jar,打开BOOT-INF目录,会看到一个lib目录,还有一个classes目录,lib目录里面的jar就是a.jar所需要三方依赖,classes里面的就是源代码打包之后的class文件;
- 新建一个空的maven项目
 也可以新建一个普通java项目,取决于自己,如果想让IDEA识别成springBoot项目,就得弄成maven项目,然后引入相关依赖;注意,每次刷新了maven之后,libs里面的依赖可能要重新添加成项目依赖,这个估计是IDEA的bug。
- 项目根目录下面新建libs目录
 把前面解压的lib目录里面的所有jar复制到libs目录里面去,然后添加成项目依赖。可以选中整个libs里面的jar点击添加,也可以选中libs点击添加。
  
- 解压的文件做个处理后重新压缩成jar
 区别于第一篇文章的就是这个,第一篇文章之所以当成依赖放进去之后无法找到类,是因为a.jar的结构导致的。要想当成依赖使用,源代码编译成的class(含包名)必须放在根目录,然后还需要一个META-INF目录,里面存放一个描述文件。这个可以随便找一个三方依赖解压,看一下里面的结构。
 这里随便截图一个三方依赖的jar截图
  
 具体的操作步骤如下:- 新建一个空白的目录folder
- a.jar解压的BOOT-INF/classes目录下的所有文件复制到folder目录下
- folder目录下新建一个- META-INF目录,在这个目录下面新建一个- MANIFEST.MF文件,文件内容如下(随便找一个三方依赖复制就行了):- Manifest-Version: 1.0 Archiver-Version: Archiver Built-By: name Created-By: Apache Maven 3.6.1 Build-Jdk: 1.8.0_411
- 把folder目录里面的所有文件压缩成zip,然后改名为custom.jar(文件格式从zip改成jar)
- 把这个custom.jar放到libs包里面,和其他依赖一样,加入到项目依赖中
 
- 新建一个空白的目录
- 在项目里面新建包,复制启动类
 如果想改一些配置文件,还可以复制一些配置文件过来
- 启动项目
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号