执行maven install后缺失Java类,IDE中运行应用正常
解决Maven打包Jar后运行出现NoClassDefFoundError的问题
这个问题我之前开发JavaCV相关项目时也碰到过,核心原因很明确:IDE运行时会自动帮你加载所有Maven依赖的第三方库,但Maven默认打包生成的Jar只包含你自己编写的代码,不包含依赖的类文件,所以直接运行Jar时就找不到org.bytedeco.javacv.OpenCVFrameGrabber这类第三方类了。
下面给你几个靠谱的解决方案,按推荐程度排序:
方案1:使用maven-shade-plugin打包(最常用)
maven-shade-plugin会把所有依赖的类合并到你的Jar包里,生成一个包含所有依赖的可执行Jar。在你的项目pom.xml里加入以下插件配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 指定主类,这样可以直接用java -jar运行 --> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.wcapture.server.App</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
配置完成后,执行打包命令:
mvn clean package
打包完成后,在target目录下会生成两个Jar文件,其中带有-shaded后缀的就是包含所有依赖的可执行Jar,运行它:
java -jar your-project-name-shaded.jar
方案2:使用maven-assembly-plugin打包
这个插件也能生成包含依赖的Jar,配置方式如下:
在pom.xml中加入:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>org.wcapture.server.App</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
执行打包命令:
mvn clean assembly:single
运行生成的带-jar-with-dependencies后缀的Jar即可。
方案3:手动指定类路径运行(适合临时测试)
如果你不想重新打包,可以把所有依赖的Jar放在一个lib目录下(比如从Maven仓库复制),然后用以下命令运行:
# Linux/Mac系统 java -cp your-project.jar:lib/* org.wcapture.server.App # Windows系统 java -cp your-project.jar;lib/* org.wcapture.server.App
总结一下,IDE能正常运行是因为它在启动时把Maven本地仓库里的所有依赖Jar都加入了类路径,而Maven默认打包的Jar不包含这些依赖,所以必须通过插件把依赖打包进去,或者手动指定类路径才能正常运行。
内容的提问来源于stack exchange,提问作者NakedCat
相关产品推荐
相关产品推荐

