2011-12-20 43 views
3

我試圖在Travis CI服務上使用Clojure的Midje測試框架。Travis-ci上的Midje與NoSuchMethodError:KeywordLookupSite失敗。 <init>

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)工作正常,但特拉維斯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會出現錯誤,但不是我的機器?我能做些什麼來解決這個問題?

+0

這裏是爲我工作的解決方案:HTTP:// Clojure的播放框架.blogspot.com/2012/01/re-new-version-of-clojurescript-one.html – 2012-01-29 00:27:50

回答

3

在對這個問題的原因進行了不成功的搜索之後,我偶然發現了一個GitHub project,它似乎成功地使用了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"]]) 

我張貼的問題,這裏的解決辦法,使其更容易獲得。

我仍然對有關根本原因和替代解決方案的信息感興趣。

+0

謝謝。我在本地遇到同樣的問題。在我的項目中添加lib目錄,添加:exclusions [org.clojure/clojure]位,然後再次運行'lein deps'對我來說就是一招。 – gregspurrier 2012-01-13 19:30:32

+0

當clojure 1.2運行clojure 1.3代碼時,主要還是找不到關鍵字LookupSite。我認爲你應該升級midje。 – 2012-01-29 13:29:46

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 
相關問題