Skip to content

maven打包NoClassDefFoundError

Posted on:September 28, 2019 at 06:47 PM

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