maven打包NoClassDefFoundError
刚刚在学习怎么使用maven,可以编译通过,但是运行命令java -jar xxx.jar
的时候却报了错误NoClassDefFoundError
踩坑开始
踩坑第一步是去stack overflow 找了一个答案,使用插件maven-shade-plugin
,其实这个也是正确的答案
这是正确答案
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
我踩坑在哪里呢?
我当时不了解xml节点<pluginManagement>
下面的plugins
节点
- 这个是错误的写法
<project>
...
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
...
</project>
最终我的写法
最终写法就是得放在build
节点的下一级,不能放在pluginManagement
里面的<plugins>
节点里面
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
...
</pluginManagement>
</build>
...
</project>
然后运行mvn package
就能打包所有依赖进去