背景
一直依赖做的maven项目几乎都是spring项目,无脑导入个spring-boot-maven-plugin就能打包到处跑了。最近做了一个java脚本程序,懒得找包一个个导入library了,直接使用了maven工程,编译运行都没问题,打包后执行报错提示:java.lang.NoClassDefFoundError
问题分析
根据上面的报错原因,是找不到我导入的maven的依赖,我很确定我在dependencies中是有导入了的,不然我开发的时候怎么执行的呢。那它还是找不到的原因,只可能是打包的时候真的没有把依赖的文件打包进去。
我们来求证一下这个推理,找到打好的包,使用压缩文件工具打开检查文件
真的除了我代码中的文件,maven依赖的包它是一个都没给我放进去,难怪会找不到文件呢
解决方案
导入maven插件工具shade即可解决该问题,在开发工具中,下面的goals -> goal中的shade会变红色,我也不知道为什么,但是我可以很确定告诉你,就是这么配置的。
还需要注意的是,这个插件与maven-jar-plugin
是要共存的,否则会无法打包。而且如果执行的时候提示没有主清单属性,则需要在maven-jar-plugin中补充mainClass属性。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addCl