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

标签 java clojure

我正在尝试运行我使用 ring、compojure、hiccup 和 lein-ring 编写的 clojure 网络应用程序,当我运行 lein ring server 时,出现异常。

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 源路径,这两个我都检查过,所以我很困惑。

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

编辑:项目.clj

(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 是单数,但你给了它一个 vector 。您只想给它一个字符串,或者使用 test-paths,如 lein's sample project.clj 中所建议的那样(您也可以通过 lein help sample 查看此文件)。

关于尝试运行 clojure Web 应用程序时出现 java.lang.IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553042/

相关文章:

clojure - Lisp解释时 "reader"的任务是什么?

clojure - 保存后如何自动运行命令lein run?

java - 从几个科学计数法中获取数字

Java GUI 分辨率独立缩放

java - 创建 Java DatagramSocket 对象时为 "address already in use cannot bind"。

Java初学者在这里,我想弄清楚如何检查扫描仪输入是否是整数

json - Clojure 使用 ring-json 编码 Joda DateTime

clojure - 第一个 clojure 编译器?

Clojure代码静态分析工具

java - Jooq Maven 代码生成 : Cannot find symbol