使用jdk.internal.net.http

问题描述 投票:2回答:2

我想使用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这个名字对吗?

java maven java-11 java-module java-http-client
2个回答
1
投票

但我的模块是名称fr.app对吗?

不是真的,当你在项目中创建了module-info.java时,在应用程序执行期间,你的实际代码似乎最终会在类路径中找到。

因此你的MyClass居住在the unnamed module,错误内容如下

class fr.app.MyClass $ BodySubscribers(在未命名的模块中.....


另外请注意,您提到的类似乎是在java.net.http模块内部打包的,不应该依赖于您的代码。即使您需要与您正在查看的代码类似的功能,也必须实现自己的订阅者。由于该模块无论如何都不会将其出口供公众使用。


0
投票

您不应该直接使用任何jdk.internal.*包中的任何类。您是否尝试过使用公共API HttpResponse.BodySubscribers.ofByteArray()

© www.soinside.com 2019 - 2024. All rights reserved.