我对clojure有点陌生,但我是一位非常有经验的程序员。
我编写了一个 clojure 程序来处理和评价 XMLTV 列表(供个人使用)。该程序运行良好。它还在运行时加载编写为 clojure 语句的规则并执行它们。我读过这意味着我不能“预编译”我的程序,我必须通过 REPL 运行它(像这样"java -cp clojure-1.4.0.jar clojure-1.4.0.jar my-core.clj my-args"
)。如果这是错误的,请纠正我。
问题是,当我在 Windows 中运行它时,my-core.clj 中的“main”函数可以正常运行,但是当我尝试在 Ubuntu 12.04 下运行它时,它要么抱怨找不到 clojure/main,要么我的职能。我不想放弃,我尝试过"lein run my-args"
(该项目是用 Leiningen 构建的),但我的程序作为command-line得到了 nil 。
我也尝试-m namespace/func
过同样的结果。
我正在使用 Leiningen 1.7.1 和 Java 1.6.0_24 OpenJDK Client VM
有人知道我做错了什么吗?
问候索伦·斯文森
谢谢!
我做了3个改变,
1)我添加了(:gen-class)
2)我添加了一个:
(defn -main [cmd-line]
(println (type cmd-line))
(println cmd-line)
(println (type command-line-args))
(println command-line-args))
3) 我(compile 'xmltvproc.core)
从 REPL跑了
之前,我通过调用我的“main”函数来结束 core.clj (run-it *command-line-args*)
。我对 -main 的测试表明 cmd-line 是命令行,但command-line-args是 nil。
现在运行它可以lein run arg1 arg2
工作,但是当我尝试时java -cp ...
它仍然失败。
java -cp ./lib/clojure.jar ./classes/xmltvproc/core arg1 arg2
Exception in thread "main" java.lang.NoClassDefFoundError: //classes/xmltvproc/core
java -cp ./lib/clojure.jar xmltvproc.core arg1 arg2
Exception in thread "main" java.lang.NoClassDefFoundError: clojure/lang/IFn
我已经尝试了所有我能想到的排列,结果始终是上述两种之一。
这是我的 project.clj 文件:
(defproject xmltvproc "1.0.0-SNAPSHOT"
:description "Convert XMLTV listings to CSV file"
:main xmltvproc.core
:dependencies [[org.clojure/clojure "1.4.0"]])
我的 xmltvproc/classes/xmltvproc 有所有预期的 .class 文件
??