尝试运行Clojure Web应用程序时出现java.lang.IllegalArgumentException

java.lang.IllegalArgumentException when trying to run a clojure web application

我正在尝试运行使用ring,compojure,hiccup和lein-ring编写的clojure Web应用程序,当我运行lein环形服务器时,出现异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
java.lang.IllegalArgumentException: No implementation of method: :as-file of protocol: #'clojure.java.io/Coercions found for class: clojure.l
ang.PersistentVector
        at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:541)
        at clojure.java.io$fn__8496$G__8491__8501.invoke(io.clj:35)
        at clojure.java.io$file.invoke(io.clj:413)
        at leiningen.core.project$absolutize.invoke(project.clj:308)
        at clojure.lang.AFn.applyToHelper(AFn.java:163)
        at clojure.lang.AFn.applyTo(AFn.java:151)
        at clojure.core$apply.invoke(core.clj:619)
        at clojure.core$partial$fn__4190.doInvoke(core.clj:2396)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:619)
        at clojure.core$update_in.doInvoke(core.clj:5587)
        at clojure.lang.RestFn.invoke(RestFn.java:445)
        at leiningen.core.project$absolutize_path.invoke(project.clj:314)
        at clojure.core.protocols$fn__6034.invoke(protocols.clj:143)
        at clojure.core.protocols$fn__6005$G__6000__6014.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invoke(protocols.clj:31)
        at clojure.core.protocols$fn__6028.invoke(protocols.clj:48)
        at clojure.core.protocols$fn__5979$G__5974__5992.invoke(protocols.clj:13)
        at clojure.core$reduce.invoke(core.clj:6177)
        at leiningen.core.project$absolutize_paths.invoke(project.clj:322)
        at leiningen.core.project$init_profiles.doInvoke(project.clj:603)
        at clojure.lang.RestFn.invoke(RestFn.java:425)
        at leiningen.core.project$read.invoke(project.clj:684)
        at leiningen.core.project$read.invoke(project.clj:685)
        at leiningen.core.project$read.invoke(project.clj:686)
        at leiningen.core.main$_main$fn__1332.invoke(main.clj:256)
        at leiningen.core.main$_main.doInvoke(main.clj:252)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.lang.Var.invoke(Var.java:415)
        at clojure.lang.AFn.applyToHelper(AFn.java:161)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.core$apply.invoke(core.clj:617)
        at clojure.main$main_opt.invoke(main.clj:335)
        at clojure.main$main.doInvoke(main.clj:440)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.lang.Var.invoke(Var.java:423)
        at clojure.lang.AFn.applyToHelper(AFn.java:167)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.main.main(main.java:37)

我完成的谷歌搜索显示了两个选项,测试服名称不正确,或者我的project.clj中有多个Java源路径,我都检查了这两个路径,因此很困惑。

有人可以在堆栈跟踪中筛选并指出正确的方向吗? 谢谢。

编辑:project.clj

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(defproject cardmage"0.1.0-SNAPSHOT"
  :description"FIXME: write description"
  :url"http://example.com/FIXME"
  :source-paths ["src/main/clojure"]
  :java-source-paths ["src/main/java"] ; Java source is stored separately.
  :test-path ["src/test/clojure"]
  :resource-paths ["src/main/resource"]
  :dependencies [[org.clojure/clojure"1.5.1"]
                 [ring"1.2.0"]
                 [compojure"1.1.5"]
                 [hiccup"1.0.4"]
                 [org.clojure/data.json"0.2.3"]
                 [org.clojure/data.xml"0.0.7"]
                 [org.clojure/java.jdbc"0.3.0-alpha4"]
                 [ring-anti-forgery"0.2.1"]
                 [lib-noir"0.6.8"]
                 [com.novemberain/monger"1.5.0"]
                 [mysql/mysql-connector-java"5.1.26"]
                 [com.amazonaws/aws-java-sdk"1.5.5"]
                 [ragtime"0.3.3"]]
  :plugins [[ragtime/ragtime.lein"0.3.3"]
            [lein-ring"0.8.7"]
            [lein-beanstalk"0.2.7"]
            [lein-cljsbuild"0.3.2"]]
  :ragtime {:migrations ragtime.sql.files/migrations
          :database"jdbc:mysql://localhost:3306/example_db?user=root"} ;; Fill this in later.
  :ring {:handler cardmage.core/handler}
  :aws {
        :access-key ~(System/getenv"AWS_ACCESS_KEY")
        :secret-key ~(System/getenv"AWS_SECRET_KEY")
        :beanstalk {
                    :environments [{:name"beta"
                                    :cname-prefix"beta"}
                                   {:name"rc"
                                    :cname-prefix"rc"}
                                   {:name"prod"
                                    :cname-prefix"www"}]}}
  :cljsbuild {
    :builds [{
        :source-paths ["src/main/cljs"]
        :compiler {
          :output-to"resources/public/js/main.js"  ; default: target/cljsbuild-main.js
          :optimizations :advanced
          :pretty-print true}}]})

我正在使用leiningen 2.3.2


test-path是单数,但您给了它一个向量。 您只想给它一个字符串,或者使用test-paths即可,如lein的示例project.clj中所建议的(您也可以通过lein help sample看到此文件)。