本文介紹了正確呈現指向使用破折號而不是圓括號和逗號的外部html javadoc文檔的javadoc方法鏈接的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
使用Java版本10及更高版本的javadoc
工具生成的HTMLjavadoc文檔在方法鏈接/標簽中使用圓括號和逗號,例如:https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#wait(long,int)。
但是,舊版本會用破折號-
替換這些字符,例如:https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html#wait-long-int-。
(感謝this answer解釋格式取決于javadoc版本)
現在,當使用Java版本10+構建項目時,我如何才能使maven-javadoc-plugin
呈現正確的方法鏈接,這些方法來自使用舊版本生成其HTMLjavadoc文檔的項目?(即,當maven-javadoc-plugin
的配置節中的pom.xml
中的<link>
標記之一指向一組使用破折號而不是圓括號和逗號的HTMLjavadoc文檔時)。
默認情況下,使用圓括號和逗號,這會導致鏈接指向給定類頁面的頂部,而不是所需的方法部分。
使用較舊的javadoc工具為使用Java 10+的項目生成HTML不是一種解決方案,因為在這種情況下,從docs.oracle.com的標準庫到方法的鏈接(或到使用Java 10+構建的任何其他外部項目的鏈接)將被破壞。最終解決方案必須僅適用于特定的<link>
節。
推薦答案
根據RFC 3986,這兩種變體都有效。
例如,帶有Java<;=9參數的方法的URL片段如下:
https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html#equals-java.lang.Object-
對于Java 10-17,它們如下所示:
https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)
如果您{@link ...}
使用與您不同的工具(或使用同一工具的不同版本)創建其Javadoc的庫的Javadoc,則您目前運氣不佳。
如果我們真的沒有在Javadoc工具中找到相應的選項(我認為我們不會找到,因為為什么外部鏈接的處理方式應該與內部鏈接不同),我首先想到的是Maven Resources插件。它具有resource filtering的功能(這是一個糟糕的命名,因為實際上它是字符串內插),也許這可以用來相應地替換字符。
如果這不起作用,還有其他選擇,例如在構建期間運行外部程序。讓我想一想,試一試。我相信我能想出一個可行的解決方案。不過,請耐心等待?,F在是凌晨4:30?,F在就在這里,我想我很快就需要幾個小時的睡眠。如果有人在此期間拿出解決方案,那就更好了(雖然我不這么認為,但誰知道呢……:)
方法1---release
選項
有javadoc
‘s --release
選項:
以下核心
javadoc
選項等同于對應的javac
選項。有關使用這些選項的詳細說明,請參閱Standard Options:…
--release
javac
‘s --release
:
[好吧,這很有趣……好吧,不,這很令人尷尬:到--release
及其Note: ...
的深層鏈接最終并不起作用,因為跳轉到它們幾厘米后顯然是JS(AJAX?)開始使用,頁面最終落在它的頂部。我要Sun Microsystems回來!]
--release release
針對特定的VM版本編譯公共的、受支持的和有文檔記錄的API。支持的
release
目標包括6
、7
、8
、9
、10
和11
。
如果此javadoc --release
解決了您的問題,則無需進一步考慮手動解決方案。
更新:--release
/<release>
選項不能解決問題。它只是指定https://docs.oracle.com/javase/<version>/docs/api/...
中的鏈接目標版本。上面的文檔在這方面沒有太大幫助,maven-javadoc-plugin
doc也沒有:";<;Release&>提供與指定版本&Quot;的源代碼兼容性。至少它現在被記錄在這里了。;)
方法2-Maven資源篩選
Maven’s resource filtering也沒有幫助,因為在Javadoc注釋中,只有一個參數的方法的方法引用可能如下所示:
/**
* <p>Link to {@link Logger#info}</p>
* <p>Link to {@link Object#equals}</p>
*/
對于字符串內插,我們需要${...}
(或不常見和不常見的@...@
)定義。
它將(在理論上)以顯式形式運行:
/**
* <p>"${(}" and "${)}" replaced by '-', if the additional '{' and '}' don't conflict with Javadoc comment's tags – but it seems they do</p>
* <p>Link to {@link Logger#info${(}String${)}}</p>
* <p>Link to {@link Object#equals${(}Object${)}}</p>
*
* <p> "@(@" and "@)@" replaced by '-'</p>, if the additional '@'s don't conflict with Javadoc comment's tags – but it seems they do</p>
* <p>Link to {@link Logger#info@(@String@)@}</p>
* <p>Link to {@link Object#equals@(@Object@)@}</p>
*/
我還不知道這些&q;保留字符&是否可以轉義,如果可以,如何轉義。我找到了How do you escape curly braces in javadoc inline tags, such as the {@code} tag,但其中的任何內容都無法與{@link ...}
一起使用。
更新
方法3-Maven XML插件xml:transform
不起作用,因為Javadoc HTML包含非X(HT)ML兼容的未關閉<meta ... >
和<link ... >
%s。
方法4 a)-通過GMavenPlus Plugin
編寫Groovy腳本
使用FileVisitor,XPath-如果它與非X(HT)ML-兼容的HTML一起工作-或其他任何工作方式。
XPath不工作:[Fatal Error] :18:3: The element type "link" must be terminated by the matching end-tag "</link>".
方法4 b)-恢復maven-javascript-plugin或Maven Javascript Plugin之一,…
.添加一個目標javascript:execute
并使用帶有其CSS選擇器和DOM操作的JS腳本。
這篇關于正確呈現指向使用破折號而不是圓括號和逗號的外部html javadoc文檔的javadoc方法鏈接的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,