Maven 3.5.2是否支持Java 11构建?复杂项目使用会引发问题吗?
问题解答
现有环境在复杂项目中大概率会出现异常,常见风险如下:
- Maven 3.5.2发布时间早于JDK 11,官方对JDK 11的完整兼容性支持从Maven 3.6.0版本才正式提供,目前的正常运行仅针对无特殊特性的简单项目,复杂度提升后必然会触发兼容问题。
- 若项目引入Java 9+新增的JPMS模块系统,编写了
module-info.java文件,Maven 3.5.2完全不支持模块路径解析,会直接构建失败。 - 常用Maven插件(如
maven-compiler-plugin、maven-surefire-plugin、maven-javadoc-plugin)适配JDK 11的新版本,最低依赖要求就是Maven 3.6+,继续使用3.5.2会导致插件无法升级,出现单元测试执行失败、Javadoc生成报错、注解处理器(如Lombok、MapStruct)执行异常等问题。 - 你当前未在pom中配置source、target编译版本,Maven 3.5.2默认配套的低版本编译插件默认编译级别为1.6,仅靠JDK 11的向下兼容才正常构建,后续项目一旦用到Java 11新特性(如var类型推断、新版HttpClient等)会直接编译失败,且报错信息模糊,排查成本极高。
- 多模块复杂项目开启并行构建时,Maven 3.5.x在高版本JDK下存在大量已知的缓存失效、随机构建中断问题,稳定性极差。
版本升级建议
强烈建议升级Maven版本,具体操作参考如下:
- 无需删除Jenkins预装的Maven 3.5.2,可通过Jenkins全局工具配置新增Maven 3.8.x稳定版,流水线中针对Java 11项目指定使用新版本即可,完全不影响原有老项目构建。
- 若使用Spring Boot 2.4及以上版本,建议最低使用Maven 3.6.3版本,可直接升级到3.8.x系列,该版本对JDK 8~JDK 17的兼容性都已非常成熟,适配绝大多数项目场景。
- 建议在项目pom中明确指定编译版本,避免不同环境下编译级别不一致问题,配置参考:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <release>11</release> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者acm
相关产品推荐
相关产品推荐

