【问题标题】:How to debug project.clj to find which dependency is breaking my project compilation如何调试 project.clj 以查找正在破坏我的项目编译的依赖项
【发布时间】:2018-12-04 22:47:11
【问题描述】:

我刚刚将我的系统从 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 是否会引入依赖项/库,然后从我的 project.clj 中包含的库中引用所需的依赖项?

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

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

【问题讨论】:

  • 我遇到了同样的错误,但我没有意识到是 Java 更新到版本 11 引发了问题。我无法更新依赖的版本,所以我只是用sudo update-alternatives --config java回到了版本8。

标签: java clojure java-11 redhat-openjdk


【解决方案1】:

你已经有了答案,虽然我想我会留下我的一般流程,以防它对后来出现的人有用:

  • 在我的工具中打开任何自动 AOT,这样我就可以在不触发问题的情况下获得 repl。
  • 一次加载一个命名空间,直到我找到一个触发问题的命名空间(这通常不会花费很长时间 ;-)
  • 注释掉该命名空间的一半依赖项并评估文件顶部的ns 表单
  • 进行二分搜索,直到找到触发它的一两个
  • 仅在废品项目中加载该依赖项。
  • ...很多努力...
  • 成功!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多