添加clojure依赖项并运行lein uberjar会导致java.lang.IllegalAccessError

时间:2015-12-02 01:06:23

标签: clojure leiningen

我是一名具有编写PHP,python和ruby经验的新手工程师。我正在努力为一个用clojure编写的项目做出贡献。我正在尝试向项目添加库,但在添加库并运行lein uberjar后,我收到错误。我想知道它的含义以及是否可以推荐一种方法来排除故障。提前感谢您的帮助!

我想要实现的目标 在我的项目中包含uap-clj library并将项目编译为jar文件。

我写的是什么 我已将库添加为依赖项列表中的倒数第二项。

  :dependencies [[lots-of-dependencies]
                 [uap-clj "1.1.1"] ; user agent parser
                 [another-dependency]] 

我在lein中跑了什么 According to the instructions on github,将更改保存到project.clj后,我运行lein deps,然后lein clean && lein uberjar

发生了什么 更新并保存文件后,运行该命令会在长堆栈跟踪之前出现以下错误:

java.lang.IllegalAccessError: tried to access method clojure.lang.RT.classForNameNonLoading(Ljava/lang/String;)Ljava/lang/Class; from class clj_yaml.core$loading__5340__auto____29, compiling:(flexmaster.clj:1:1)

我还尝试了什么 我想测试是否在添加库时出错了。我从头开始创建了一个新的clojure项目,并使用lein deps然后lein uberjar创建了一个jar文件。接下来,我将uap-clj添加到我的新项目中的:dependencies,保存了project.clj,并再次执行了lein depslein uberjar。我能够成功创建一个jar文件,所以我相信我正在正确地添加库。

我想不出包含另一个依赖项的行为会阻止我创建jar文件的另一个原因。如果你能想到我应该根据我提供的信息检查一下,那对我非常有帮助。谢谢!

1 个答案:

答案 0 :(得分:4)

看起来引用的库依赖于Clojure 1.7.0,但你明确地引用了1.6.0版本。

尝试更改:

[org.clojure/clojure "1.6.0"]

为:

[org.clojure/clojure "1.7.0"]

或者,您可以参考不依赖于Clojure 1.7.0的旧版本库,例如:[uap-clj "1.0.1"]