经过3天的挫折,我必须寻求帮助。作为clojure的新手,我想使用改编自clojure.org的AOT页面的(编译'examples.hello)从REPL编译这个脚本:
(ns examples.hello
(:gen-class))
(defn -main
[greetee]
(println (str "Hello " greetee "!")))
我使用JEdit和clojure控制台插件作为我的编辑和leiningen的严肃项目。
$ HOME中的我的目录结构是: clojure-1.3.0(编辑以节省空间)
|-- classes
|-- clojure-1.3.0.jar
|-- clojure-1.3.0-slim.jar
|-- src
| |-- examples
| | |-- hello.clj
| | `-- hello.clj~
| |-- jvm
|
错误消息是:
FileNotFoundException Could not locate examples/hello__init.class or examples/hello.clj on classpath: clojure.lang.RT.load (RT.java:430)
有些问题:
a)如果我正在编译为什么编译函数要查找我试图创建的类文件?
b)使编译功能有效的“正确”步骤是什么? c)在我的互联网上搜索这个问题时,有许多引用'classpath'或'your classpath';假设classpath引用clojure.jar等并且正在处理的脚本而不是Java $ CLASSPATH这是不正确的,因为java 1.5以来一直没有必要吗?
答案 0 :(得分:0)
我为这个尴尬的答案道歉,但我还不了解Clojure的构建以及其他一些语言。所以,请耐心等待。我正在编写这个答案,你正在使用像lein这样的构建工具。
您的main-mine是addr-verify - 必须位于项目附带的project.clj指定的名称空间中。所以我的主要模块是core.clj,它将其名称空间声明为addr-verify,并且缺少更好的术语声明或使用gen-class。
我的project.clj表示main是addr-verify。
lein构建Clojure应用程序的一个好处是,它在您创建项目时为您设置了所有这些,例如lein create my-test-proj
。
以下是我的./addr-verify/project.clj
中的相关内容(defproject addr-verify "1.0.0-SNAPSHOT"
:description "TODO: add summary of your project"
:dependencies [[org.clojure/clojure "1.2.1"]
[clojure-csv/clojure-csv "1.2.4"]
[org.clojure/tools.cli "0.1.0"]
[clj-http "0.1.3"]]
:aot [addr-verify]
:main addr-verify)
以下是./addr-verify/src/addr_verify/core.clj的前几行
(ns addr-verify
(:gen-class)
(:require [clojure.string :as cstr])
(:require [clojure.contrib.str-utils :as ustr])
(:require [clj-http.client :as client])
(:use clojure-csv.core)
(:use [clojure.tools.cli])
(:import java.util.Date)
(:import java.lang.Thread)
(:import java.io.File)