IntelliJ运行Maven项目正常,CLI执行jar报ClassNotFoundException如何解决?
你遇到的java.lang.NoClassDefFoundError: com/google/gson/Gson错误本质是打包后的JAR包没有包含Gson依赖,JVM运行时找不到对应的类。你后续配置maven-assembly-plugin后仍报错,是两处配置和操作错误导致的:
- 你把
maven-assembly-plugin放在了<pluginManagement>标签下,该标签的作用是统一声明插件版本和配置给子模块继承,不会在当前模块实际触发插件执行,因此根本没有生成带依赖的JAR包。 - 即使插件配置正确,你运行时仍然用的是原来只包含自有代码的
mia-1.0-SNAPSHOT.jar,没有使用插件生成的带所有依赖的JAR包,自然还会报错。
解决步骤
步骤1:修正pom.xml配置
将maven-assembly-plugin从<pluginManagement>下移到<build>直接子级的<plugins>标签中,同时可以指定主类避免运行时手动指定主类,修正后的<build>段配置如下:
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> </plugin> </plugins> </pluginManagement> <!-- 新增当前模块实际要执行的plugins配置 --> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <!-- 可选:指定主类,生成可直接运行的JAR --> <archive> <manifest> <mainClass>mig.O2Json</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>
步骤2:重新打包
执行命令:
mvn clean package
打包完成后,target目录下会生成两个JAR包:
mia-1.0-SNAPSHOT.jar:仅包含你自己写的业务代码,不包含第三方依赖mia-1.0-SNAPSHOT-jar-with-dependencies.jar:包含所有依赖的完整JAR包
步骤3:运行程序
直接用带依赖的JAR包运行即可:
java -jar target/mia-1.0-SNAPSHOT-jar-with-dependencies.jar
如果没有配置主类,也可以用-cp参数指定主类运行:
java -cp target/mia-1.0-SNAPSHOT-jar-with-dependencies.jar mig.O2Json
内容的提问来源于stack exchange,提问作者JJJohn
相关产品推荐
相关产品推荐

