本文介紹了使用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/
我創(chuàng)建了模塊-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,對嗎?
并非如此,雖然您在項目中創(chuàng)建了module-info.java
,但在應用程序的執(zhí)行過程中,您的實際代碼似乎最終會在類路徑上找到。
因此您的MyClass
駐留在the unnamed module中,錯誤如下
類fr.app.MyClass$BodySubscribers(在未命名的模塊中…..
另外,您提到的類似乎是打包到java.net.http
模塊的內部,不應該從您的代碼中依賴。您必須實現(xiàn)您自己的訂閱者,即使您希望獲得與您正在查看的代碼類似的功能。因為模塊無論如何都不會將其導出用于公共用途。
這篇關于使用jdk.inder.net.http的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,