Maven Assembly Plugin构建Fat Jar时未包含项目自身类导致主类找不到的解决方法
解决Maven Assembly Plugin生成Fat Jar不包含项目自身类的问题
我之前也碰到过一模一样的问题,核心是两个细节没处理好,咱们一步步来解决:
问题根源分析
你生成的Fat Jar里只有第三方依赖、没有自身项目类,导致主类找不到,主要是这两个原因:
- 插件版本不一致:你在
<pluginManagement>里定义的maven-assembly-plugin版本是3.3.0,但实际使用的<plugins>块里却用了3.0.0,版本不匹配会导致插件无法正确读取项目编译后的class文件。 - 构建命令顺序问题:直接执行
mvn assembly:single时,Maven没先完成项目的编译、打包步骤,assembly插件找不到target/classes目录下的自身类文件,自然没法打包进去。
修改后的POM配置
先把插件版本统一,保留绑定到package阶段的配置,这样用标准Maven命令就能一步生成正确的Fat Jar:
<build> <!-- To parse properties files under resources folder : --> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <!-- 继承pluginManagement里的版本,无需重复指定 --> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.acme.qpguard.editor.Application</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 package
执行后,包含自身类和所有依赖的Fat Jar会生成在target目录下,文件名一般是[你的项目名]-[版本号]-jar-with-dependencies.jar,直接运行这个Jar就能正常启动应用了。
最后再确认下你的项目是标准Maven结构:src/main/java下放Java源码、src/main/resources下放资源文件(你说Eclipse能正常运行,这块应该没问题)。
内容的提问来源于stack exchange,提问作者kallada
相关产品推荐
相关产品推荐

