我想在我的 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
我按照下面的方法解决了这个问题。
- 我将我的 java 更新到了 openjdk 12。
- 从 java 11 开始, HttpClient , HttpRequest 和相关类属于 java.net 包。
- 我将项目结构中的 intelliJ 语言级别更新为 12。
- 删除了 module-info.java 文件。
- 删除了 pom.xml 中的编译器参数
然后我成功编译并运行它。它成功获得了一个HttpResponse。