如何调试project.clj以找到哪个依赖项正在破坏我的项目编译



我刚刚将我的系统从Java 8更新到OpenJDK Java 11版本。我有一个项目不会编译,我得到以下错误:

Java.lang.IllegalArgumentException: Must hint overloaded method: 
toArray, compiling:(flatland/ordered/set.clj:19:1)
Exception in thread "main" java.lang.IllegalArgumentException: Must 
hint overloaded method: toArray, compiling: 
(flatland/ordered/set.clj:19:1)

从外观上看,这个错误在这里得到了修复:https://dev.clojure.org/jira/browse/CLJ-2374

所以我将我的项目更新为clojure 1.10.0-RC3,现在我得到了这个错误:

Syntax error compiling deftype* at (flatland/ordered/set.clj:19:1).
Exception in thread "main" Syntax error compiling deftype* at 
(flatland/ordered/set.clj:19:1).

有人看到这个错误吗?或者我有没有办法扩展Clojure的错误消息,向我显示我的项目中的哪个依赖项在编译过程中失败(可能是多个(?

我还注意到,我把第一个项目中失败的依赖项列表复制到了一个新项目中,并编译了新项目。但是,我没有引用deps列表中的依赖项或调用函数。Clojure是否引入了依赖项/库,然后从我的项目.clj中包含的库中引用所需的依赖项?

编辑***我发现这很可能是错误。

https://github.com/amalloy/ordered/pull/37

你已经有了答案,尽管我想我会把我的一般流程留给这个,因为它对后来出现的人有用:

  • 在我的工具中打开任何自动AOT,这样我就可以得到一个不触发问题的回复
  • 一次加载一个名称空间,直到找到触发问题的名称空间(这通常不会花很长时间;-(
  • 注释掉该名称空间的一半依赖项,并评估文件顶部的ns表单
  • 进行二进制搜索,直到找到触发它的一个或两个
  • 在废弃项目中只加载该依赖项
  • 。。。付出了很多努力
  • 成功

最新更新