2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请查看 关于 页面,了解更多关于该页面如何运作的信息。

+3
tools.namespace
编辑

我在使用 tools.namespace (版本 0.3.0) 的 refresh 时遇到了一个问题,它在 Java 8 上似乎可以工作,但在 Java 11 上不行。我试过 Clojure 1.10.01.10.1 两个版本。在干净虚拟机上我能复现在 Java 8 上可以重新加载命名空间,但在 Java 11 上不能。

但奇怪的是,在其他一些项目中,我在 Java 11 上可以重新加载命名空间。我还没有找到差别所在。(我也刚接触 tools.deps,可能我在那里犯了错误。)

这里有一个复制的例子:https://github.com/thomascothran/namespace-repro

我假定这可能是我的错误,但我唯一缩小范围的是 Java 版本。

参考: https://clojure.atlassian.net/browse/TNS-54

1 个答案

+5

selected
 
最佳回答

这是因为与 tools.namespace 依赖的库 java.classpath 中的一个已知问题,该问题已经修复并发布,但版本比 tools.namespace 当前依赖的版本晚。

我可以在 tools.namespace 中创建一个问题修复它,但无需等待修复,您可以在项目中明确添加对 java.classpath 库较新版本的依赖,这样用 JDK 11 可能会正常运行。

org.clojure/java.classpath {:mvn/version "0.3.0"}

很可能的是,在您看到的一些使事情正常工作的项目中,您的一些其他依赖需要更晚版本的 java.classpath。

这起作用了。想知道这值得在 README 中记一笔,如果这样比推送补丁更容易?了解到我需要添加这个依赖根本就不是负担,我对此非常满意。

感谢你诊断这个问题,Andy。真的非常感谢。
我将着手更新 tools.namespace。
作为 tools.namespace 0.3.1 版本发布。
by
太快了!我已经将版本更新到0.3.1,现在在我的项目上都可以正常工作。谢谢,Alex。
by
重置讨论 by
实际上在Java 9+上对我来说不起作用(在Mac OS X上尝试了OpenJDK 9和11)。

这是我从`(clojure.java.classpath/classpath)`得到的结果
```
(clojure.java.classpath/classpath)
(#object[java.io.File 0x7c475f0b "/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib/src.zip"])
```

这是`(classpath (clojure.lang.RT/baseLoader))`的结果,因此忽略了`(system-classpath)`。

在JDK 8上工作正常。

编辑:这似乎是一个CIDER "问题" - 当我尝试平平的`lein repl`它就工作了。
看起来CIDER将src.zip添加到了类加载器的路径中。
我想知道是否应该将这两个类路径合并,而不是分别取用?
by
以下是我报告的Cider问题,仅供参考: https://github.com/clojure-emacs/cider/issues/2686
by
正如Juraj Martinka所指出的,问题出在特定环境中的`(clojure.java.classpath/classpath)`上。我已在https://github.com/clojure-emacs/cider/issues/2686#issuecomment-531366583处添加了自己的评论。

在java.classpath中已经针对不同环境提出了多种解决方案。当前的行为是在https://clojure.atlassian.net/browse/CLASSPATH-8中添加的,以便解决Java 9中类加载器层次结构的变化。相关的行是 https://github.com/clojure/java.classpath/blob/68f972cd47adcc248d205265ae352ca4caaa117a/src/main/clojure/clojure/java/classpath.clj#L86-L87

乍一看,Juraj Martinka的建议——将两个类路径源合并起来——似乎是一个可行的解决方案,尽管我对路径可能的重复有所顾虑。我还在想,在做出更改之前,CIDER的jack-in进程为什么会产生这样的结果。我将等待看是否有人在CIDER问题线程中能对此给出解释。
...