Mas*_*sse 18 clojure leiningen classnotfoundexception
我是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)
Run Code Online (Sandbox Code Playgroud)
core.clj文件
(ns test.core
(:gen-class))
(defn -main [& args] (println "Hello main"))
Run Code Online (Sandbox Code Playgroud)
和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"]])
Run Code Online (Sandbox Code Playgroud)
编辑:经过进一步测试,似乎将项目复制到我的桌面工作原样,我认为我的笔记本电脑上的环境有点笨拙,但我不知道如何.
桌面环境是来自存储库和来自AUR的leiningen的clojure.在笔记本电脑上,clojure来自clojure.org,leining来自github.
sem*_*ros 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
Run Code Online (Sandbox Code Playgroud)
您现在应该有一个基本结构和lib文件夹中的Clojure jar .
现在src/my_project/core.clj使用您选择的编辑器进行编辑,在(ns ...)表单下方添加以下内容:
(defn -main []
(println "Hello World!"))
Run Code Online (Sandbox Code Playgroud)
此函数位于my-project.core命名空间内.为了确保它作为主要运行,让我们gen-class在顶部的命名空间定义中添加一个参数,以便它现在看起来像这样core.clj:
(ns my-project.core
(:gen-class :main true))
Run Code Online (Sandbox Code Playgroud)
总而言之,您的core.clj文件如下所示:
(ns my-project.core
(:gen-class :main true))
(defn -main []
(println "Hello World!"))
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
现在-main里面的函数my-project.core成为程序的入口点.
您现在可以有两个选项来运行此项目:
lein run在my-project项目的根目录下使用命令行lein uberjar.然后,您可以通过运行运行生成的jar文件java -jar my-project-1.0.0-SNAPSHOT-standalone.jar| 归档时间: |
|
| 查看次数: |
10221 次 |
| 最近记录: |