2017-03-25 4 views
0

leiningen을 사용하여 Clojure repl을 열려고합니다. 프로젝트 디렉토리의 콘솔에서 열면 오류가 발생하지만 lein run을 사용하면 모든 것이 올바르게 작동합니다. 또한 lein repl을 비 프로젝트 디렉토리에서 시작하면 제대로 작동합니다.lein repl가 실패하지만 lein run이 작동합니다.

이 문제의 원인은 무엇입니까 ???

$ lein repl 
#error { 
:cause Don't know how to create ISeq from: java.lang.Character 
:via 
[{:type java.lang.IllegalArgumentException 
    :message Don't know how to create ISeq from: java.lang.Character 
    :at [clojure.lang.RT seqFrom RT.java 542]}] 
:trace 
[[clojure.lang.RT seqFrom RT.java 542] 
    [clojure.lang.RT seq RT.java 523] 
    [clojure.core$seq__4357 invokeStatic core.clj 137] 
    [clojure.core$concat$fn__4446 invoke core.clj 706] 
    [clojure.lang.LazySeq sval LazySeq.java 40] 
    [clojure.lang.LazySeq seq LazySeq.java 49] 
    [clojure.lang.Cons next Cons.java 39] 
    [clojure.lang.RT boundedLength RT.java 1749] 
    [clojure.lang.RestFn applyTo RestFn.java 130] 
    [clojure.core$apply invokeStatic core.clj 648] 
    [clojure.core$load_libs invokeStatic core.clj 5778] 
    [clojure.core$load_libs doInvoke core.clj 5758] 
    [clojure.lang.RestFn applyTo RestFn.java 137] 
    [clojure.core$apply invokeStatic core.clj 648] 
    [clojure.core$require invokeStatic core.clj 5796] 
    [clojure.core$require doInvoke core.clj 5796] 
    [clojure.lang.RestFn invoke RestFn.java 408] 
    [user$eval5 invokeStatic form-init8518282048677853666.clj 1] 
    [user$eval5 invoke form-init8518282048677853666.clj 1] 
    [clojure.lang.Compiler eval Compiler.java 6927] 
    [clojure.lang.Compiler eval Compiler.java 6916] 
    [clojure.lang.Compiler eval Compiler.java 6916] 
    [clojure.lang.Compiler load Compiler.java 7379] 
    [clojure.lang.Compiler loadFile Compiler.java 7317] 
    [clojure.main$load_script invokeStatic main.clj 275] 
    [clojure.main$init_opt invokeStatic main.clj 277] 
    [clojure.main$init_opt invoke main.clj 277] 
    [clojure.main$initialize invokeStatic main.clj 308] 
    [clojure.main$null_opt invokeStatic main.clj 342] 
    [clojure.main$null_opt invoke main.clj 339] 
    [clojure.main$main invokeStatic main.clj 421] 
    [clojure.main$main doInvoke main.clj 384] 
    [clojure.lang.RestFn invoke RestFn.java 421] 
    [clojure.lang.Var invoke Var.java 383] 
    [clojure.lang.AFn applyToHelper AFn.java 156] 
    [clojure.lang.Var applyTo Var.java 700] 
    [clojure.main main main.java 37]]} 
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.Symbol, compiling:(/tmp/form-init8518282048677853666.clj:1:73) 
    at clojure.lang.Compiler.load(Compiler.java:7391) 
    at clojure.lang.Compiler.loadFile(Compiler.java:7317) 
    at clojure.main$load_script.invokeStatic(main.clj:275) 
    at clojure.main$init_opt.invokeStatic(main.clj:277) 
    at clojure.main$init_opt.invoke(main.clj:277) 
    at clojure.main$initialize.invokeStatic(main.clj:308) 
    at clojure.main$null_opt.invokeStatic(main.clj:342) 
    at clojure.main$null_opt.invoke(main.clj:339) 
    at clojure.main$main.invokeStatic(main.clj:421) 
    at clojure.main$main.doInvoke(main.clj:384) 
    at clojure.lang.RestFn.invoke(RestFn.java:421) 
    at clojure.lang.Var.invoke(Var.java:383) 
    at clojure.lang.AFn.applyToHelper(AFn.java:156) 
    at clojure.lang.Var.applyTo(Var.java:700) 
    at clojure.main.main(main.java:37) 
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.Symbol 
    at clojure.lang.RT$1.invoke(RT.java:239) 
    at user$eval5.invokeStatic(form-init8518282048677853666.clj:1) 
    at user$eval5.invoke(form-init8518282048677853666.clj:1) 
    at clojure.lang.Compiler.eval(Compiler.java:6927) 
    at clojure.lang.Compiler.eval(Compiler.java:6916) 
    at clojure.lang.Compiler.eval(Compiler.java:6916) 
    at clojure.lang.Compiler.load(Compiler.java:7379) 
    ... 14 more 
