2016-04-28 532 views
10

我有一个问题,编译单纯堵塞从HttpRequest的JavaDoc的GET例如:“包java.net.http不存在”错误上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); 
    } 
} 

使用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的类编译和运行没有任何问题。

任何想法是怎么回事?

回答

9

在你的模块定义,位于(根据你的包名)在src/org/example/module-info.java,则需要依赖添加到java.net.http包,它包含在java.httpclient模块:

module org.example { 
    requires java.httpclient; 
} 

您可以找到module summary中的JDK模块列表。

+0

这已经过时了[用我相信的答案取代](https://stackoverflow.com/a/43111760/1746118) – nullpointer

6

同时,由于建设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的一部分。

相关问题