Levi Campbell
Levi Campbell

Reputation: 6095

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

I'm trying to run a clojure web app I wrote using ring, compojure, hiccup, and lein-ring, and when I run lein ring server, I get an exception.

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)

The googling I've done shows two options, test suits not named properly, or having multiple java source paths in my project.clj, both of which I've checked, so I'm stumped.

Can someone please sift through the stack trace and point me in the right direction? Thank you.

EDIT: project.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}}]})

I'm using leiningen 2.3.2

Upvotes: 1

Views: 331

Answers (1)

amalloy
amalloy

Reputation: 91857

test-path is singular, but you gave it a vector. You want to just give it a string, or else use test-paths, as suggested in lein's sample project.clj (you can also see this file via lein help sample).

Upvotes: 3

Related Questions