maven项目打jar包并包含所有依赖详细教程
作者:醉梦洛
maven打包生成的普通jar包,只包含该工程下源码编译结果,不包含依赖内容,下面这篇文章主要给大家介绍了关于maven项目打jar包并包含所有依赖的相关资料,需要的朋友可以参考下
背景:
基于最近项目部署,需要打jar包,然后涉及接口调用,反复测试,出现了各种问题,最后找到合理方案,特做以下总结:
一、延伸知识:Springboot打jar包命令
1.把之前打过的包通通干掉
mvn package clean -Dmaven.test.skip=true
2.重新打包
mvn package -Dmaven.test.skip=true
3. Springboot的打包插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
起初项目框架用的SpringBoot,大家都知道,它里面是有自带打包依赖,那么问题就是,用Springboot自带的依赖打成jar包,是可以放在java环境下直接运行的,但是如果用于接口调用就行不通了。SpringBoot会自带打包插件打的包不能用。将SpringBoot会自带打包插件打的包解压后会看到它的目录结构,它把包都打到BOOT-INF这个目录下了,引用的时候我们引用不到,会报“Cannot resolve symbol”的错。
注:
JAR包中的/META-INF/MANIFEST.MF元数据文件必须包含Main-Class(主类)信息。
项目所有的依赖都必须在Classpath中,其可以通过 MANIFEST.MF 指定或者隐式设置
二、想要将打的jar包用于接口调用并且还包含项目所有依赖
不会给调用方造成引入依赖或者导入外部jar包的困扰,特有以下方法:
1.在pom.xml中引入插件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <!--给jar包起的别名--> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <!--添加项目中主类--> <mainClass>com.sdt.intf.client.tools.DealConnectFile</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
注:
①.添加完插件后,就可以开始打包了,可以直接操作maven
②.可以用命令执行:
通过mvn clean compaile package 将生成两个jar 一个是没有dependence结尾的jar,这个不包含其他依赖jar的jar包,只包含主类的依赖。
另一个是以dependence结尾jar,此jar是包含了项目中所有依赖的jar包
总结
到此这篇关于maven项目打jar包并包含所有依赖的文章就介绍到这了,更多相关maven项目打jar包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!