正确呈现指向使用破折号而不是括号和逗号的外部 html javadoc 文档的 javadoc 方法链接

2024-01-05

生成的 HTML javadoc 文档javadocJava 版本 10 及更高版本中的工具使用括号( )和逗号,在方法链接/标签中,例如:https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#wait(long,int) 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- https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html#wait-long-int-.
(赞扬这个答案 https://stackoverflow.com/a/69248525/1220560用于解释格式取决于 javadoc 版本)

现在,当使用 Java 版本 10+ 构建项目时,我该如何制作maven-javadoc-plugin渲染到使用旧版本生成 HTML javadoc 文档的项目中的方法的正确链接? (即当其中之一<link> tag in pom.xml in maven-javadoc-plugin的配置部分指向一组使用破折号而不是括号和逗号的 HTML javadoc 文档。
默认情况下,使用括号和逗号,这会导致链接指向给定类页面的顶部,而不是所需的方法部分。

使用较旧的 javadoc 工具为使用 Java 10+ 的项目生成 HTML 并不是一种解决方案,因为在这种情况下,链接到 docs.oracle.com 上的标准库(或使用 java 10+ 构建的任何其他外部项目)的方法将被打破。最终的解决方案必须适用于特定的情况<link>仅部分。


根据RFC 3986 https://datatracker.ietf.org/doc/html/rfc3986两种变体都是有效的。

例如,带有 Java

https://docs.oracle.com/javase/9​​/docs/api/java/lang/Object.html#equals-java.lang.Object- 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) https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)

If you {@link ...}如果某个库的 Javadoc 使用与您不同的工具来创建其 Javadoc(或使用同一工具的不同版本),那么您目前运气不好。

如果我们确实在 Javadoc 工具中找不到相应的选项(我认为我们不会,因为为什么外部链接的处理方式应该与内部链接不同),我首先想到的是Maven 资源插件。它具有以下特点资源过滤 https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html(这是一个不好的命名,因为事实上它是字符串插值)也许这可以用来相应地替换字符。

如果这不起作用,还有其他选择,例如运行外部程序,例如sed,在构建过程中。让我想一下并尝试一些事情。我相信我能想出一个可行的解决方案。不过,请耐心等待。现在是凌晨 4:30,我想我很快就需要睡几个小时了。如果有人同时提出解决方案,那就更好了(虽然我不这么认为,但谁知道呢......:)

方法#1 –--release option

There's javadoc's --release https://docs.oracle.com/en/java/javase/11/tools/javadoc.html#GUID-9D532574-1CDB-4D30-99F3-A308DCAEE55F__GUID-8E6B3C5F-B4AB-4253-9157-9476500E424D option:

以下核心javadoc选项相当于对应的javac选项。看标准选项 https://docs.oracle.com/en/java/javase/11/tools/javac.html#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9__STANDARDOPTIONSFORJAVAC-7D3D9CC2有关使用这些选项的详细说明:

  • ...
  • --release

javac's --release https://docs.oracle.com/en/java/javase/11/tools/javac.html#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9__GUID-D343F6B4-3FDD-43A8-AD24-43DD70214471:

[嗯,这很有趣......好吧,不,这很尴尬:深层链接--release https://docs.oracle.com/en/java/javase/11/tools/javac.html#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9__GUID-D343F6B4-3FDD-43A8-AD24-43DD70214471和它的Note: ... https://docs.oracle.com/en/java/javase/11/tools/javac.html#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9__GUID-947ACE0E-6307-48C6-B820-EC7F929EBDF0最终不起作用,因为跳转到它们后的几分之一显然是 JS(AJAX?)开始发挥作用,页面最终到达顶部。我想太阳微系统公司 https://en.wikipedia.org/wiki/Sun_Microsystems back!]

--release release

针对特定 VM 版本的公共、受支持和记录的 API 进行编译。支持的release目标是6, 7, 8, 9, 10, and 11.

If this javadoc --release解决您的问题,我们不必进一步考虑手工解决方案。

Update: The --release/<release>选项并不能解决问题。只是指定链接目标版本,如下所示https://docs.oracle.com/javase/<version>/docs/api/...。上面的文档在这方面并没有太大帮助,maven-javadoc-plugin doc https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#release也不是:“提供与指定版本的源兼容性“。至少现在已经记录在这里了。;)

方法 #2 – Maven 资源过滤

Maven的资源过滤 https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html也没有帮助,因为在 Javadoc 注释中,仅具有一个参数的方法的方法引用可能如下所示:

/**
 * <p>Link to {@link Logger#info}</p>
 * <p>Link to {@link Object#equals}</p>
 */

对于字符串插值,我们需要${...}(或者不知名和不寻常的@...@ https://maven.apache.org/plugins/maven-resources-plugin/examples/escape-filtering.html) 定义。

它可以(理论上)以显式形式工作:

/**
 * <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>
 */

我(还不)不知道这些“保留字符”是否可以转义,如果可以,如何做到这一点。我发现如何转义 javadoc 内联标记中的大括号,例如 {@code} 标记 https://stackoverflow.com/q/647195/1744774但那里没有任何东西适用于{@link ...} (yet).

UPDATE

方法 #3 – Maven XML 插件xml:transform https://www.mojohaus.org/xml-maven-plugin/transform-mojo.html

不起作用,因为 Javadoc HTML 包含不符合 X(HT)ML 的未封闭内容<meta ... >s and <link ... >s.

方法 #4 a) – Groovy 脚本通过GMavenPlus 插件 https://groovy.github.io/GMavenPlus/plugin-info.html

Using 文件访问者 https://docs.oracle.com/javase/tutorial/essential/io/walk.html、 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-插件 https://github.com/tschueller/maven-javascript-plugin or Maven JavaScript 插件 http://hammerfest.sourceforge.net/maven-javascript-plugin/, ...

...添加一个目标javascript:execute并使用 JS 脚本及其 CSS 选择器和 DOM 操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正确呈现指向使用破折号而不是括号和逗号的外部 html javadoc 文档的 javadoc 方法链接 的相关文章

  • 如何在java swing中的每个页面中打印带有页脚的整个JPanel

    好吧 这可能很简单 但想不通 我有一个包含 JTable 的 JPanel JTable 包含很少的行 有时更多 因为我推入其中的表模型取决于数据库 但是 我不使用任何包含 JTable 的 JScolpane 因此 当 JTable 包含
  • 使用选项卡式活动中的捆绑包将值从活动传递到片段

    我是一个java文盲 但仍在尝试开发一个供我个人使用的应用程序 我从 android studio 的 Tabbed Activity 开始 除了 MainActivity 中的一个片段和一个包之外 大部分没有改变 这是我的代码 主要活动
  • JPanel透明背景和显示元素[重复]

    这个问题在这里已经有答案了 我插入一个背景图e 变成 aJPanel但一些界面元素消失了 以下 Java Swing 元素不会出现 标签标题 标签 usuario 标签 密码 按钮加速器 你能否使图像透明或元素不透明 setOpaque f
  • 以编程方式将 PEM 证书导入 Java KeyStore

    我有一个由两个文件 crt 和 key 组成的客户端证书 我希望将其导入到 java KeyStore 中 然后在 SSLContext 中使用 以通过 Apache 的 HTTPClient 发送 HTTP 请求 但是 我似乎找不到一种以
  • 删除 servlet 中的 cookie 时出现问题

    我尝试使用以下代码删除 servlet 中的 cookie Cookie minIdCookie null for Cookie c req getCookies if c getName equals iPlanetDirectoryPr
  • 如何模拟一个方面

    我目前正在使用aspectj 开发一些监控工具 因为这个工具应该是技术独立的 尽可能 所以我没有使用 Spring 进行注入 但我希望我的方面能够经过单元测试 方面示例 Aspect public class ClassLoadAspect
  • 独占锁定ConcurrentHashMap

    我知道不可能锁定 ConcurrentHashMap 进行独占访问 但是 我找不到原因 是因为构成CHM的 Segment 没有被api公开吗 据推测 如果是的话 客户端代码可以执行 交接 锁定 Cheers 我知道不可能锁定 Concur
  • 在 Spring 中设置 WS https 调用超时 (HttpsUrlConnectionMessageSender)

    我正在尝试为 WS 调用设置超时 我延长了WebServiceGatewaySupport并尝试将发送者超时设置为如下 public Object marshalSendAndReceive Object requestPayload We
  • LibGdx 如何使用 OrthographicCamera 滚动?

    我已经找了 10 个小时 字面意思 我已经完成了 我需要问一下 事情是我正在学习如何使用 LibGdx 来编写 Java 游戏 我正在做一个水平太空飞船游戏 所以 我最糟糕的问题是我不知道如何滚动 我认为绘制会更好地解释 我想绘制一个巨大的
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • Java G1 GC 处理引用对象运行缓慢

    我已经在 J ava 上运行了计数器 它24小时工作 每秒点击通过100次左右 白天 GC 处理时间从 20 60 毫秒缓慢上升到 10000 60000 毫秒 然后下降到 20 60 毫秒 这种模式不时地重复 从 GC 日志中我发现 GC
  • 通用 JSF 实体转换器[重复]

    这个问题在这里已经有答案了 我正在编写我的第一个 Java EE 6 Web 应用程序作为学习练习 我没有使用框架 只是使用 JPA 2 0 EJB 3 1 和 JSF 2 0 我有一个自定义转换器 用于将存储在 SelectOne 组件中
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • 使用 Maven 3 时 Cobertura 代码覆盖率为 0%

    读完这篇文章后 将 Cobertura 与 Maven 3 0 2 一起使用的正确方法是什么 https stackoverflow com questions 6931360 what is the proper way to use c
  • Scala repl 抛出错误

    当我打字时scala在终端上启动 repl 它会抛出此错误 scala gt init error error while loading AnnotatedElement class file usr lib jvm java 8 ora
  • 防止 Firebase 中的待处理写入事务不起作用

    我的目标是在单击按钮时将名称插入 Cloud Firestore 中 但如果用户未连接到互联网 我不希望保存处于挂起状态 我不喜欢 Firebase 保存待处理写入的行为 即使互联网连接已恢复 我研究发现Firebase 开发人员建议使用事
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s
  • Java 9 中紧凑字符串和压缩字符串的区别

    有什么优点紧凑的字符串 http openjdk java net jeps 254JDK9 中的压缩字符串 压缩字符串 Java 6 和紧凑字符串 Java 9 都有相同的动机 字符串通常实际上是 Latin 1 因此浪费了一半的空间 和
  • 将隐藏(生物识别)数据附加到 pdf 上的数字签名

    我想知道是否可以使用 iText 我用于签名 或 Java 中的其他工具在 pdf 上添加生物识别数据 我会更好地解释一下 在手写板上签名时 我会收集签名信息 例如笔压 签名速度等 我想将这些信息 java中的变量 与pdf上的签名一起存储

随机推荐

  • 在应用程序之间发送信息

    再会 我有一个客户端应用程序 它将客户端打开的应用程序列表发送到服务器 它特别发送文件路径 文件名和主机名 我的问题是发送的数据在服务器接收时应该进行序列化和反序列化 我是 C 新手 所以我对序列化知之甚少 这是客户端 private Li
  • 如何获取客户/用户位置详细信息

    在我的应用程序中 我想跟踪客户端 用户位置以存储在数据库中 我正在使用此代码来获取用户 IP 地址 string VisitorsIPAddr string Empty if HttpContext Current Request Serv
  • Python 中从十六进制到补码

    有没有一种简单的方法可以在 python 中生成补码 例如 如果您采用十六进制值0x9E 我需要将其转换为0x61 我需要将二进制 1 替换为 0 将 0 替换为 1 感觉这个应该很简单 只需使用异或运算符 http docs python
  • 静态工具操作的静态类与静态结构?

    我需要创建一个仅包含静态方法的 工具 类或结构 对于具有 PHP 背景的人来说 结构实际上并不存在 我正在读这个为什么选择结构而不是类 https stackoverflow com questions 24232799 why choos
  • Javascript window.onload 无法在 iOS 强制门户/网络中工作

    我在 jsp 文件的标头中有这段代码 由于某种原因 它在桌面和移动浏览器上运行良好 但在 iOS 强制门户上 仅触发第一个警报 有谁知道为什么 我想到了 使用这个作品
  • REST API 中的查询参数可以是强制的吗[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个要求 规定必须有两个参数 其中一个代表日期 作为 GET URI 的一部分必须是强制性的 但这两个参数仅用于过滤目的 所以我的问题是 强
  • 禁用移动 Chrome 浏览器中的滑动手势

    移动版 Chrome IOS Android 有一个功能 如果您在屏幕的左侧或右侧边缘滑动 它会更改选项卡 我的网络应用程序使用滑动 而这个 功能 似乎只是妨碍 有办法禁用这个吗 不 没有办法禁用此手势 有一张请求该功能的票证位于https
  • JavaScript:递归查找树中元素的所有父级

    我有一棵这样的树 var datas tree name name1 tree name name2 name name3 name name4 tree name name5 name name6
  • 是否可以调整 PDFBOX 中的文本?

    PDFBOX API 中是否有任何功能可以使文本对齐 或者我们必须手动执行此操作 如果手动 那么如何使用java 其背后的逻辑 调整文本 这个较旧的答案 https stackoverflow com questions 19635275
  • iOS:reachabilityWithHostname YES,尽管它应该是NO

    我测试了不同的框架 例如 https github com tonymillion Reachability https github com tonymillion Reachability https github com Vertic
  • Commons Logging 优先级最佳实践

    这可能是一个纯粹主观的问题 如果没有组织试图标准化这个问题 但我的团队在这个问题上的挣扎比你想象的要多 我们使用 Apache Commons Logging 作为日志记录接口 并且我们的开发团队中优先级的使用通常不一致 例如 一些开发人员
  • 具有多参数的htaccess

    我正在尝试像这样重定向我的链接 我的链接 example com p users page 2我的网址应该是 example com users page 2 此时 我的 mod rewrite 正在处理 我的链接 example com
  • NSMutabledata byteswithnocopy 的问题[重复]

    这个问题在这里已经有答案了 我正在尝试编写代码来从 malloced 缓冲区创建 NSMutableData 我使用了 freewhendone YES1 创建 NSData 后访问缓冲区时出错 在下面代码中的 memset 中 2 mal
  • 从 List 获取具有特定属性最大值的记录[重复]

    这个问题在这里已经有答案了 可能的重复 LINQ 如何对集合中所有对象的属性执行 Max 并返回具有最大值的对象 https stackoverflow com questions 1101841 linq how to perform m
  • .htaccess 重写到默认语言文件夹?

    我的网站按语言分为几个文件夹 en index php about us php faq php fr index php about us php faq php etc 我想要一个重写规则 自动重写到en如果有人试图进入文件夹mydom
  • “else if”比“switch() case”更快吗? [复制]

    这个问题在这里已经有答案了 我以前是 Pascal 人 目前正在学习 C 我的问题如下 下面的代码是否比进行切换更快 int a 5 if a 1 else if a 2 else if a 3 else if a 4 else 还有开关
  • 在Java中使用“==”[重复]

    这个问题在这里已经有答案了 public class Test public static void main String args String s1 HELLO String s2 HELLO System out println s
  • Django ManyToMany 按集合大小或集合中的成员进行过滤

    我在用django维护消息数据库 除其他外 我有以下内容models class User models Model id models IntegerField primary key True name models CharField
  • 如何在 StartsWith for LINQ FindAll 中忽略区分大小写?

    我有以下代码 ContactList ContactList FindAll p gt p DeptName StartsWith optAlpha SelectedItem Value ToList If DeptName test an
  • 正确呈现指向使用破折号而不是括号和逗号的外部 html javadoc 文档的 javadoc 方法链接

    生成的 HTML javadoc 文档javadocJava 版本 10 及更高版本中的工具使用括号 和逗号 在方法链接 标签中 例如 https docs oracle com javase 10 docs api java lang O