Exception in thread "Thread-3" clojure.lang.ExceptionInfo: Subprocess failed {:exit-code 1} 
    at clojure.core$ex_info.invokeStatic(core.clj:4617) 
    at clojure.core$ex_info.invoke(core.clj:4617) 
    at leiningen.core.eval$fn__5732.invokeStatic(eval.clj:264) 
    at leiningen.core.eval$fn__5732.invoke(eval.clj:260) 
    at clojure.lang.MultiFn.invoke(MultiFn.java:233) 
    at leiningen.core.eval$eval_in_project.invokeStatic(eval.clj:366) 
    at leiningen.core.eval$eval_in_project.invoke(eval.clj:356) 
    at leiningen.repl$server$fn__11838.invoke(repl.clj:243) 
    at clojure.lang.AFn.applyToHelper(AFn.java:152) 
    at clojure.lang.AFn.applyTo(AFn.java:144) 
    at clojure.core$apply.invokeStatic(core.clj:646) 
    at clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1881) 
    at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1881) 
    at clojure.lang.RestFn.invoke(RestFn.java:425) 
    at clojure.lang.AFn.applyToHelper(AFn.java:156) 
    at clojure.lang.RestFn.applyTo(RestFn.java:132) 
    at clojure.core$apply.invokeStatic(core.clj:650) 
    at clojure.core$bound_fn_STAR_$fn__4671.doInvoke(core.clj:1911) 
    at clojure.lang.RestFn.invoke(RestFn.java:397) 
    at clojure.lang.AFn.run(AFn.java:22) 
    at java.lang.Thread.run(Unknown Source) 

REPL server launch timed out 

그리고 여기 내 실제 core.clj 파일입니다

(ns app.core) 

(defn gcd 
    ([b c] (gcd b c b c)) 
    ([b c d e] 
     (cond (> b c) (recur (- b c) c d e) 
      (< b c) (recur b (- c b) d e) 
      :else (println b (/ b d) (/ b e))))) 


(defn -main [& args] 

    (gcd 164642622978589800 78499828003450) 

) 

여기 내 project.clj 파일입니다

(defproject app "0.1.0-SNAPSHOT" 
    :main "app.core" 
    :description "First Application" 
    :url "" 
    :license {:name "Eclipse Public License" 
      :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :dependencies [[org.clojure/clojure "1.8.0"]] 
) 
+0

하지 문제,하지만 당신은 그것을 인쇄하는 대신 GCD를 반환해야합니다. – Carcigenicate

+0

내 컴퓨터에서 재생할 수 있습니다. – Carcigenicate

답변

1

2 문제 :

  1. gen-class 지시어가 필요합니다.매크로. 이로 인해 lein run이 실패했을 것입니다. 실패한 경우 실패합니다. 참고 : 아서 (Arthur)는 의견에서이 경우에는 필요하지 않다고 말했다. 나는 그를 훨씬 더 권위있는 것으로 생각한다. 그래서 필요없는 것처럼 보인다. 내 IDE 때문에 오류가 발생한 것 같습니다. 메시지가 정확히 무엇인지 기억하지 못하기 때문에 "엔트리 포인트"오류라고 생각했습니다.

  2. (주된 문제) project.clj에서 주를 나타내는 문자열을 사용하고 있습니다. Clojure는 그것이 상징이 될 것으로 기대합니다.


(ns app.core 
    (:gen-class)) ; 1. 

(defn gcd 
    ([b c] (gcd b c b c)) 
    ([b c d e] 
    (cond (> b c) (recur (- b c) c d e) 
     (< b c) (recur b (- c b) d e) 
     :else (println b (/ b d) (/ b e))))) 


(defn -main [& args] 

    (gcd 164642622978589800 78499828003450)) 

Project.clj

:

(defproject app "0.1.0-SNAPSHOT" 
    :main app.core ; 2. 
    :description "First Application" 
    :url "" 
    :license {:name "Eclipse Public License" 
      :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :dependencies [[org.clojure/clojure "1.8.0"]]) 
+0

# 1은 내가이 경우에 문제가되지 않습니다. 몇 가지 경우에만 gen 클래스의 부족 문제가 발생할 것입니다. –

+0

@ArthurUlfeldt'lein run'은 예상치 못한 "엔트리 포인트를 찾을 수 없습니다"또는 오류가 무엇이든지 나와 함께 실패했습니다. IntelliJ 터미널에서 실행 중이므로 IntelliJ와 관련된 것일 수 있습니다. – Carcigenicate

+0

@ArthurUlfeldt 내 의견을 반영하도록 내 답변이 업데이트되었습니다. – Carcigenicate