2023 年,我在 IDEA 中运行 publishMavenJavaPublicationToMavenRepository,向 Nexus 私服发布构件。任务反复提示目标 failed to respond,但同机浏览器能够打开仓库页面。

尝试近十次后,我发现 IDEA 的 Gradle JVM 是 Java 17,而项目使用 Java 8。调整 Gradle JVM 后,当时再次发布成功。

改的是 Gradle 运行环境,不是 Gradle 版本

以下几项要分开:

  • Gradle Wrapper 版本:项目实际使用哪一版构建工具。
  • Gradle JVM:运行 Gradle 的 Java。
  • 项目源码、目标字节码和 Java toolchain:决定编译与测试使用什么规则。

项目目标为 Java 8,不表示任何 Gradle 都应运行在 Java 8。必须按 Wrapper 版本查运行 JDK 的支持范围。Gradle 兼容矩阵

核对发生失败的入口

在项目目录可查看:

./gradlew --version

Windows 使用对应 gradlew.bat。Wrapper 可能按项目配置下载 Gradle,应先确认来源;此命令不是发布任务,不会主动向 Nexus 上传构件。

再对照 IDEA 的 Gradle 设置中实际选中的 JVM,比较 IDE 与命令行输出。设置位置随版本变化,可查 IDEA Gradle JVM 选择说明。

浏览器可达,构建进程仍可能不同

浏览器与 Gradle 可能使用不同代理、证书信任库、认证和网络环境。failed to respond 本身也不能确定是 TLS、连接中断还是其他原因,需要查看完整异常链和服务端对应记录。

调整 JVM 后恢复,是值得保留的线索,但不能证明 Java 17 普遍不能发布到 Nexus。不要把降级 JDK 或关闭证书校验当作统一修复。

确认版本兼容与实际运行环境后,再向受控仓库验证发布和下载结果。发布任务会真实上传构件,重复执行前还应确认版本及仓库覆盖策略。