我想使用ResponseSubscribers.ByteArraySubscriber
中的jdk.internal.net.http
。我用openjdk11。
我尝试了两件事:
1 /我添加到maven编译器插件导出模块
<compilerArgs>
<arg>--add-exports</arg><arg>java.net.http/jdk.internal.net.http=fr.app</arg>
</compilerArgs>
- >编译!
2 /我创建了module-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;
}
运行使用导入jdk.internal.net.http
的类的junit测试时出错
fr.app.AppException:java.io.IOException:class fr.app.MyClass $ BodySubscribers(在未命名模块@ 0x6537cf78中)无法访问类jdk.internal.net.http.ResponseSubscribers $ ByteArraySubscriber(在模块java.net.http中)因为模块java.net.http不会将jdk.internal.net.http导出到未命名的模块@ 0x6537cf78
我知道BodySubscribers
必须只在命名模块中导出。但我的模块是fr.app
这个名字对吗?
但我的模块是名称fr.app对吗?
不是真的,当你在项目中创建了module-info.java
时,在应用程序执行期间,你的实际代码似乎最终会在类路径中找到。
因此你的MyClass
居住在the unnamed module,错误内容如下
class fr.app.MyClass $ BodySubscribers(在未命名的模块中.....
另外请注意,您提到的类似乎是在java.net.http
模块内部打包的,不应该依赖于您的代码。即使您需要与您正在查看的代码类似的功能,也必须实现自己的订阅者。由于该模块无论如何都不会将其出口供公众使用。
您不应该直接使用任何jdk.internal.*
包中的任何类。您是否尝试过使用公共API HttpResponse.BodySubscribers.ofByteArray()
?