Maven构建后自行编写的部分Java文件对应的class未打包进jar是什么原因
以下是该问题的高频触发原因及对应排查方法:
存放路径不符合Maven标准目录结构
Maven默认仅将src/main/java目录下的Java文件识别为正式源码进行编译打包,如果你将代码存放在自定义目录(比如自建的code、java目录,或是src/main/resources、src/test/java下),默认不会被打入最终jar包。
排查方式:核对Java文件存放路径是否为项目根目录下的src/main/java,且包名与文件夹层级完全对应。构建插件配置了排除规则
若pom.xml中maven-compiler-plugin(编译插件)或maven-jar-plugin(打包插件)配置了<excludes>过滤规则,且你的Java文件命中了排除规则,就会被跳过打包。
排查方式:检查pom中两个插件的配置,以下为典型的错误排除配置示例:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <!-- 该规则会排除所有test包下的Java文件 --> <excludes> <exclude>**/test/**/*.java</exclude> </excludes> </configuration> </plugin>Java文件存在编译错误被跳过
若你在pom中配置了maven.compiler.failOnError=false,编译报错的Java文件不会终止构建流程,而是直接跳过编译,自然不会生成class文件打入jar。
排查方式:执行mvn clean compile命令,查看控制台输出是否有对应Java文件的编译报错信息。自定义源码目录未覆盖代码存放路径
若你在pom中通过<sourceDirectory>标签修改了默认的源码目录,但是没有包含你存放代码的目录,对应路径下的Java文件不会被识别为源码。
排查方式:检查pom中是否存在<sourceDirectory>自定义配置,核对配置路径是否覆盖你存放业务代码的目录。IDE目录标记错误
使用IDEA等IDE开发时,若误将Java文件所在的目录标记为测试源码根目录、资源根目录等非正式源码类型,IDE触发的Maven构建会跳过对应目录的代码打包。
排查方式:右键点击Java文件所在目录,核对目录标记类型,正式业务代码所在目录需要标记为Sources Root。
内容的提问来源于stack exchange,提问作者Coder-m

