使用javadoc工具從Java版本10和更新的版本生成的HTML javadoc檔案,在方法鏈接/標簽中使用括號( )和逗號,,例如。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-。
現在,在用10以上版本的Java構建專案時,如何讓maven-javadoc-plugin正確呈現來自專案的方法鏈接,這些方法的HTML javadoc檔案是用舊版本生成的? (即當maven-javadoc-plugin的配置部分中pom.xml中的一個<link>標簽指向一組使用破折號而不是括號和逗號的HTML javadoc檔案時)。
默認情況下,使用的是小括號和逗號,這導致鏈接指向給定類的頁面頂部而不是所需的方法部分。
使用舊的javadoc工具為使用Java 10 的專案生成HTML并不是一個解決方案,因為在這種情況下,與docs.oracle.com的標準庫中的方法(或與任何其他使用java 10 構建的外部專案)的鏈接將被破壞。一個明確的解決方案必須只應用于特定的<link>部分。
uj5u.com熱心網友回復:
根據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 Plugin。它有資源過濾的功能(這個命名很不好,因為事實上它是字串插值),也許可以用這個功能來相應地替換字符。
如果這不起作用,還有其他選擇,比如在構建程序中運行一個外部程式,例如sed。讓我想一想,并嘗試一些東西。我相信我可以想出一個可行的解決方案。但是,請耐心等待。現在是凌晨4點半,我想我需要盡快睡上幾個小時。如果有人在此期間想出了一個解決方案,那就更好了(雖然我不這么認為,但誰知道呢......:)
更新方法 #1 - --release 選項。
這里有javadoc的--release選項:
以下核心javadoc選項等同于相應的javac選項。請參閱標準選項,以了解使用這些選項的詳細說明:
- ...
--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檔案也沒有。"<release>提供與指定版本的源代碼兼容"。至少現在它被記錄在這里了。;)
更新了
。方法#2--Maven資源過濾
Maven的資源過濾也無濟于事,因為在Javadoc注釋中,只有一個引數的方法的方法參考看起來像:/***
* <p>鏈接到{@link Logger#info}</p>
* <p>鏈接到 {@link Object#equals}</p>
*/
而對于字串插值,我們需要${...}(或不知名的、不尋常的@...@)定義。
它將(在理論上)以顯式形式作業:
/**。
* <p>"${(}"和"${)}"用'-'代替,如果附加的'{'和'}'不與Javadoc注釋的標簽沖突的話--但似乎它們有沖突</p>。
* <p>鏈接到 {@link Logger#info${(}String${)}</p>
* <p>鏈接到 {@link Object#equals${(}Object${)}}</p>
*
* <p>"@(@) "和"@)@"被'-'取代</p>,如果額外的'@'不與Javadoc注釋的標簽沖突--但似乎它們會沖突</p>
* <p>鏈接到 {@link Logger#info@(@String@)@}</p>
* <p>鏈接到 {@link Object#equals@(@Object@)@}</p>
*/
我不知道(目前)這些 "保留字符 "是否可以被轉義,如果可以,如何轉義。
更新了
。方法#3 - Maven XML插件的xml:transform
由于Javadoc HTMLs包含不符合X(HT)ML標準的非封閉式<meta ... >s和<link ... >s,所以不起作用。
方法 #4 a) - 通過GMavenPlus插件的Groovy腳本
。使用FileVisitor,XPath--如果該方法對不符合X(HT)ML的HTML有效的話--或者任何有效的方法。
方法#4 b) - 恢復maven-javascript-plugin或Maven Javascript Plugin之一,...
......添加一個目標javascript:execute,使用JS腳本及其CSS選擇器和DOM操作。
CodePudding
經過大量的搜索,我傾向于相信在你的pom.xml里面使用Ant來把小括號改成連字符,要比試圖尋找一個專門的插件更容易:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>/span>
<execution>>
<phase>prepare-package</phase>/span>
<configuration>/span>
<target>/span>
<replaceregexp
match='(& lt; a href="[^"]*grpc[^"]*)[(]([^)")]("[^>]* class="external-link")'/span>
replace="1-2-3"
flags="g">
<fileset dir="${project.reporting.outputDirectory}/apidocs"
includes="**/*.html"/>
</replaceregexp>/span>
</target>/span>
</configuration>/span>
<目標>/span>
<goal>run</goal>
</目標>/span>
</執行>/span>
</executions>/span>
</plugin>/span>
不幸的是,我沒有辦法測驗它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/327626.html
標籤:
上一篇:不能使用Jitpack的依賴性
下一篇:展開QChartView
