Skip to main content

maven打包NoClassDefFoundError

· 2 min read

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 就能打包所有依赖进去