2016-04-28 26 views
10

Ho un problema compilazione semplice blocco GET esempio dal JavaDoc HttpRequest:"pacchetto java.net.http non esiste" errore 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); 
    } 
} 

sto ottenendo package java.net.http does not exist errore quando si compila utilizzando 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: 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 

Lo stesso errore si verifica utilizzando la riga di comando e IntelliJ.

Non è un problema con il mio modulo perché le classi senza java.net.http vengono compilate ed eseguite senza problemi.

Qualche idea su cosa sta succedendo?

risposta

9

nella definizione del modulo, che si trova (in base al nome del pacchetto) in src/org/example/module-info.java, è necessario aggiungere la dipendenza al pacchetto java.net.http, che è incluso nel modulo java.httpclient:

module org.example { 
    requires java.httpclient; 
} 

È possibile trovare la elenco dei moduli JDK nello module summary.

+0

Questo è obsoleto e [sostituito dalla risposta credo] (https://stackoverflow.com/a/43111760/1746118) – nullpointer

6

Nel frattempo, poiché costruire 149 del jdk9, le classi

  • HttpClient
  • HttpRequest
  • HttpResponse
  • WebSocket

sono stati spostati al pacchetto jdk.incubator.http. Fanno parte del modulo jigsaw jdk.incubator.httpclient. Vedi il biglietto JDK-8170648 per maggiori dettagli.

Quindi è necessario modificare le importazioni in jdk.incubator.http.*. Inoltre, devi includere il modulo jdk.incubator.httpclient nel tuo module-info.java. Durante la compilazione e l'esecuzione del codice, aggiungere l'argomento --add-modules=jdk.incubator.httpclient alla chiamata degli eseguibili java e javac.

Tutte le classi correlate al client http sono state rimosse da jdk9. Sono inclusi come funzionalità di incubatore e non fanno più parte dell'API. Spero che il nuovo cliente faccia parte di jdk10.