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

欢迎!请参阅 关于 页面以获得更多有关这一工作的信息。

+3
tools.namespace
编辑

我遇到了一个问题,即 tools.namespacerefresh (版本 0.3.0) 在 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
by
选定 by
 
最佳答案

这是由于一个已知问题导致的,该问题是与Java类路径库(tools.namespace所依赖)相关的,这个问题已经被修复并发布,但是是在比tools.namespace当前依赖的版本更新的Java类路径版本中。

我可以在tools.namespace中创建一个任务来修复这个问题,但您无需等待修复,您可以在您的项目中明确添加对更新的java.classpath库版本的依赖关系,这可能会使您可以使用JDK 11解决问题。

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

可能您在看到的某些项目中,某些其他需要的依赖项要求更高版本的java.classpath。

by
这很有效。想知道将此信息记录在README中是否容易,而不是推出补丁?知道我需要添加这个依赖并不麻烦,我很乐意这么去做。

感谢您诊断这个问题,Andy,我非常感激。
by
我将着手更新tools.namespace。
by
作为 tools.namespace 0.3.1 发行。
真快!我已经将版本更新到0.3.1,现在我的所有项目中都可以使用了。谢谢你,Alex。

重提
其实对我来说,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添加到类加载路径中。
我想知道,是否最好是将这两个类路径合并,而不是选择其中一个或另一个?
以下是供参考的我报告的Cider问题:https://github.com/clojure-emacs/cider/issues/2686
正如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问题线程中能对此进行解释。
...