首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译Clojure?

编译Clojure?
EN

Stack Overflow用户
提问于 2010-06-26 11:17:56
回答 3查看 11K关注 0票数 16

我在这里感觉有点傻,但我无法让Clojure Hello编译。

目录结构:

代码语言:javascript
复制
hello-world/
  clojure-1.1.0.jar
  build/
    classes/
  src/
    test/
      hello.clj

hello.clj:

代码语言:javascript
复制
(ns test.hello
  (:gen-class))

(defn -main [& args]
  (println "Hello" (nth args 0)))

互动:

代码语言:javascript
复制
$ cd hello-world
[hello-world]$ java -cp ./clojure-1.1.0.jar:./build/classes:./src clojure.main
Clojure 1.1.0
user=> (require 'test.hello)
nil
user=> (test.hello/-main "there")
Hello there
nil
user=> (compile 'test.hello)
java.io.IOException: No such file or directory (hello.clj:2)
user=> *compile-path*
"classes"
user=> (doseq [p (.split (System/getProperty "java.class.path") ":")] (println p))
./clojure-1.1.0.jar
./build/classes
./src
nil

所以我可以从REPL加载和调用文件,但是它不编译。

根据clojure.org的说法,编译需要

  • 命名空间必须匹配类路径-相对文件路径-检查。
  • *编译路径*必须在类路径检查中。
  • :指向ns表单的gen类参数

我找到了一年前的这篇文章,据我所知,我也在做同样的事情,但是它不起作用。

我遗漏了什么?

系统: OS X 10.6、Java 1.6.0、Clojure 1.1

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-27 10:50:10

你为什么不使用莱宁根?使用它比手工编译代码容易得多。你可以用我的文章作为介绍.

票数 11
EN

Stack Overflow用户

发布于 2010-06-26 11:27:20

明白了,还有第四条要求:

  • *编译路径*是相对于JVM工作目录解析的,通常是启动java的目录。或由REPL:(System/getProperty "user.dir")

因此,这是可行的:

代码语言:javascript
复制
user=> (set! *compile-path* "build/classes")     
"build/classes"
user=> (compile 'test.hello)
test.hello
票数 22
EN

Stack Overflow用户

发布于 2020-02-08 10:32:49

要运行clojure文件,请执行

代码语言:javascript
复制
clojure filename.clj
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3123662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档