使用命令行模拟maven打包

最近和电信有一个合作的项目。所有得运行环境都必须在电信的一个内部网络环境中运行,这个内部的网络环境是和外网隔离的,操作都是通过一个堡垒机跳转进去,上传文件什么的都非常困难。

本来hadoop的运行是可以通过-libjars指定第三方依赖包,但是在电信的hadoop集群上不能够成功运行。所以每次都只能使用maven打成依赖包上传到环境上执行。

后来我就想着看看maven打包的过程都做了什么,仿照maven的执行过程写一个shell脚本就行了。通过在本地执行maven打包命令的时候打印出debug信息就看到所有的过程。

maven打包的过程(目录结构符合maven的目录结构):

  1. 首先把resources目录中所有文件和文件夹copy到将来要打包的classes文件夹中。
  2. 编译java文件夹中所有的java文件(自定义mainfest.mf)到classes文件夹中
  3. 解压所有的依赖jar包中的class文件到classes文件夹中
    4.把classes文件夹打成jar包就行了。

很多时候太依赖工具的话,就会忘了最原始也是最有效的方法。遇到问题的时候不能太惧怕去刨根问底的去理解最基本的实现。


2015-06-02 update
这两天发现使用-libjars不生效的原因可能是使用ToolRunner的时候需要指定configuration。类似
ToolRunner.run(conf, new StatisticsKeyWordsNums(), args)
然后在StatisticsKeyWordsNums的run方法中使用getConf方法得到配置信息传递到job中。

之前在ToolRunner中没有传递conf。