使用 jdk.internal.net.http
Use jdk.internal.net.http
我想使用 jdk.internal.net.http
中的 ResponseSubscribers.ByteArraySubscriber
。我用的是openjdk11.
我尝试了两件事:
1/
我添加到 maven 编译器插件导出模块
<compilerArgs>
<arg>--add-exports</arg><arg>java.net.http/jdk.internal.net.http=fr.app</arg>
</compilerArgs>
-> 编译!
2/
我创建了模块-info.java
module fr.app {
requires java.net.http;
requires com.fasterxml.jackson.core;
requires com.fasterxml.jackson.databind;
requires com.fasterxml.jackson.datatype.jsr310;
exports fr.app;
exports fr.app.parser;
}
运行 使用 class 导入的 junit 测试时出现错误 jdk.internal.net.http
fr.app.AppException: java.io.IOException: class fr.app.MyClass$BodySubscribers (in unnamed module @0x6537cf78) cannot access class jdk.internal.net.http.ResponseSubscribers$ByteArraySubscriber (in module java.net.http) because module java.net.http does not export jdk.internal.net.http to unnamed module @0x6537cf78
我明白 BodySubscribers
只能在命名模块中导出。但是我的模块名称是 fr.app
对吗?
But my module is name fr.app right ?
并非如此,当您在项目中创建 module-info.java
时,在执行应用程序期间,您的实际代码似乎最终 在 class 路径中找到.
因此您的 MyClass
驻留在 the unnamed module 中,错误如下
class fr.app.MyClass$BodySubscribers (in unnamed module.....
另一方面,您提到的 class 似乎被打包 internal 到 java.net.http
模块中,不应依赖于您的代码。即使您需要与正在查看的代码类似的功能,您也必须实现自己的订阅者。因为无论如何模块都不会导出它以供 public 使用。
您不应直接使用任何 jdk.internal.*
包中的任何 class。您是否尝试过使用 public API HttpResponse.BodySubscribers.ofByteArray()
?
我想使用 jdk.internal.net.http
中的 ResponseSubscribers.ByteArraySubscriber
。我用的是openjdk11.
我尝试了两件事:
1/ 我添加到 maven 编译器插件导出模块
<compilerArgs>
<arg>--add-exports</arg><arg>java.net.http/jdk.internal.net.http=fr.app</arg>
</compilerArgs>
-> 编译!
2/ 我创建了模块-info.java
module fr.app {
requires java.net.http;
requires com.fasterxml.jackson.core;
requires com.fasterxml.jackson.databind;
requires com.fasterxml.jackson.datatype.jsr310;
exports fr.app;
exports fr.app.parser;
}
运行 使用 class 导入的 junit 测试时出现错误 jdk.internal.net.http
fr.app.AppException: java.io.IOException: class fr.app.MyClass$BodySubscribers (in unnamed module @0x6537cf78) cannot access class jdk.internal.net.http.ResponseSubscribers$ByteArraySubscriber (in module java.net.http) because module java.net.http does not export jdk.internal.net.http to unnamed module @0x6537cf78
我明白 BodySubscribers
只能在命名模块中导出。但是我的模块名称是 fr.app
对吗?
But my module is name fr.app right ?
并非如此,当您在项目中创建 module-info.java
时,在执行应用程序期间,您的实际代码似乎最终 在 class 路径中找到.
因此您的 MyClass
驻留在 the unnamed module 中,错误如下
class fr.app.MyClass$BodySubscribers (in unnamed module.....
另一方面,您提到的 class 似乎被打包 internal 到 java.net.http
模块中,不应依赖于您的代码。即使您需要与正在查看的代码类似的功能,您也必须实现自己的订阅者。因为无论如何模块都不会导出它以供 public 使用。
您不应直接使用任何 jdk.internal.*
包中的任何 class。您是否尝试过使用 public API HttpResponse.BodySubscribers.ofByteArray()
?