使用jdk.inder.net.http

Use jdk.internal.net.http(使用jdk.inder.net.http)

本文介绍了使用jdk.inder.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;
}

运行使用类导入的junit测试时出错jdk.internal.net.http

fr.app.AppException:java.io.IOException:类fr.app.MyClass$BodySubscribers(在未命名模块@0x6537cf78中)无法访问类jdk.internal.net.http.ResponseSubscribers$ByteArraySubscriber(在模块java.net.http中),因为模块java.net.http不会将jdk.inder.net.http导出到未命名模块@0x6537cf78

我知道BodySubscribers必须仅在命名模块中导出。但我的模块名为fr.app,对吗?

推荐答案

但我的模块名为fr.app,对吗?

并非如此,虽然您在项目中创建了module-info.java,但在应用程序的执行过程中,您的实际代码似乎最终会在类路径上找到。

因此您的MyClass驻留在the unnamed module中,错误如下

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


另外,您提到的类似乎是打包到java.net.http模块的内部,不应该从您的代码中依赖。您必须实现您自己的订阅者,即使您希望获得与您正在查看的代码类似的功能。因为模块无论如何都不会将其导出用于公共用途。

这篇关于使用jdk.inder.net.http的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:使用jdk.inder.net.http