1

经过三天的挫折,我必须寻求帮助。作为 clojure 的新手,我想使用改编自 clojure.org 的 AOT 页面的 (compile '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)在我对这个问题的互联网搜索中,有很多提到“类路径”或“你的类路径”;假设类路径引用 clojure.jar 等并且脚本正在处理而不是 java $CLASSPATH 是否正确,这自 java 1.5 以来一直是不必要的?

4

1 回答 1

0

我为这个尴尬的答案道歉,但我还不了解 Clojure 构建以及其他一些语言。所以,请多多包涵。我是从您使用像 lein 这样的构建工具的角度来写这个答案的。

你的主要——我的是 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)
于 2012-04-21T14:07:43.717 回答