对于菜鸟来说,网上的博客总是漏掉了一些关键步骤,我看了很多博客最终才成功把jar包打出来,用时长达2小时。过程记录如下,希望帮大家采坑。
顺便说一句啊,写代码真的要心绝对安静,否则你很难静下心来去解决这种问题,但是写代码要解决的就是这些琐碎的问题。从这个角度说,写代码绝对是修身养性,保持心灵宁静的最好方法了。
总结包括以下三部分:
- 正确步骤:着急打出jar包的只看这个
- 名词解释:知其所以然
正确步骤:
1.首先要明白,想打出一个jar包,你的src目录下面必须有两样东西
- META-INF目录(包含MAINFEST.MF文件)
- 你的多个类文件
2.点击file--project Structure--Artifacts--“+”jar from module---选择要打包的项目并设置好主类--然后选择copy to the output directory and link via manifest,点击ok;此时如果提示META-INF目录已存在,去把这个目录删了就好。
3.接下来就是重点坑了。META-INF目录其实是在src下面会自动生成的,但在如下Artifacts这个界面,却不会自动包含在jar里。这就导致了你build Artifcats的时候,打不出jar包,Out目录下面也不会出Artifacts文件夹,只有Prodcution目录。
4.这个META-INF是需要你手动加的,在MapReduce_Example.jar目录右键"create directory"名字叫META-INF,再在META-INF右键“Add Copy of”--“Directory Context”,选中src下面META-INF目录即可把内容拷贝过来。
5.回到idea主界面。点击Build→Build Artifacts(注意不是build project)…→选中你的模块→Build。等待输出结束了,可以在out目录中看到你的jar包。切换到jar包目录,运行 java -jar xxx.jar来运行你的程序把!
名词解释
如何理解概念,提炼概念重点。
- jar:jar是java专属的压缩文件,你可以直接用winrar或360解压他,会发现里面有META-INF(MAINFEST.MF)和java类。 本质类似于zip,其意义在于把多个java类及图像音频等组件打包到一个文件里,在http传输时只需请求下载一次提升效率。
- MAINFEST.MF:为什么要有这个?--》相当于jar里面所有文件的“详情单”,首先这里标明入口的主类,方便继续执行其他类和引用其他jar。(如下图)