本文讲述使用IntelliJ IDEA打包Project的过程,即,打jar包。
环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1
Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机。IDEA自身运行于JDK 1.8,IDEA工程及Hadoop使用JDK 1.6。
在本系列博文的第一篇,我因不会使用IDEA打jar包,不得不直接调试代码,遇到输入路径不存在问题。今天,我打了几次jar包,结果不都满意,默认情况,IDEA把依赖的库全打包,导出的包太大,虽然可用,但是我强迫症发作,想搞个最小体积的jar包,因为服务器上已有hadoop运行需要的库文件,按理我只需打包自己的类即可。
参考VIC的博客,总算得到了仅包含自己工程的jar包了。
第一步,command + ;或File->Project Structure...打开Project Structure。
第二步,点击Artifacts,再点击Add。
第三步,在弹出菜单中选择Jar -> Empty,因为打最小体积jar包,如下图所示。
第四步,填好jar包名和输出路径,如下图所示。
第五步,在Output Layout中添加输出到jar包的模块,如下图所示。
这里,如果需要添加额外的库文件,在Mac OS X下建议使用绝对路径,像~/Desktop这种最好写成/Users/用户名/Desktop,否则在找classpath时可能找不到。
第六步,在弹出窗口中指定模块,如下图所示。
确定后,如果模块只包含一个main函数,则自动指定。否则,需要手工指定。
第七步,[可选]手工指定main函数。
一切就绪,如下图所示。
第八步,打包。
Build->Build Artifacts
在弹出菜单中,选择Build或Rebuild。
最后,因为指定了主类,则hadoop执行脚本应该忽略主类参数,即
hadoop jar [jar包] [input路径] [output路径]
如果按执行样例jar的写法hadoop jar hadoop-example-1.2.1.jar wordcount input ouput,则wordcount会被当成是输入参数,如下图所求。