如何在eclipse中设置clojure项目,以便在单击运行时启动?

时间:2014-04-07 07:40:56

标签: java eclipse clojure

这是我第一次使用Clojure,但我知道lisp和java,但很快就厌倦了这个REPL!我不认为当我点击运行时,应用程序运行,所以我添加了一个:main到我的项目,这太过分了。

(defproject Physics "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]]  
  :aot [Physics.core]
  :main Physics.core
)

这就是我现在得到的

Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: -main in this context, compiling:(Physics/core.clj:19:3)

应用程序在尝试将其设置为自动启动之前正常工作但在我将:main指令添加到我的项目之后它已经破坏了,删除:main指令根本没有帮助,因为我现在得到了同样的错误。如果我尝试从REPL手动加载应用程序,则无法找到它。

;; Clojure 1.5.1
=> (load "core")
FileNotFoundException Could not locate core__init.class or core.clj on classpath:   clojure.lang.RT.load (RT.java:443)

重启eclipse解决了这个问题......

以下是src / Physics / core.clj中的代码(根据初步答案修改)

(ns Physics.core (:gen-class))

(declare -main)

(defn app-name []
  "Physics"
)

(defn version []
  "0.0.1-alpha"
)

(defn reload [] 
  (load "core")
  (load "config")
  (load "desktop")
)

(defn author []
  "Ralph Ritoch"
)

(defn author-email []
  "Ralph Ritoch <rritoch@gmail.com>"
)

(defn copyright []
  "Copyright \u00A9 2014 Ralph Ritoch. All rights reserved."
)

(defn banner []
  (println (str (app-name) " v" (version)))
  (println (copyright))
)

(defn restart []
  (reload)
  (-main)
)

(defn -main [& args]
  (ns Physics.core)
  (banner)
  (load "config")
  (load "desktop")
  (eval '(Physics.desktop/create))
)

主要问题仍然存在。点击运行后如何启动它?当我点击立即运行时,我得到的是一条绿色的消息,上面写着#&#39; Physics.core / -main但是应用程序实际上并没有运行。

2 个答案:

答案 0 :(得分:2)

  1. -main ns
  2. 中应该有Physics.core个功能
  3. => (load "core")直接在core.clj文件夹中查找src。您应该使用(load "Physics/core")代替。

  4. (defn restart [] (reload) (-main) ) 在这里,您应该在此表单之前写下(declare -main)

答案 1 :(得分:1)

从eclipse主菜单中选择运行&gt;运行配置,然后选择或创建一个clojure运行配置并单击(x)= Arguments 选项卡,并将程序参数:设置为以下内容。< / p>

-m Physics.core

Physics.core 替换为包含-main defn

的命名空间

注意:这可能不是最佳解决方案,但可行。