2011-07-21 37 views
27

我正在使用Leiningen(第一次)管理我的写作应用程序。到目前为止,我已经定义了项目依赖关系,在项目lib目录中安装了deps,并定义了一个函数。当我从项目根目录运行lein repl,然后调用我定义的函数时,出现错误unable to resolve symbol。任何人都知道我做错了什么,以及如何通过Leiningen正确运行我的应用程序?谢谢。如何使用Leiningen运行代码?

回答

29

来自leiningen repl,您将不得不切换到您的函数在in-ns宏中定义的命名空间。

(in-ns 'myproject.core) 

则函数应该可以
你也可以use从REPL命名空间包含在默认(用户)的命名空间。

(use 'myproject.core) 

后,你可能要考虑寻找到lein runlein uberjarlein jar leiningen任务。因此

+0

我不知道'lein run',你能指点我到哪里可以找到mroe信息吗?我在我的项目命名空间中设置了':main',但我在使用带参数的'lein run'时遇到了一些困难;我不断地得到'线程中的异常'main“java.lang.NullPointerException(NO_SOURCE_FILE:1)' – sjac

+1

如果你执行'lein help'(甚至只是'lein'),就会显示一个命令列表。你可以深入挖掘命令的名字;例如:'lein help run' – Scott

16

在我的项目,对于core.clj文件,其中包含一个命名空间中定义:

(ns my-project.core) 

...我设置project.clj在Leiningen的defproject地图:main键:

(defproject my-project "1.0.0-SNAPSHOT" 
    :description "My project description" 
    :dependencies [[org.clojure/clojure "1.2.1"]] 
    :main my-project.core) 

所以,当我运行lein repl,我的核心命名空间是自动加载的,我看到:

mac:my-project scott$ lein repl 
REPL started; server listening on localhost:31515. 
my-project.core=> 
+1

如果我使用':main',热码解析是否自动发生? – sjac

+7

我不确定您是否问Leiningen是否会自动查找文件更改并将它们加载到您的实时REPL中,但它没有这样做。但是,不要重启REPL,你可以执行以下命令来加载最新的代码:'(use:reload-all'my-project.core)' – Scott