【问题标题】:Adding clojure dependency and running lein uberjar causes java.lang.IllegalAccessError添加 clojure 依赖并运行 lein uberjar 会导致 java.lang.IllegalAccessError
【发布时间】:2016-03-06 03:08:07
【问题描述】:

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

我正在努力实现的目标 在我的项目中包含uap-clj library,并将项目编译成jarfile。

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

  :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 depslein uberjar 创建了一个 jarfile。接下来,我将 uap-clj 添加到新项目的 :dependencies 中,保存 project.clj,并再次执行 lein depslein uberjar。我能够成功创建一个 jarfile,所以我相信我正确地添加了库。

我想不出包含另一个依赖项的行为会阻止我创建 jarfile 的另一个原因。如果您能根据我提供的信息想到一些我应该检查的东西,那将对我很有帮助。谢谢!

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

    看起来引用的库依赖于 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"]

    【讨论】:

    • 谢谢!这绝对有效!现在我知道要始终检查版本。
    猜你喜欢
    • 2019-01-21
    • 2020-03-18
    • 1970-01-01
    • 2018-06-23
    • 2018-04-25
    • 2019-02-09
    • 1970-01-01
    • 2014-11-28
    • 2020-08-28
    相关资源
    最近更新 更多