【发布时间】:2012-08-05 02:43:07
【问题描述】:
我对 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 客户端虚拟机
有人知道我做错了什么吗?
问候 索伦·斯文森
谢谢!
我做了 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) 我从 REPL 运行 (compile 'xmltvproc.core)
之前,我通过调用我的“主”函数(run-it *command-line-args*) 结束了 core.clj。
我对 -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 文件
??
【问题讨论】:
-
java -cp clojure.jar clojure.main /path/to/myscript.clj arg1 arg2 arg3
-
如果您包含您的 project.clj 内容和无法看到 args 的行,我们可以给出更具体的答案
标签: clojure