"package java.net.http does not exist" JDK9 错误
"package java.net.http does not exist" error on JDK9
我在从 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 的 类 编译和 运行 没有任何问题。
知道发生了什么吗?
在您的模块定义中,位于(基于您的包名称)src/org/example/module-info.java
,您需要将依赖项添加到 java.net.http
包,它包含在 java.httpclient
模块:
module org.example {
requires java.httpclient;
}
您可以在 module summary 中找到 JDK 模块的列表。
同时,自 jdk9 的构建 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 的一部分。
在JDK11,包裹是
import java.net.http.HttpClient;
模块名称是java.net.http
Gradle
如果您使用 Gradle 和 IntelliJ,可能是因为 Gradle JVM
设置使用的版本低于 Java 11.
要在 IntelliJ 中更改它:
- 前往
File
> Settings
> Build, Execution, Deployment
> Build Tools
> Gradle
- 转到右侧的 Gradle JVM 设置。
- 将其更改为
Project SDK
或 Java 11 版本中的任何一个。
Maven
如果您使用的是 Maven 和 IntelliJ,可能是因为 Maven 中的 JRE
设置使用的版本低于 Java 11.
要在 IntelliJ 中更改它:
- 前往
File
> Settings
> Build, Execution, Deployment
> Build Tools
> Maven
> Runner
- 转到右侧的 JRE 设置。
- 将其更改为
Project SDK
或 Java 11 版本中的任何一个。
我在从 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 的 类 编译和 运行 没有任何问题。
知道发生了什么吗?
在您的模块定义中,位于(基于您的包名称)src/org/example/module-info.java
,您需要将依赖项添加到 java.net.http
包,它包含在 java.httpclient
模块:
module org.example {
requires java.httpclient;
}
您可以在 module summary 中找到 JDK 模块的列表。
同时,自 jdk9 的构建 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 的一部分。
在JDK11,包裹是
import java.net.http.HttpClient;
模块名称是java.net.http
Gradle
如果您使用 Gradle 和 IntelliJ,可能是因为 Gradle JVM
设置使用的版本低于 Java 11.
要在 IntelliJ 中更改它:
- 前往
File
>Settings
>Build, Execution, Deployment
>Build Tools
>Gradle
- 转到右侧的 Gradle JVM 设置。
- 将其更改为
Project SDK
或 Java 11 版本中的任何一个。
Maven
如果您使用的是 Maven 和 IntelliJ,可能是因为 Maven 中的 JRE
设置使用的版本低于 Java 11.
要在 IntelliJ 中更改它:
- 前往
File
>Settings
>Build, Execution, Deployment
>Build Tools
>Maven
>Runner
- 转到右侧的 JRE 设置。
- 将其更改为
Project SDK
或 Java 11 版本中的任何一个。