在travis-ci上运行的Midje出现NoSuchMethodError: KeywordLookupSite.<init>错误。

3
我将尽力为您翻译。以下是您需要翻译的内容:

我正在尝试在Travis CI服务上使用Midje测试框架来进行Clojure编程。

project.clj文件如下:

(defproject my-project "0.1.0-SNAPSHOT"
  :description "Example"
  :dependencies [[org.clojure/clojure "1.3.0"]]
  :dev-dependencies [[midje "1.3.0"]
                     [lein-midje "1.0.7"]])

我添加了一个 .travis.yml 文件:
language: clojure
script: "lein midje"

在本地运行lein midje(Ubuntu 11.10)是正常的,但在Travis CI上构建失败,并出现以下异常:

Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodError: clojure.lang.KeywordLookupSite.<init>(ILclojure/lang/Keyword;)V
at clojure.lang.Util.runtimeException(Util.java:165)
at clojure.lang.Compiler.eval(Compiler.java:6476)
at clojure.lang.Compiler.eval(Compiler.java:6431)
at clojure.core$eval.invoke(core.clj:2795)
at clojure.main$eval_opt.invoke(main.clj:296)
at clojure.main$initialize.invoke(main.clj:315)
at clojure.main$script_opt.invoke(main.clj:339)
at clojure.main$main.doInvoke(main.clj:426)
at clojure.lang.RestFn.invoke(RestFn.java:482)
at clojure.lang.Var.invoke(Var.java:417)
at clojure.lang.AFn.applyToHelper(AFn.java:178)
at clojure.lang.Var.applyTo(Var.java:518)
at clojure.main.main(main.java:37)
Caused by: java.lang.NoSuchMethodError: clojure.lang.KeywordLookupSite.<init>(ILclojure/lang/Keyword;)V
at leiningen.util.paths$native_arch_path.<clinit>(paths.clj:32)
at leiningen.util.paths__init.load(Unknown Source)
at leiningen.util.paths__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at clojure.lang.RT.loadClassForName(RT.java:2030)
at clojure.lang.RT.load(RT.java:417)
at clojure.lang.RT.load(RT.java:398)
at clojure.core$load$fn__4610.invoke(core.clj:5386)at clojure.core$load.doInvoke(core.clj:5385)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5200)
at clojure.core$load_lib.doInvoke(core.clj:5237)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:602)
at clojure.core$load_libs.doInvoke(core.clj:5271)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:602)
at clojure.core$require.doInvoke(core.clj:5352)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at leiningen.core$loading__4414__auto__.invoke(core.clj:1)
at leiningen.core__init.load(Unknown Source)
at leiningen.core__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at clojure.lang.RT.loadClassForName(RT.java:2030)
at clojure.lang.RT.load(RT.java:417)
at clojure.lang.RT.load(RT.java:398)
at clojure.core$load$fn__4610.invoke(core.clj:5386)
at clojure.core$load.doInvoke(core.clj:5385)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5200)
at clojure.core$load_lib.doInvoke(core.clj:5237)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:602)
at clojure.core$load_libs.doInvoke(core.clj:5271)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:604)
at clojure.core$use.doInvoke(core.clj:5363)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at user$eval1.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:6465)
... 11 more
为什么在Travis CI上会出现错误,但在我的电脑上却没有?有什么方法可以解决这个问题吗?

这是对我有效的解决方案:http://clojure-play-framework.blogspot.com/2012/01/re-new-version-of-clojurescript-one.html - user394194
2个回答

3

在寻找问题原因无果后,我发现了一个GitHub项目,该项目似乎已经成功地使用Midje和Travis CI。我也可以使用以下解决方法使其正常工作:

(defproject my-project "0.1.0-SNAPSHOT"
  :description "Example"
  :dependencies [[org.clojure/clojure "1.3.0"]]
  :dev-dependencies [[midje "1.3.0" :exclusions [org.clojure/clojure]]
                     [lein-midje "1.0.7"]])

我在这里发布问题和解决方法,以使其更易访问。
我仍然对根本原因和替代解决方案感兴趣。

谢谢你。我在本地也遇到了同样的问题。删除项目中的lib目录,添加:exclusions [org.clojure/clojure],然后再次运行'lein deps'就解决了我的问题。 - gregspurrier
当使用Clojure 1.2运行Clojure 1.3代码时,通常会出现“KeywordLookupSite未找到”的错误。我认为您应该升级Midje。 - Ning Sun

0

我最近遇到了这个问题,但是我使用的是lein2而不是lein。对于lein2,project.clj文件至少应该包含以下内容:

{:profiles {:dev {:dependencies [[midje "1.6.0" :exclusions [org.clojure/clojure]]]
                  :plugins [[lein-midje "3.1.3"]]}}

而 .travis.yml 应该包括:

script: lein2 midje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接