JDK9上的“包java.net.http不存在”错误
我在从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不存在 import java.net.http.HttpRequest; ^ org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:7:错误:包java.net.http不存在 import java.net.http.HttpResponse; ^ org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:9:错误:包java.net.http不存在 import static java.net.http.HttpRequest.noBody; ^ org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:9:错误:仅从类和接口导入静态 import static java.net.http.HttpRequest.noBody; ^ org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:10:错误:包java.net.http不存在 import static java.net.http.HttpResponse.asString; ^ org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:10:错误:仅从类和接口导入静态 import static java.net.http.HttpResponse.asString; ^ org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:14:error:找不到符号 HttpResponse响应= HttpRequest ^ 符号:类HttpResponse 位置:类Http2 org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:14:error:找不到符号 HttpResponse响应= HttpRequest ^ 符号:变量HttpRequest 位置:类Http2 org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:16:error:找不到符号 。体(一个人()) ^ 符号:方法noBody() 位置:类Http2 org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java:19:error:找不到符号 String responseBody = response.body(asString()); ^ 符号:方法asString() 位置:类Http2 10个错误
使用命令行和IntelliJ发生相同的错误。
这不是我的模块的问题,因为没有java.net.http的类编译并运行没有任何问题。
知道发生了什么事吗?
在您的模块定义中,位于(根据您的包名称) src/org/example/module-info.java
,您需要将依赖项添加到java.net.http
包中,该包包含在java.httpclient
模块中:
module org.example { requires java.httpclient; }
您可以在模块摘要中找到JDK模块列表。
同时,自构建149的jdk9,类
-
HttpClient
-
HttpRequest
-
HttpResponse
-
WebSocket
已被移动到包jdk.incubator.http
。 它们是jigsaw模块jdk.incubator.httpclient
。 有关详细信息,请参阅票据JDK-8170648 。
因此,您必须将导入更改为jdk.incubator.http.*
。 此外,您必须在jdk.incubator.httpclient
中包含模块module-info.java
。 编译和运行代码时,请将参数--add-modules=jdk.incubator.httpclient
到java和javac可执行文件的调用中。
所有与http客户端相关的类都已从jdk9中删除。 它们作为孵化器function包含在内,不再是API的一部分。 希望新客户将成为jdk10的一部分。
在JDK 11中,包是
import java.net.http.HttpClient;
模块名称是java.net.http