HttpRequestJavaDocから単純なブロッキング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);
}
}
package Java.net.http does not exist
JDK 9を使用してコンパイルするときのエラー:
{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:エラー:シンボルが見つかりません HttpResponse response = 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
に移動されました。それらはジグソーモジュールjdk.incubator.httpclient
の一部です。詳細については、チケット JDK-8170648 を参照してください。
したがって、インポートをjdk.incubator.http.*
に変更する必要があります。さらに、モジュールjdk.incubator.httpclient
をmodule-info.Java
に含める必要があります。コードをコンパイルして実行するときは、引数--add-modules=jdk.incubator.httpclient
をJavaおよびjavac実行可能ファイルの呼び出しに追加します。
Httpクライアントに関連するすべてのクラスがjdk9から削除されました。これらはインキュベーター機能として含まれており、APIの一部ではなくなりました。うまくいけば、新しいクライアントはjdk10の一部になります。
JDK 11では、パッケージは
import Java.net.http.HttpClient;
そしてモジュール名はJava.net.http