欢迎!请参阅关于页面以获取有关如何操作的一些更多信息。
当在 JDK 11 上运行 Clojure 时,clojure.java.javadoc/javadoc 函数无法打开到 java.base 模块外的 JDK 类的正确 URL。
clojure.java.javadoc/javadoc
java.base
例如- (javadoc java.lang.String) 会打开 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html- (javadoc java.sql.Connection) 会打开 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/sql/Connection.html,这是不正确的,因为模块名应该是 java.sql,而不是 java.base。正确的 URL 应该是 https://docs.oracle.com/en/java/javase/11/docs/api/java.sql/java/sql/Connection.html
(javadoc java.lang.String)
(javadoc java.sql.Connection)
这是由 *core-java-api* 在 clojure.java.javadoc 命名空间中的定义造成的。
*core-java-api*
clojure.java.javadoc
我想知道是否有更好的方法可以处理所有标准 JDK 类,而不仅仅是那些在 java.base 模块中的类。
请注意,最初这个问题是在 Emacs Cider 项目中提出的: https://github.com/clojure-emacs/cider/issues/2687
此修复已发布在1.10.2-alpha3中。
给定一个类klass,在Clojure中,您可以使用Java互操作通过getModule方法确定它所在的模块名称
klass
getModule
然后,对得到的模块执行getName操作:https://docs.oracle.com/javase/9/docs/api/java/lang/Module.html#getName--
getName
例如:
user=> (.getName (.getModule java.sql.Connection)) "java.sql"
user=> (.getName (.getModule java.sql.Connection))
"java.sql"
看起来这样的URL是从JDK 11开始的,而不是模块引入时JDK 9开始的,因此不应用于JDK 11之前的版本。
Juraj,我在研究为Clojure的javadoc创建一个提议的补丁以改善这种情况时,意识到Clojure的javadoc还试图为其他不在Java自带库中的库计算正确的URL。
您(或者正在阅读这篇帖子的任何人)是否知道除了核心Java库之外,这个在URL中包含模块名的想法是否被其他项目采用?
对于Java本身,包含Java模块名称的决定性因素似乎是“JDK是11或更新版本”。我已确认JDK 12的文档遵循这一规定。JDK 13的文档尚未在Oracle的网站上提供,因此尚不清楚该计划。