![58683325ee4e00f84171bc58178b4841.png](https://i-blog.csdnimg.cn/blog_migrate/1f18bb6e18d0480667a30aa02044231c.jpeg)
很多时候,我们需要对编写的程序进行打包,这个时候,我们可以借助一些项目构建工具,如maven, sbt, ant等,这里我使用的是maven。
打包成可执行有主类的jar包(jar包中无依赖)
以下是配置打包成可执行,带主类的jar包:
![089d44336853fc89eb2fa91bc68b64c9.png](https://i-blog.csdnimg.cn/blog_migrate/87f341abb8ce222165c666efb5c80fc6.png)
But, 虽然现在把程序打包成了jar文件,也可以运行,但是,这个jar包是没有包含依赖的,因此,如果这个程序有其他依赖,那么在运行这个程序的时候,需要指定类目录,并且要把所有的依赖都放到类目录下去,手动添加依赖到类目录下,简直就是恶梦。。。
我曾经就这么干过,它少一个依赖,我就手动加一个到类目录,少一个,加一个,少一个,加一个,当我加了大概有10几个之后,而且还看不到尽头。。。简直要疯的节奏,然后想起之前用sbt打包,也是可以把依赖添加到jar包,心情顿时好转,赶紧google,于是找到google到了maven的官网…。顺便说一下,虽然我们google的时候,会搜索到很多结果,但很多时候,我们最好选择合适的结果进行阅读,我的一般顺序是:官方优先,StackExchange。。。
打包成带依赖的jar包
配置
不加main类而带依赖的jar包
编辑pom.xml文件,内容如下:
![f166619fc0883f22be22dae6637ebec0.png](https://i-blog.csdnimg.cn/blog_migrate/db9afc4861bceea9e288e552367e533b.jpeg)
加main类也带依赖的jar包
编辑pom.xml文件,内容如下:
![3c94f747f213d940318f7c1b864de137.png](https://i-blog.csdnimg.cn/blog_migrate/68496423894a887a939bda5c145b523e.jpeg)
值得注意的是,不要像以下那样修改pom.xml文件,那样虽然不会报错,但生成的jar包中的MANIFEST.MF
中没有主类,这样的jar包无法直接运行。
![a40da94134f750b01db9eaa88e1cfa2c.png](https://i-blog.csdnimg.cn/blog_migrate/bbc0726ce974143dccea6d16f05ea2e2.jpeg)
打包
使用以下命令打包:
mvn package
然而,当在运行操作hdfs的jar包时,我出现了以下问题:
![3c38099d7b476e7fa67d8a2f74851862.png](https://i-blog.csdnimg.cn/blog_migrate/b738cda6288a964055781ef75cff9140.jpeg)
好在有位仁兄[2]也遇到了这个问题,从而使得问题解决。解决方法如下:
![b6c96de6dac4bb4a8a337e22ed13e958.png](https://i-blog.csdnimg.cn/blog_migrate/3d4fafeb8d9450faa4e28cb7108f618b.png)
除了他之种方法之外,我也自己摸索出了一种方法,经过实践,也是可行的,我的方法如下:
找到打包好的jar包,然后使用归档管理器打开这个jar包,即“open with archive manager”,找到META-INFO/services
目录,再找到这个目录下的org.apache.Hadoop.fs.FileSystem
文件,编辑这个文件,在文件末尾加上一行:
org.apache.hadoop.hdfs.DistributedFileSystem
但是,这么修改jar的方法,不太合适,因为每生成一次,需要修改一次,所以,建议暂时使用前面那种解决方法。
作者:XGogo
来源:博客园