我是clojure的初学者,昨天才开始。
我认为创建独立应用的一种简单方法是使用leiningen lein new foo
。
我尝试用leiningen创建一个hello world测试项目。我添加了:main和:aot指令到project.clj,添加:gen-class到core.clj文件并尝试了lein run
,但是我发现找不到类定义的错误。
Exception in thread "main" java.lang.NoClassDefFoundError:
Caused by: java.lang.ClassNotFoundException:
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
core.clj文件
(ns test.core
(:gen-class))
(defn -main [& args] (println "Hello main"))
和project.clj文件
(defproject test "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:main test.core
:aot [test.core]
:dependencies [[org.clojure/clojure "1.2.1"]])
编辑:经过进一步测试后,似乎将项目复制到我的桌面工作原理,我认为我的笔记本电脑上的环境不知何故被剔除,但我不知道如何。
桌面上的环境是来自存储库和来自AUR的leiningen的clojure。在笔记本电脑上,clojure来自clojure.org,leining来自github。
答案 0 :(得分:31)
[2013年4月更新]
Leiningen 2已经正式发布了一段时间,其中包括项目模板的概念。默认情况下,Leiningen提供app
模板,提供开箱即用的功能。尝试:
lein new app my-project
您将看到Leiningen创建熟悉的项目模板,但也包括:
my-project.core
作为:main
文件中的project.clj
条目的默认命名空间:gen-class
my-project.core
表单
-main
命名空间my-project.core
函数
对于那些尚未使用Leiningen 2的人来说,lein-newnew插件在Leiningen 1下提供了相同的体验。
<强> [/ UPDATE] 强>
要构建一个项目,在运行时打印“Hello World!”,您将执行以下操作(上述过程的修订版):
lein new my-project
cd my-project
lein deps
你现在应该有lib
文件夹中的基本结构和Clojure jar。
现在使用您选择的编辑器编辑src/my_project/core.clj
,在(ns ...)
表单下方添加以下内容:
(defn -main []
(println "Hello World!"))
此函数位于my-project.core
命名空间内。为了确保将其作为主要内容运行,让我们在顶部的命名空间定义中添加gen-class
参数,以便它现在看起来像core.clj
的顶部:
(ns my-project.core
(:gen-class :main true))
总而言之,您的core.clj
文件如下所示:
(ns my-project.core
(:gen-class :main true))
(defn -main []
(println "Hello World!"))
如上所述编辑src/my_project/core.clj
后,您需要告诉Leiningen(构建工具)您项目的“主要”功能所在的位置。以下是执行此操作的示例defproject
形式:
(defproject my-project "1.0.0-SNAPSHOT"
:description "My Project"
:dependencies [[org.clojure/clojure "1.2.1"]]
:main my-project.core)
现在-main
内的my-project.core
功能成为您程序的入口点。
您现在可以有两个选项来运行此项目:
lein run
项目的根目录下,在命令行使用my-project
lein uberjar
创建独立的jar文件。然后,您可以通过运行java -jar my-project-1.0.0-SNAPSHOT-standalone.jar
答案 1 :(得分:1)
想出来。我有来自git的最新leiningen,不知何故被borked。我检查了1.6.1标签并运行自我安装,现在它可以工作。
答案 2 :(得分:0)
你说上面
lein new foo
你的意思是
lein new test
答案 3 :(得分:0)
我错过了,你命名了你的项目测试,你不能这样做,将名称更改为其他可行的名称。