Maven打包未包含编译后的源码文件问题求助
问题解决:Spring Boot Maven打包后自定义类缺失
问题现象
执行mvn install后生成的0.0.1-SNAPSHOT.jar中仅包含org.springframework.boot.loader相关类,自行编写的源码编译后的类未被包含在JAR内。
配置与日志分析
pom.xml 关键配置段
<build> <sourceDirectory>src/main/java</sourceDirectory> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>17</source> <target>17</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/main/java</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build>
Maven执行日志关键信息
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ stock-trader ---
[INFO] Nothing to compile - all classes are up to date
...
[INFO] --- spring-boot-maven-plugin:2.7.0:repackage (repackage) @ stock-trader ---
[INFO] Replacing main artifact with repackaged archive
问题原因
- 冗余配置干扰编译流程:
sourceDirectory指定了Maven默认的源码目录src/main/java,属于多余配置;同时build-helper-maven-plugin重复添加该目录作为源目录,导致Maven编译逻辑异常,编译后的类未被正确识别并打包。 - 未清理旧产物:编译阶段提示“无代码需要编译”,但可能是之前的编译产物未被清理,实际新修改的代码未被重新编译。
解决方案
步骤1:移除冗余配置
修改pom.xml的<build>段,删除sourceDirectory和build-helper-maven-plugin的配置,保留必要插件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>17</source> <target>17</target> </configuration> </plugin> </plugins> </build>
步骤2:清理并重新打包
执行以下命令,彻底清理之前的编译产物并重新构建:
mvn clean install
步骤3:验证结果
打开生成的JAR文件,检查BOOT-INF/classes目录,确认自定义的编译类已包含在内。
内容的提问来源于stack exchange,提问作者Kannan J
相关产品推荐
相关产品推荐

