web-dev-qa-db-ja.com

JDK9の「パッケージJava.net.httpが存在しません」エラー

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のないクラスは問題なくコンパイルおよび実行されるため、私のモジュールでは問題ありません。

何が起こっているのか考えていますか?

13

(パッケージ名に基づいて)src/org/example/module-info.Javaにあるモジュール定義で、Java.net.httpモジュールに含まれているJava.httpclientパッケージに依存関係を追加する必要があります。

module org.example {
    requires Java.httpclient;
}

JDKモジュールのリストは、 モジュールの概要 にあります。

9
assylias

一方、jdk9のビルド149以降、クラス

  • HttpClient
  • HttpRequest
  • HttpResponse
  • WebSocket

パッケージjdk.incubator.httpに移動されました。それらはジグソーモジュールjdk.incubator.httpclientの一部です。詳細については、チケット JDK-8170648 を参照してください。

したがって、インポートをjdk.incubator.http.*に変更する必要があります。さらに、モジュールjdk.incubator.httpclientmodule-info.Javaに含める必要があります。コードをコンパイルして実行するときは、引数--add-modules=jdk.incubator.httpclientをJavaおよびjavac実行可能ファイルの呼び出しに追加します。

Httpクライアントに関連するすべてのクラスがjdk9から削除されました。これらはインキュベーター機能として含まれており、APIの一部ではなくなりました。うまくいけば、新しいクライアントはjdk10の一部になります。

7
Erunafailaro

JDK 11では、パッケージは

import Java.net.http.HttpClient;

そしてモジュール名はJava.net.http

1
Yuri Schimke