SpringMVC项目使用maven打可执行jar包 引用本地依赖包

          这两天使用maven项目需要打成可执行jar包,而且需要依赖本地项目jar包,然后出现了各种问题,maven打jar包后各种本地依赖包找不到;使用java打包和Eclipse导出可执行jar包后,jar包内的class文件都找不到路径。累死累活整了2天才可以正常执行。废话不多说,直接上说明:

pom.xml关键配置:

第一步:

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-shade-plugin</artifactId>
			<version>2.4.1</version>
			<executions>
				<execution>
					<phase>package</phase>
					<goals>
						<goal>shade</goal>
					</goals>
					<configuration>
						<transformers>
							<!-- 配置主程序启动入口 -->
							<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
								<mainClass>cc.eslink.etbc.StandaloneBoot</mainClass>
							</transformer>
							<!--Spring Framework的多个jar包中包含相同的文件spring.handlers和spring.schemas,如果生成单个jar包会互相覆盖。
							为了避免互相影响,可以使用AppendingTransformer来对文件内容追加合并 -->
							<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
								<resource>META-INF/spring.handlers</resource>
							</transformer>
							<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
								<resource>META-INF/spring.schemas</resource>
							</transformer>
						</transformers>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

 

  以上代码可以参考一下出处说明

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包,,成功后,

扫描二维码关注公众号,回复: 254331 查看本文章

找到导出的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方式。如果大神们有更好的方式,请留言告知,好让鄙人学习一下,谢谢。

猜你喜欢

转载自1092248215.iteye.com/blog/2339018