使用 [org.clojure/clojure "1.4.0"] 和 [incanter "1.4.1"] 遇到同样的问题。Def 有一种类路径阴影的感觉。
在 repl 中执行以下操作来确定 ConcurrencyUtils 来自哪个 jar:
(.getResource edu.emory.mathcs.utils.ConcurrencyUtils
"/edu/emory/mathcs/utils/ConcurrencyUtils.class")
这指向 jplasma。果然,jplasma 有它自己的那个类的副本,其中有各种方法,包括缺少 getThreadsBeginN_2D。
查看 deps(“lein pom”后跟“mvn dependency:tree”)表明这是由 incanter 1.4.1 引入的依赖项:
[INFO] | +- incanter:incanter-core:jar:1.4.1:compile
[INFO] | | +- org.clojure:math.combinatorics:jar:0.0.3:compile
[INFO] | | \- net.sourceforge.parallelcolt:parallelcolt:jar:0.10.0:compile
[INFO] | | +- net.sourceforge.jplasma:jplasma:jar:1.2.0:compile
将 project.clj 中的 incanter 条目更改为排除 jplasma:
[incanter "1.4.1"
:exclusions [net.sourceforge.jplasma/jplasma]]
这从 jtransforms 获取 ConcurrencyUtils(因此仍然不是从 parallelcolt),但至少解决了矩阵问题:
=> (matrix [[1 2 3] [4 5 6] [7 8 9]])
[1.0000 2.0000 3.0000
4.0000 5.0000 6.0000
7.0000 8.0000 9.0000]
不知道排除的影响是什么。clojars 上有一个旧版本的 jplasma 不会破坏矩阵,您可以尝试将其添加到您的 project.clj:
[incanter/jplasma "0.9.4"]
不过,这些部门显然需要由了解它们的人正确分类。