本文介绍了从命令行将Clojure源代码编译为类(AOT)(不使用lein)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将clojure源代码编译到类文件中,并仅使用命令行运行它,没有lein,也没有(可能)答复。

I'm trying to compile clojure source into class file, and run it using command line only, no lein, nor (possibly) reply.

我有核心.clj在 src / hello 目录中。

I have core.clj in src/hello directory.

.
└── src
    └── hello
        └── core.clj

这是源代码。

(ns hello.core)
(defn -main
  "This should be pretty simple."
  []
  (println "Hello, World!"))



使用在REPL中(编译)



从此站点的提示中显示(),我试图从REPL获取类文件。

using (compile) in REPL.

From the hint in this site (http://clojure.org/compilation), I tried to get class file from REPL.

我从src目录中的 lein repl 开始REPL,然后尝试编译以获取错误。

I started REPL with lein repl in src directory, then tried to compile to get an error.

user=> (compile 'hello.core)

CompilerException java.io.IOException: No such file or directory, compiling:(hello/core.clj:1:1)  



命令行



来自此帖子和,看来我可以在REPL之外编译clojure源。

Command line

From this post simple tool for compiling Clojure .clj into .class / .jar and How to compile file in clojure, it seems like that I can compile the clojure source outside REPL.

我在中尝试过此操作。遇到错误。

> java -cp .:<PATH>/clojure-1.6.0.jar -Dclojure.compile.path=build clojure.lang.Compile src/hello/core.clj 
Compiling src/hello/core.clj to build
Exception in thread "main" java.io.FileNotFoundException: Could not locate 
hello/core/clj__init.class or hello/core/clj.clj on classpath: 
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:411) 
...

所以,这是我的问题:


  • 如何编译

  • 如何使用Java运行类?执行 java -cp。:CLOJURE_JAR main 是否足够?

  • How can I compile the clojure source to get the class with/without REPL?
  • How to run the class with Java? Is it enough to execute java -cp .:CLOJURE_JAR main?

推荐答案

REPL



何时调用REPL,您应该添加类路径。

REPL

When invoking REPL, you should add class path.

java -cp .:<PATH>/clojure-1.6.0.jar:./src clojure.main

您需要设置 * compile-路径* (设置!* compile-path * build)

然后您可以编译以获取类文件。

Then you can compile to get the class file.

user=> (compile 'hello.core)
hello.core



命令行



有两个问题:

Command line

There are two issues:


  1. 要进行编译,CP应该包括源目录。

  2. 参数不是文件路径,而是名称空间。

这是调用编译器。

clojure> java -cp .:<PATH>/clojure-1.6.0.jar:./src -Dclojure.compile.path=build clojure.lang.Compile hello.core
Compiling hello.core to build



执行类文件



您应指向类文件所在的目录。

Execution of the class file

You should point to the directory where the class files are located.

clojure> java -cp .:<PATH>/clojure-1.6.0.jar:./build hello.core
Hello, World!



参考文献






  • References

    • Compiling Clojure?
    • http://clojure.org/compilation
    • 这篇关于从命令行将Clojure源代码编译为类(AOT)(不使用lein)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 06:05