如何在Java8项目中使用Http客户端API(自Java 9开始)

问题描述:

Java 9导入了一个新的HTTP/2客户端API,该API似乎很好用,但有什么方法可以在Java 8中使用它?如何在Java8项目中使用Http客户端API(自Java 9开始)

OR

有任何shim/polyfill(从JavaScript)可使其可在Java中8?

有什么办法可以在java 8中使用它吗?

没有,因为jdk.incubator.http模块已经从Java 9添加

因此,编译器在使用Java8时无法使用--release 8选项进行编译。你最终会得到错误为:

$ javac --release 8 .../src/com/HttpGet.java 

$ .../src/com/HttpGet.java:3: error: package jdk.incubator.http does not exist 
import jdk.incubator.http.HttpClient; 
         ^

用最少的代码来重现此为: -

import jdk.incubator.http.HttpClient; 

public class HttpGet { 
    public static void main(String[] args) { 
     HttpClient httpClient = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build(); 
     System.out.println(httpClient.version()); 
    } 
} 

此外,该文件明确读取此前期

Incubating Feature。将在未来的版本中删除。

+1

它不*去除100%的时间*,它可能被简单地*完成*并且完全留在idk中;只是一个小字眼问题,我猜 – Eugene

+0

@Eugene确实。我引用了javadoc,但它恰好与孵化器JEP背后的想法背道而驰。 – nullpointer

+1

由于孵化功能大部分是由java源代码实现的,我试图复制并将它编译成一个jar文件,但是Java 8编译器抱怨说有一些内部API丢失了...... 缺少的API就像'System .Logger','... misc.Unsafe','AsnycResult'等。 –

原则上,它的来源是可用的。你可能会复制它,编译它并创建一个可用于Java 8的jar(如果代码需要Java 9,可能会进行一些更改或缺少功能),类似于ThreeTen-Backport providing java.time for Java 6/7

但似乎还没有一个可用(快速搜索后)。如果您决定朝这个方向前进,请务必遵守相关许可证。

+0

我试图从jdk9复制源代码并对其进行编译,但是由于缺少一些内部API而失败。 –