前言
相信搞 java 的都用过第三方的 jar 包,例如 log4j、jedis 等等。
但大家都有自己动手编译打包过一个 jar 吗?
过程中是否有遇到过这样一个问题:打包的 class 文件里面引入了另一个第三方的包,而并没有将他引入将要打包的 jar,这时候编译是报错的。
一、准备工作
这篇文章我将用 tomcat8.5-redis-session-manager 来编译打包成 jar
为什么要下载 tomcat 的源码?
因为要先将 tomcat8.5-redis-session-manager 编译成 class 文件,而他里面的代码用到了 tomcat 的类,直接编译会报错找不到类。
- 搭建好 tomcat 源码启动,不是本文的重点,大家可以参考这篇帖子 https://blog.csdn.net/qq_35448165/article/details/103792637
二、操作过程
1. 编译 class 文件
idea 打开 tomcat 的源码,在 java 目录下新建 com/s/tomcat/redissessions
把 tomcat8.5-redis-session-manager 源码下对应的 java 文件复制过去
这时候 RedisSessionManager.java 是报错说找不到类的,引入 tomcat8.5-redis-session-manager 下 lib 目录的两个 jar 包
编译 class 文件
这时候 target 目录已经生成了我们想要的 class 文件
到这里 tomcat 的源码已经完成了他的使命,我们不再用到他了
2. 移动 class 文件
idea 导入 tomcat8.5-redis-session-manager
将刚才 target 目录下的 com/s/tomcat/redissessions 整个目录包括 class 文件复制粘贴到这里
因为 java 文件没用了,我删除了
注意:下面的 src 目录因为缺少类是会报错的,不用理会
3. 编译打包 jar
- 打开 Project Structure ——> Artifacts ——> 添加一个 empty 的 jar
- 写上名字
- 添加目录
注意:这个目录必须对应上你生成的 class 文件的 package
- 把 class 文件放进去
-
新建一个 lib 目录放进去刚才的两个 jar 包
-
鼠标点击 jar , 创建 MANIFEST.MF 文件
点击 OK 保存关闭窗口。一切准备就绪! -
先 build 一下项目
-
build Artififacts
这时候,out 目录下的 artifacts 目录下就有了我们打包的 jar
总结
欢迎指出我的错误