2016-04-28 3 views
10

Ich habe ein Problem Kompilieren einfache Sperr Beispiel aus dem Httprequest JavaDoc GET:„Paket java.net.http nicht vorhanden ist“ Fehler auf JDK9

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); 
    } 
} 

Ich package java.net.http does not exist Fehler bekommen, wenn JDK Kompilieren 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: 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 

Derselbe Fehler tritt unter Verwendung der Befehlszeile und IntelliJ auf.

Es ist kein Problem mit meinem Modul, weil Klassen ohne java.net.http kompiliert und ohne irgendein Problem laufen.

Irgendeine Idee was ist los?

Antwort

9

In Ihrem Moduldefinition liegt (basierend auf dem Paketnamen) in src/org/example/module-info.java, müssen Sie die Abhängigkeit der java.net.http Paket hinzuzufügen, die im java.httpclient Modul enthalten ist:

module org.example { 
    requires java.httpclient; 
} 

Sie das finden können Liste der JDK-Module im module summary.

+0

Dies ist veraltet und [ersetzt durch die Antwort glaube ich] (https://stackoverflow.com/a/43111760/1746118) – nullpointer

6

Da mittlerweile 149 des jdk9 bauen, die Klassen

  • HttpClient
  • HttpRequest
  • HttpResponse
  • WebSocket

haben das Paket jdk.incubator.http verschoben. Sie sind Teil des Stichsägenmoduls jdk.incubator.httpclient. Siehe Ticket JDK-8170648 für weitere Details.

Sie müssen also Ihre Importe in jdk.incubator.http.* ändern. Außerdem müssen Sie das Modul jdk.incubator.httpclient in Ihre module-info.java aufnehmen. Fügen Sie beim Kompilieren und Ausführen Ihres Codes das Argument --add-modules=jdk.incubator.httpclient zu Ihrem Aufruf der ausführbaren Java-Java- und Javac-Dateien hinzu.

Alle Klassen im Zusammenhang mit dem HTTP-Client wurden aus jdk9 entfernt. Sie sind als Inkubatorfunktionen enthalten und gehören nicht mehr zur API. Hoffentlich wird der neue Client Teil von jdk10 sein.

Verwandte Themen