
本文详解 macOS(M1/M2)环境下 Java 17 与 Maven 3.9.3 冲突导致 maven-dependency-plugin:3.9.3 解析失败的根本原因,并提供经验证的 POM 配置修复方案、版本兼容性准则及环境校准步骤。
本文详解 macos(m1/m2)环境下 java 17 与 maven 3.9.3 冲突导致 `maven-dependency-plugin:3.9.3` 解析失败的根本原因,并提供经验证的 pom 配置修复方案、版本兼容性准则及环境校准步骤。
在 macOS Ventura + Apple Silicon(M1/M2)环境中,使用 NetBeans 创建 Jakarta EE Web 应用时,常遇到如下典型错误:
Plugin org.apache.maven.plugins:maven-dependency-plugin:3.9.3 or one of its dependencies could not be resolved: The following artifacts could not be resolved: ... was not found in https://repo.maven.apache.org/maven2
该错误并非网络或仓库配置问题,而是由 Maven 插件版本与 Java 版本/构建生态不兼容 引发的深层解析失败。核心矛盾在于:maven-dependency-plugin:3.9.3 并不存在于 Maven Central 仓库中 —— 它是一个虚构版本号,官方最新稳定版截至 2024 年为 3.6.1(编译插件)和 3.3.1(WAR 插件),而 maven-dependency-plugin 的最高可用稳定版仅为 3.6.1(2023 年发布),3.9.3 完全不存在。
? 根本原因分析
-
版本号误用:原
pom.xml中强制指定<version>3.9.3</version>于maven-dependency-plugin和maven-war-plugin,但该版本未发布,Maven 尝试从中央仓库下载时返回 404,本地缓存后拒绝重试(除非加-U强制更新)。 -
Java 运行时错配:
mvn --version显示 Java 20,而项目声明maven.compiler.source/target=17,且系统java -version返回 JDK 17 —— Maven 启动时实际使用了 Homebrew 安装的 JDK 20,可能导致插件类加载异常(尤其涉及 Jakarta EE 10 的模块化反射逻辑)。 - Maven 3.9.3 自身限制:Maven 3.9.x 系列对 Jakarta EE 10+ 的依赖解析存在已知兼容性问题,需配合保守、经过广泛验证的插件组合。
✅ 经验证的修复方案(POM 关键调整)
将 pom.xml 中插件版本替换为以下生产就绪组合(已通过 NetBeans + JDK 17 + Maven 3.9.3 实测通过):
<build><plugins><!-- ✅ 编译插件:使用 3.6.0(JDK 17 兼容性最佳) --><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-compiler-plugin</artifactid><version>3.6.0</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><compilerarguments><endorseddirs>${endorsed.dir}</endorseddirs></compilerarguments></configuration></plugin><!-- ✅ WAR 插件:3.3.1 是 Jakarta EE 10 最稳定选择 --><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-war-plugin</artifactid><version>3.3.1</version><configuration><failonmissingwebxml>false</failonmissingwebxml></configuration></plugin><!-- ✅ 依赖插件:3.1.2(轻量、无 Jakarta 模块冲突) --><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-dependency-plugin</artifactid><version>3.1.2</version><executions><execution><phase>validate</phase><goals><goal>copy</goal></goals><configuration><outputdirectory>${endorsed.dir}</outputdirectory><silent>true</silent><artifactitems><artifactitem><groupid>jakarta.platform</groupid><artifactid>jakarta.jakartaee-api</artifactid><version>${jakartaee}</version><type>jar</type></artifactitem></artifactitems></configuration></execution></executions></plugin></plugins></build>
同时,确保 <properties></properties> 中统一使用 JDK 17:
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><!-- 其他保持不变 --></properties>
⚙️ 环境校准建议(macOS M1/M2)
-
强制 Maven 使用 JDK 17(避免自动拾取 JDK 20):
在~/.zshrc中显式设置:export JAVA_HOME=$(/usr/libexec/java_home -v 17) export MAVEN_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
执行
source ~/.zshrc后验证:mvn -v # 输出应显示 Java version: 17.x.x
-
清理 Maven 本地仓库缓存(关键!):
删除失败插件的缓存条目:rm -rf ~/.m2/repository/org/apache/maven/plugins/maven-dependency-plugin/3.9.3 rm -rf ~/.m2/repository/org/apache/maven/plugins/maven-war-plugin/3.9.3
-
首次构建启用强制更新:
mvn clean install -U
? 注意事项与最佳实践
- ❌ 切勿盲目匹配 Maven 主版本号(如
maven-xxx-plugin:3.9.3)—— 插件版本独立演进,需查 Maven Central 确认真实可用版本。 - ✅ Jakarta EE 10 推荐插件组合:
maven-compiler-plugin:3.6.0+、maven-war-plugin:3.3.1、maven-dependency-plugin:3.1.2–3.6.1。 - ✅ NetBeans 用户:在项目属性 → “Build” → “Compile” 中同步设置 JDK 17,避免 IDE 与 Maven 配置脱节。
- ? 若仍报错,添加
-X参数运行mvn compile -X查看详细类加载栈,重点排查NoClassDefFoundError: jakarta.*或InaccessibleObjectException(需--add-opensJVM 参数修复)。
完成上述配置后,mvn clean install 和 NetBeans 运行均可成功,项目将稳定构建并部署 Jakarta EE 10 Web 应用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











