这两天使用maven项目需要打成可执行jar包,而且需要依赖本地项目jar包,然后出现了各种问题,maven打jar包后各种本地依赖包找不到;使用java打包和Eclipse导出可执行jar包后,jar包内的class文件都找不到路径。累死累活整了2天才可以正常执行。废话不多说,直接上说明:
pom.xml关键配置:
第一步:
org.apache.maven.plugins
maven-shade-plugin
2.4.1
package
shade
cc.eslink.etbc.StandaloneBoot
META-INF/spring.handlers
META-INF/spring.schemas
以上代码可以参考一下出处说明
http://xxgblog.com/2015/08/07/maven-create-executable-jar/
以上打jar后MANIFEST.MF中没有生成Class-Path内容,下面会写到内容快速获取方式
使用mvn package命令打包成功后会在target目录下生产jar包,这个jar包暂时命名为A包
由于项目中有使用到本地的依赖包,所以执行后出现文件找不到错误,本地包即使打入jar包依然无法读取到,本人试过放入打jar包时连同依赖包一起打入到jar包内,然后配置MANIFEST.MF中calsspath,依然不管用,这里估计是我本人配置方法不对,但是不管他了。
第二步:拼接class-path所有依赖包名字
方法使用eclipse导出jar包
项目名上右键-export-java-Runnable JAR file 点击next ,launch configuration 选择你的启动main方法,export des 选择你的导出路径,(library里面我选择的是第二项package···)点击finish,导出jar包,这里命名为B包,,成功后,
找到导出的B jar包打开找到MANIFEST.MF打开复制里面的Rerc-Class-Path(我本地生成的class-path是没有值得,j)内容,复制到A jar包里面的MANIFEST.MF Class-Path下,即可。
修改执行jar中MANIFEST.MF文件
原文件内容
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dfsoft-ZYJ
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_60
Main-Class: cc.xiaobin.etbc.StandaloneBoot //程序运行入口
增加Class-Path后:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dfsoft-ZYJ
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_60
Class-Path: activation-1.1.jar alipay-sdk-java20151210120052.j
ar alipay.jar antlr-2.7.7.jar aopalliance-1.0.jar•••
Main-Class: cc.xiaobin.etbc.StandaloneBoot //程序运行入口
多个jar包之间空格隔开
第三步:放入本地依赖jar包
将本地依赖jar包放入和可执行A jar包同级目录下即可,
可执行A jar包目前在test目录下,然后把本地依赖jar包全部复制到test目录下即可
第四步:执行jar包
使用【java –jar jarName.jar参数1,参数2···】执行jar包
到这里为止,本人的jar包终于可以正常执行了,也不用报路径异常,找不到文件 ,xml解析不了这些问题了。整完才发现,原来如此简单,困扰我的主要原因就是前期找不到文件的奇怪问题,命名已经打入jar包还是出现错误,害的我整了好久。原来jar包中依赖的jar包需要和他本人同级才可以正常。
使用java方式或者eclipse导出可执行jar包后,由于项目中使用到获取文件路径的代码,导致项目运行报各种路径不对,maven打包测不会。所以本人没有使用java方式。如果大神们有更好的方式,请留言告知,好让鄙人学习一下,谢谢。