【问题标题】:"package java.net.http does not exist" error on JDK9JDK9上的“包java.net.http不存在”错误
【发布时间】:2016-04-28 09:36:45
【问题描述】:

我在从 HttpRequest JavaDoc 编译简单的阻塞 GET 示例时遇到问题:

package org.example;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

import static java.net.http.HttpRequest.noBody;
import static java.net.http.HttpResponse.asString;

public class Http2 {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        HttpResponse response = HttpRequest
                .create(new URI("http://www.infoq.com"))
                .body(noBody())
                .GET().response();
        int responseCode = response.statusCode();
        String responseBody = response.body(asString());

        System.out.println(responseBody);
    }
}

使用 JDK 9 编译时出现package java.net.http does not exist 错误:

{ jdk9 } » /cygdrive/c/Program\ Files/Java/jdk-9/bin/javac -d out/production -modulesourcepath org.example.module1/src/ -m org.example.module1 org.example.module1\src\org.example.module1\org\example\Http2.java:6: 错误:包 java.net.http 不存在 导入 java.net.http.HttpRequest; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:7: 错误:包 java.net.http 不存在 导入 java.net.http.HttpResponse; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:9: 错误:包 java.net.http 不存在 导入静态 java.net.http.HttpRequest.noBody; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:9:错误:仅从类和接口静态导入 导入静态 java.net.http.HttpRequest.noBody; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:10:错误:包 java.net.http 不存在 导入静态 java.net.http.HttpResponse.asString; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:10:错误:仅从类和接口静态导入 导入静态 java.net.http.HttpResponse.asString; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:14:错误:找不到符号 HttpResponse 响应 = HttpRequest ^ 符号:类 HttpResponse 位置:类 Http2 org.example.module1\src\org.example.module1\org\example\Http2.java:14:错误:找不到符号 HttpResponse 响应 = HttpRequest ^ 符号:变量 HttpRequest 位置:类 Http2 org.example.module1\src\org.example.module1\org\example\Http2.java:16:错误:找不到符号 .body(noBody()) ^ 符号:方法 noBody() 位置:类 Http2 org.example.module1\src\org.example.module1\org\example\Http2.java:19:错误:找不到符号 字符串 responseBody = response.body(asString()); ^ 符号:方法 asString() 位置:类 Http2 10 个错误

使用命令行和 IntelliJ 也会出现同样的错误。

我的模块没有问题,因为没有 java.net.http 的类编译和运行没有任何问题。

知道发生了什么吗?

【问题讨论】:

    标签: java java-9


    【解决方案1】:

    在您的模块定义中,位于(基于您的包名称)src/org/example/module-info.java 中,您需要将依赖项添加到 java.net.http 包中,该包包含在 java.httpclient 模块中:

    module org.example {
        requires java.httpclient;
    }
    

    您可以在module summary 中找到JDK 模块列表。

    【讨论】:

    【解决方案2】:

    同时,由于 jdk9 的 build 149,类

    • HttpClient
    • HttpRequest
    • HttpResponse
    • WebSocket

    已移至包jdk.incubator.http。它们是拼图模块jdk.incubator.httpclient 的一部分。详情请见票JDK-8170648

    因此,您必须将导入更改为 jdk.incubator.http.*。此外,您必须在您的module-info.java 中包含模块jdk.incubator.httpclient。编译和运行代码时,将参数 --add-modules=jdk.incubator.httpclient 添加到 java 和 javac 可执行文件的调用中。

    所有与 http 客户端相关的类都已从 jdk9 中删除。它们作为孵化器功能包含在内,不再是 API 的一部分。希望新客户端能够成为 jdk10 的一部分。

    【讨论】:

      【解决方案3】:

      在 JDK 11 中,包是

      import java.net.http.HttpClient;
      

      模块名称为java.net.http

      【讨论】:

      • 我只是在JDK 10中做一些实验,在正式发布之前立即使用JDK 11有意义吗?你怎么看?
      • 不适用于产品。但是如果你正在开发一个库,那么是的,因为它是一个 LTS 版本和 6 个月的周期
      【解决方案4】:

      Gradle

      如果您使用的是 Gradle 和 IntelliJ,可能是因为 Gradle JVM 设置使用的版本低于 Java 11。

      在 IntelliJ 中更改它:

      1. 转到File > Settings > Build, Execution, Deployment > Build Tools > Gradle
      2. 转到右侧下方的 Gradle JVM 设置。
      3. 将其更改为 Project SDK 或 Java 11 版本中的任何一个。

      Maven

      如果您使用的是 Maven 和 IntelliJ,可能是因为 Maven 中的 JRE 设置使用的是低于 Java 11 的版本。

      在 IntelliJ 中更改它:

      1. 转到File > Settings > Build, Execution, Deployment > Build Tools > Maven > Runner
      2. 转到右侧的 JRE 设置。
      3. 将其更改为 Project SDK 或 Java 11 版本中的任何一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        • 2014-10-02
        • 2016-06-01
        • 2018-06-21
        相关资源
        最近更新 更多