独立clojure应用程序
我是clojure的初学者,昨天才开始 我发现创建独立应用程序的一个简单方法是使用leiningen独立clojure应用程序,clojure,classnotfoundexception,leiningen,Clojure,Classnotfoundexception,Leiningen,我是clojure的初学者,昨天才开始 我发现创建独立应用程序的一个简单方法是使用leiningenlein new foo 我试图用leiningen创建一个hello world测试项目。我在project.clj中添加了:main和:aot指令,在core.clj文件中添加了:gen class,并尝试了lein run,但没有找到有关类定义的错误 Exception in thread "main" java.lang.NoClassDefFoundError: Caused by:
lein new foo
我试图用leiningen创建一个hello world测试项目。我在project.clj中添加了:main和:aot指令,在core.clj文件中添加了:gen class,并尝试了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"]])
编辑:经过进一步的测试,似乎将项目复制到我的桌面上就可以正常工作了,我认为这表明我的笔记本电脑上的环境有点问题,但我不知道怎么做
桌面上的环境是来自存储库的clojure和来自AUR的leiningen。在笔记本电脑上,clojure来自clojure.org,leining来自github 你上面说的
lein new foo
你的意思是
lein new test
[2013年4月更新] Leiningen2已经正式发布了一段时间,它包含了项目模板的概念。默认情况下,Leiningen提供了一个
应用程序
模板,可以提供您所需的现成内容。尝试:
lein新应用程序我的项目
您将看到,Leiningen创建了熟悉的项目模板,但还包括:
的默认名称空间,作为myproject.core
文件中的project.clj
条目:main
表单位于:gen类
我的项目.core的命名空间声明中
命名空间中的默认my project.core
函数-main
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)
现在,我的项目.core中的-main
函数成为程序的入口点
运行它
您现在可以使用两个选项来运行此项目:
- 在命令行中使用
lein run
,同时在my project
项目的根目录下运行
- 通过运行
leinuberjar
创建一个独立的jar文件。然后,您可以通过运行java-jar my-project-1.0.0-SNAPSHOT-standalone.jar
我错过了,你给你的项目命名了测试,你不能这样做,把名字改成其他它可以工作的东西。找到了答案。我从git那里得到了最新的leiningen,不知怎么的,它坏了。我签出了1.6.1标记并运行了自安装,现在它可以运行了。您的类路径设置为什么?@deong my$HOME/bin/clj文件具有“CLASSPATH=。:$CLASSPATH”如果您在shell中执行“export CLASSPATH=。:$CLASSPATH”,然后运行“lein run”,会发生什么?我不相信leiningen调用CLJShell脚本来运行您的程序。我认为它直接用clojure jar文件作为参数调用java。@deong还是一样。或者更确切地说,它甚至不能创建jar文件。lein compile给出了同样的错误嗯…我画了一个空白。clojure代码在我看来是正确的。啊,我明白你为什么这么想,但我确实使用了lein new testAs。我的编辑说,我认为错误在我的笔记本电脑环境中,因为项目直接复制到桌面时编译正常。不过,这是一篇很棒的文章,所以我将对此进行投票。我在Ubuntu的存储库中安装了git,我也有同样的问题。我也应该使用git版本吗?
(defproject my-project "1.0.0-SNAPSHOT"
:description "My Project"
:dependencies [[org.clojure/clojure "1.2.1"]]
:main my-project.core)