部署后Javadoc特定方法跳转URL的生成方案咨询
嘿,我来帮你搞定这个Javadoc方法跳转的问题!其实你不用头疼修改源码或者加奇怪的隐藏HTML,这里有几个更优雅的解决方案:
首先得纠正一个小误区:标准Javadoc生成器默认就支持方法级的锚点跳转,只是它用的是name属性而非你找的id属性。比如MyClass里的specialMethod(String)方法,生成的HTML里会有<a name="specialMethod(java.lang.String)"></a>这样的标记,对应的跳转URL应该是http://example.com/javadoc/some/package/MyClass.html#specialMethod(java.lang.String),直接用这个URL就能跳到目标方法啦。
如果你确实需要生成带id属性的锚点(比如某些工具依赖id而不是name),可以试试下面的方法:
1. 用JDK 1.8+的-html5参数(最推荐)
从JDK 1.8开始,Javadoc工具支持-html5参数,生成符合HTML5标准的文档。在这个模式下,方法锚点会同时包含id和name属性,完美满足你的需求。
生成Javadoc时加上这个参数就行:
javadoc -html5 -d ./javadoc your.package.name
生成的HTML里会出现类似这样的代码:
<a id="specialMethod(java.lang.String)" name="specialMethod(java.lang.String)"></a>
这时你用http://example.com/javadoc/some/package/MyClass.html#specialMethod(java.lang.String)就能直接跳转,不管是依赖id还是name的场景都能兼容。
2. 旧版JDK的兼容方案
如果你还在使用JDK 1.7及更早的版本,没有-html5参数,也不用慌:旧版Javadoc生成的name属性锚点,浏览器是完全支持跳转的,直接用#方法签名的URL就可以正常工作,没必要强行改成id属性。
要是你确实需要id属性,也不用修改Javadoc源码,可以找一些基于标准Doclet扩展的开源自定义doclet,或者自己写个简单的扩展,在生成方法节点时额外添加id属性就行——不过这个方案没必要,毕竟name锚点已经能满足跳转需求了。
3. 别用手动加隐藏HTML的方案
你提到的在方法注释里加<p id="specialMethod" style="visibility:hidden;"></p>的做法确实不够优雅,而且完全没必要,上面的方法都能让你生成合法、干净的跳转URL,还不用侵入代码注释。
总结一下:
- JDK 1.8+直接加
-html5参数,就能得到带id属性的锚点; - 旧版JDK直接用
name属性的锚点URL,浏览器完全支持; - 既不用改Javadoc源码,也不用加奇怪的HTML注释。
内容的提问来源于stack exchange,提问作者Chiff Shinz

