首页 文章

JDK9上的“包java.net.http不存在”错误

提问于
浏览
10

我在从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: error: package java.net.http does not exist
import java.net.http.HttpRequest;
                    ^
org.example.module1\src\org.example.module1\org\example\Http2.java:7: error: package java.net.http does not exist
import java.net.http.HttpResponse;
                    ^
org.example.module1\src\org.example.module1\org\example\Http2.java:9: error: package java.net.http does not exist
import static java.net.http.HttpRequest.noBody;
                           ^
org.example.module1\src\org.example.module1\org\example\Http2.java:9: error: static import only from classes and interfaces
import static java.net.http.HttpRequest.noBody;
^
org.example.module1\src\org.example.module1\org\example\Http2.java:10: error: package java.net.http does not exist
import static java.net.http.HttpResponse.asString;
                           ^
org.example.module1\src\org.example.module1\org\example\Http2.java:10: error: static import only from classes and interfaces
import static java.net.http.HttpResponse.asString;
^
org.example.module1\src\org.example.module1\org\example\Http2.java:14: error: cannot find symbol
        HttpResponse response = HttpRequest
        ^
  symbol:   class HttpResponse
  location: class Http2
org.example.module1\src\org.example.module1\org\example\Http2.java:14: error: cannot find symbol
        HttpResponse response = HttpRequest
                                ^
  symbol:   variable HttpRequest
  location: class Http2
org.example.module1\src\org.example.module1\org\example\Http2.java:16: error: cannot find symbol
                .body(noBody())
                      ^
  symbol:   method noBody()
  location: class Http2
org.example.module1\src\org.example.module1\org\example\Http2.java:19: error: cannot find symbol
        String responseBody = response.body(asString());
                                            ^
  symbol:   method asString()
  location: class Http2
10 errors

使用命令行和IntelliJ发生相同的错误 .

这不是我的模块的问题,因为没有java.net.http的类编译并运行没有任何问题 .

知道发生了什么事吗?

3 回答

  • 1

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

    module org.example {
        requires java.httpclient;
    }
    

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

  • 7

    同时,自从构建了jdk9的149个类

    • HttpClient

    • HttpRequest

    • HttpResponse

    • WebSocket

    已被移至包 jdk.incubator.http . 它们是拼图模块 jdk.incubator.httpclient 的一部分 . 有关详细信息,请参见ticket JDK-8170648 .

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

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

  • 9

    在JDK 11中,包是

    import java.net.http.HttpClient;
    

    模块名称是 java.net.http

相关问题