springBoot项目只有打包好的jar,没有源码,在IDEA中调试代码(一)中,详细介绍了只有jar包没有源码的情况下在IDEA中调试代码。文章在项目里面新建包,复制代码一节介绍的方式是复制jar包中代码和资源文件到src/main目录下。这种方式好处就是可以改jar包里面的代码,缺点就是当jar包中的类过多时,会耗费大量的时间来复制。而且如果代码是做了混淆等处理,通过复制jar包中的代码这种方式就不可行,因为反编译出来的代码可能是错误的。
有时候,我们只是想debug,不想通过复制类的方式来运行,就需要通过其他方式来达到目的。
首先,之所以第一篇文章会采用复制的方式,是因为当时发现把所要运行的jar包也当作依赖放到libs中,运行代码会提示类找不到或缺失一些什么配置,当时没时间排查是什么问题,就采用了复制代码的方式。
这里介绍第二种方式,这里就不再详细介绍1、2、3步的操作了,具体请看第一篇文章。
第4步是重点,第4步是重点,第4步是重点
假设我们有一个a.jar

  1. 解压jar包
    解压a.jar,打开BOOT-INF目录,会看到一个lib目录,还有一个classes目录,lib目录里面的jar就是a.jar所需要三方依赖,classes里面的就是源代码打包之后的class文件;
  2. 新建一个空的maven项目
    也可以新建一个普通java项目,取决于自己,如果想让IDEA识别成springBoot项目,就得弄成maven项目,然后引入相关依赖;注意,每次刷新了maven之后,libs里面的依赖可能要重新添加成项目依赖,这个估计是IDEA的bug。
  3. 项目根目录下面新建libs目录
    把前面解压的lib目录里面的所有jar复制到libs目录里面去,然后添加成项目依赖。可以选中整个libs里面的jar点击添加,也可以选中libs点击添加。
    在这里插入图片描述
  4. 解压的文件做个处理后重新压缩成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包里面,和其他依赖一样,加入到项目依赖中
  5. 在项目里面新建包,复制启动类
    如果想改一些配置文件,还可以复制一些配置文件过来
  6. 启动项目
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