无法在 SpringBoot-Maven 服务器中使用 Java 9 的 HttpClient

无法在 SpringBoot-Maven 服务器中使用 Java 9 的 HttpClient

我想在我的 SpringBoot 应用程序中使用 Java 9 的 HttpClient。因此,我在 Maven 项目中的 IntelliJ 中编写了 HttpClient 的代码。包/模块jdk.incubator.httpclient.*已自动包含在内。

当我尝试运行该应用程序时,它抛出了一个编译错误,提示

"package jdk.incubator.httpclient is declared in module jdk.incubator.httpclient, which is not in the module graph".

因此我在互联网上进行了一些研究,并得到了一个线索,即创建一个模块文件(module-info.java),内容如下:

module com.example {
    requires jdk.incubator.httpclient;
}

可以解决问题。所以我这样做了,但是其他类中导入的其他包现在无法解决(可以通过将其模块添加到此类来解决,但添加所有模块将是一项艰巨的任务,并且会重复pom.xml文件中已包含的内容)。

因此我进行了进一步的研究,并得到了一个线索,即添加这个::

<compilerArgument>--add-modules=jdk.incubator.httpclient</compilerArgument>

maven-compiler-plugin到的配置部分pom.xml将解决该问题。

完成最后一步后,项目编译成功,但是当我尝试运行该应用程序时,它抛出了一个运行时错误,提示:

java.lang.ClassNotFoundException: jdk.incubator.http.HttpRequest

java.lang.NoClassDefFoundError: jdk/incubator/http/HttpRequest

我尝试在线寻找解决方案,但未能找到,一个人遇到了同样的问题,他使用最后一步部分解决了问题,但遇到了与我相同的运行时错误,他寻求解决方案但没有收到任何解决方案。

是否可以在 SpringBoot-Maven 应用程序中运行 HttpClient 和 HttpRequest?如果可以,那么如何操作?请指导。

答案1

我按照下面的方法解决了这个问题。

  1. 我将我的 java 更新到了 openjdk 12。
  2. 从 java 11 开始, HttpClient , HttpRequest 和相关类属于 java.net 包。
  3. 我将项目结构中的 intelliJ 语言级别更新为 12。
  4. 删除了 module-info.java 文件。
  5. 删除了 pom.xml 中的编译器参数

然后我成功编译并运行它。它成功获得了一个HttpResponse。

相关内容