前言
相信搞 java 的都用过第三方的 jar 包,例如 log4j、jedis 等等。 但大家都有自己动手编译打包过一个 jar 吗? 过程中是否有遇到过这样一个问题:打包的 class 文件里面引入了另一个第三方的包,而并没有将他引入将要打包的 jar,这时候编译是报错的。
一、准备工作
这篇文章我将用 tomcat8.5-redis-session-manager 来编译打包成 jar
- 下载 tomcat8.5-redis-session-manager 源码 下载地址
- 下载 tomcat 的源码 下载地址
为什么要下载 tomcat 的源码?
因为要先将 tomcat8.5-redis-session-manager 编译成 class 文件,而他里面的代码用到了 tomcat 的类,直接编译会报错找不到类。
二、操作过程
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
-
新建一个 lib 目录放进去刚才的两个 jar 包 -
鼠标点击 jar , 创建 MANIFEST.MF 文件 点击 OK 保存关闭窗口。一切准备就绪! -
先 build 一下项目 -
build Artififacts 这时候,out 目录下的 artifacts 目录下就有了我们打包的 jar
总结
欢迎指出我的错误
|