You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java17下执行mvn test -e -X时java.net.http.HttpResponse找不到的原因及解决

问题分析与解决

核心原因

java.net.http.HttpResponse是Java 11及以上标准库自带的类,CircleCI上构建失败的根本原因是构建环境使用的Java版本低于11,或者Maven未明确指定编译/运行的Java版本,导致测试时调用了低版本JDK,找不到这个类。

本地IntelliJ能正常运行,是因为IDE已经把Java 17设为项目SDK和运行环境,但CircleCI默认环境可能用了Java 8这类低版本,或者Maven插件没指定版本,依赖了环境默认值。

排查与解决步骤

1. 强制CircleCI使用Java 17

修改.circleci/config.yml,指定Java 17的镜像或安装Java 17:
如果用Docker镜像:

jobs:
  build:
    docker:
      - image: cimg/openjdk:17.0.2
    steps:
      - checkout
      - run: mvn test -e -X

如果用虚拟机环境:

steps:
  - checkout
  - run: sudo apt-get update && sudo apt-get install -y openjdk-17-jdk
  - run: export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
  - run: mvn test -e -X

2. 给Maven明确指定Java 17版本

在pom.xml里配置编译和测试插件,避免依赖环境默认值:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.11.0</version>
      <configuration>
        <release>17</release> <!-- 同时指定source、target和API版本 -->
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>3.2.2</version>
      <configuration>
        <jvmArgs>--add-modules java.net.http</jvmArgs> <!-- 确保模块被加载,可选 -->
      </configuration>
    </plugin>
  </plugins>
</build>

release参数能保证编译时用Java 17的API,避免“编译用高版本、运行用低版本”的不兼容问题。

3. 验证CircleCI的Java环境

在构建步骤里加两行命令,确认环境是否正确:

- run: java -version
- run: echo $JAVA_HOME

如果输出的版本不是17,说明环境配置有问题,得调整镜像或安装步骤。

额外检查点

  • 看看项目里有没有自定义的JAVA_HOME变量,会不会覆盖了CircleCI的配置。
  • 多模块项目要确保父pom.xml的编译配置能应用到所有子模块。

内容的提问来源于stack exchange,提问作者spacether

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 17:25:21