&引用;“包java.net.http不存在”;JDK9上的错误
从HttpRequest JavaDoc编译简单的blocking GET示例时遇到问题:&引用;“包java.net.http不存在”;JDK9上的错误,java,java-9,Java,Java 9,从HttpRequest JavaDoc编译简单的blocking 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
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编译时,我发现包java.net.http不存在
错误:
{ 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
{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的类编译和运行没有任何问题
知道发生了什么吗?在位于
src/org/example/module info.java
的模块定义中(基于包名),您需要将依赖项添加到java.net.http
包中,该包包含在java.httpclient
模块中:
module org.example {
requires java.httpclient;
}
您可以在中找到JDK模块的列表。同时,由于jdk9构建了149个类
HttpClient
HttpRequest
HttpResponse
WebSocket
jdk.incubator.http
。它们是jigsaw模块的一部分jdk.incubator.httpclient
。有关更多详细信息,请参阅票证
因此,您必须将导入更改为jdk.incubator.http.
。此外,您必须在module info.java
中包含模块jdk.incubator.httpclient
。编译和运行代码时,将参数--addmodules=jdk.incubator.httpclient
添加到java和javac可执行文件的调用中
与http客户机相关的所有类都已从jdk9中删除。它们作为孵化器特性包含,不再是API的一部分。希望新客户机将成为jdk10的一部分。在JDK11中,包是
import java.net.http.HttpClient;
模块名是
java.net.http
这已经过时了,我刚刚在JDK10中做了一些实验,在正式发布之前现在使用JDK11有意义吗?你怎么看?不是针对prod。但是如果你正在开发一个库,那么是的,因为它是LTS版本,周期为6个月