本文介紹了正確呈現(xiàn)指向使用破折號而不是圓括號和逗號的外部html javadoc文檔的javadoc方法鏈接的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
使用Java版本10及更高版本的javadoc
工具生成的HTMLjavadoc文檔在方法鏈接/標(biāo)簽中使用圓括號和逗號,例如: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版本)
現(xiàn)在,當(dāng)使用Java版本10+構(gòu)建項(xiàng)目時(shí),我如何才能使maven-javadoc-plugin
呈現(xiàn)正確的方法鏈接,這些方法來自使用舊版本生成其HTMLjavadoc文檔的項(xiàng)目?(即,當(dāng)maven-javadoc-plugin
的配置節(jié)中的pom.xml
中的<link>
標(biāo)記之一指向一組使用破折號而不是圓括號和逗號的HTMLjavadoc文檔時(shí))。
默認(rèn)情況下,使用圓括號和逗號,這會導(dǎo)致鏈接指向給定類頁面的頂部,而不是所需的方法部分。
使用較舊的javadoc工具為使用Java 10+的項(xiàng)目生成HTML不是一種解決方案,因?yàn)樵谶@種情況下,從docs.oracle.com的標(biāo)準(zhǔn)庫到方法的鏈接(或到使用Java 10+構(gòu)建的任何其他外部項(xiàng)目的鏈接)將被破壞。最終解決方案必須僅適用于特定的<link>
節(jié)。
推薦答案
根據(jù)RFC 3986,這兩種變體都有效。
例如,帶有Java<;=9參數(shù)的方法的URL片段如下:
https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html#equals-java.lang.Object-
對于Java 10-17,它們?nèi)缦滤荆?/p>
https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)
如果您{@link ...}
使用與您不同的工具(或使用同一工具的不同版本)創(chuàng)建其Javadoc的庫的Javadoc,則您目前運(yùn)氣不佳。
如果我們真的沒有在Javadoc工具中找到相應(yīng)的選項(xiàng)(我認(rèn)為我們不會找到,因?yàn)闉槭裁赐獠挎溄拥奶幚矸绞綉?yīng)該與內(nèi)部鏈接不同),我首先想到的是Maven Resources插件。它具有resource filtering的功能(這是一個(gè)糟糕的命名,因?yàn)閷?shí)際上它是字符串內(nèi)插),也許這可以用來相應(yīng)地替換字符。
如果這不起作用,還有其他選擇,例如在構(gòu)建期間運(yùn)行外部程序。讓我想一想,試一試。我相信我能想出一個(gè)可行的解決方案。不過,請耐心等待。現(xiàn)在是凌晨4:30。現(xiàn)在就在這里,我想我很快就需要幾個(gè)小時(shí)的睡眠。如果有人在此期間拿出解決方案,那就更好了(雖然我不這么認(rèn)為,但誰知道呢……:)
方法1---release
選項(xiàng)
有javadoc
‘s --release
選項(xiàng):
以下核心
javadoc
選項(xiàng)等同于對應(yīng)的javac
選項(xiàng)。有關(guān)使用這些選項(xiàng)的詳細(xì)說明,請參閱Standard Options:…
--release
javac
‘s --release
:
[好吧,這很有趣……好吧,不,這很令人尷尬:到--release
及其Note: ...
的深層鏈接最終并不起作用,因?yàn)樘D(zhuǎn)到它們幾厘米后顯然是JS(AJAX?)開始使用,頁面最終落在它的頂部。我要Sun Microsystems回來!]
--release release
針對特定的VM版本編譯公共的、受支持的和有文檔記錄的API。支持的
release
目標(biāo)包括6
、7
、8
、9
、10
和11
。
如果此javadoc --release
解決了您的問題,則無需進(jìn)一步考慮手動解決方案。
更新:--release
/<release>
選項(xiàng)不能解決問題。它只是指定https://docs.oracle.com/javase/<version>/docs/api/...
中的鏈接目標(biāo)版本。上面的文檔在這方面沒有太大幫助,maven-javadoc-plugin
doc也沒有:";<;Release&>提供與指定版本&Quot;的源代碼兼容性。至少它現(xiàn)在被記錄在這里了。;)
方法2-Maven資源篩選
Maven’s resource filtering也沒有幫助,因?yàn)樵贘avadoc注釋中,只有一個(gè)參數(shù)的方法的方法引用可能如下所示:
/**
* <p>Link to {@link Logger#info}</p>
* <p>Link to {@link Object#equals}</p>
*/
對于字符串內(nèi)插,我們需要${...}
(或不常見和不常見的@...@
)定義。
它將(在理論上)以顯式形式運(yùn)行:
/**
* <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;保留字符&是否可以轉(zhuǎn)義,如果可以,如何轉(zhuǎn)義。我找到了How do you escape curly braces in javadoc inline tags, such as the {@code} tag,但其中的任何內(nèi)容都無法與{@link ...}
一起使用。
更新
方法3-Maven XML插件xml:transform
不起作用,因?yàn)镴avadoc HTML包含非X(HT)ML兼容的未關(guān)閉<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)-恢復(fù)maven-javascript-plugin或Maven Javascript Plugin之一,…
.添加一個(gè)目標(biāo)javascript:execute
并使用帶有其CSS選擇器和DOM操作的JS腳本。
這篇關(guān)于正確呈現(xiàn)指向使用破折號而不是圓括號和逗號的外部html javadoc文檔的javadoc方法鏈接的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,