我如何运行我创build的.clj Clojure文件?

我已经在我的Linux Mint机器上安装了Geany,并且写了一些简单的代码。 只是一个小小的问候世界,开始使用这门语言。

现在我想运行它,看看它输出。

我怎样才能运行这个代码? 我没有使用IDE或预先打包的东西,只是简单的文本编辑器Geany。

我应该运行什么命令?

您可以使用以下命令运行脚本:

java -cp clojure.jar clojure.main file.clj 

但是最好使用leiningen ,特别是当你开始添加依赖到你的项目。 lein提供了一些命令来运行你的代码(具有所有必要的依赖),用lein jar将代码打包到压缩文件中,或者用lein uberjar创build完整的,独立的压缩lein uberjar ,你可以运行它:

 java -jar your_app.jar 

命令

PS您可以在下面的文章中了解如何使用lein – 它描述了基本任务和configuration

随着clojure

我不敢相信没有人提出这个build议。 你应该能够做到

 clojure path/to/script.clj 

这工作使用apt-get安装在Ubuntu上的clojure。 不知道其他安装…

随着lein-exec

但是,如果你正在使用的脚本有任何依赖,我会推荐lein-exec插件 。 这有一个好处,就是让你使用Leiningen来处理任何依赖,这很好。 Leiningen 已经有一个lein run命令,但是它只能在完整的Clojure / lein项目中执行主要的function。 所以lein-exec插件是小规模脚本的一个很好的补充。

依赖关系详细信息…

注意:为了彻底,如果使用lein,可以将任何想要使用的库添加到~/.lein/profiles.clj文件中,或者如果您在项目中工作,则可以添加到您的project.clj文件中。 然后当你运行lein deps所有的依赖关系将被安装,并且在使用lein exec / lein run脚本/项目中可以被访问。 另外, lein repl为您提供了一个Clojure repl,可以访问这些依赖关系。 再说一次,如果你有任何库依赖关系的话,肯定是要走的路。

无论哪种方式,考虑使用drip加快启动时间

滴水是一个整洁的小工具,为您提供一个预启动的JVM映像准备启动。 这对于减lessJVM应用程序的启动时间可能是不错的。 Clojure可能需要相当长的时间才能自我引导,所以点滴是帮助加速这个过程的好工具。 特别是在你编写小脚本的时候,通常会有一个快速运行的期望。 如果您使用的是leiningen,请查看lein-drip插件。

对于ClojureScript

我build议http://planck-repl.org/ 。 它现在支持(引导)快速启动ClojureScript脚本,而无需启动JVM或Clojure。 对于大多数脚本任务来说,快速执行很重要,所以当你不需要任何特定于JVM的东西时,这是我的第一个build议。

一旦你安装了lein和lein-exec插件,运行你创build的.clj文件就像

 lein exec hello.clj 

如果你传递类似的命令行参数

 lein exec hello.clj arg1 arg2 arg3 

你可以在你的hello.clj中的'foo'函数中访问它们

 (foo *command-line-args*) 

对于一个可以添加的clj文件,

 #!/usr/bin/env java -cp /path/to/clojure-1.2.0.jar clojure.main 

到文件的顶部,使其可执行或您可以使用leiningen这是一个clojure构build工具,它会创build一个包装一切的一个jar,然后你可以做,

 java -jar cool_app.jar 

Drip现在可能是这个问题的最好答案(请参阅Drip的wiki ,了解有关使用Clojure的Drip的详细信息)。

Cake被整合到了Leiningen中,并且被Drip取代为Clojure自动化的最稳定的实现 – 在这里可以看到类似问题的答案 。

我在使用lein的clojure项目中运行特定的clojure脚本文件时遇到类似的问题。 然后我find了一个捷径,想到分享相同。

project.clj文件中,你可以切换clojure脚本文件名(当然有主要的方法)。 以下是对此的声明。

:main ^:skip-aot conv.newconv ; here conv is namespace and newconv is the file name ; here conv is namespace and newconv is the file name

注意:我是clojure的新手,我不确定为什么使用“^:skip-aot”,我没有检查过。

注意:这种方法不需要安装任何插件,也不需要生成任何jar文件。 这只需要在项目文件中更改名称。

假设:你的clojure项目有多个clojure文件,每个都有主要的方法。 我假设这是为了testing目的而创build的。 我的解决scheme将适用于这种特定的情况。

如果你只是想执行一个文件,如何pipe道到repl如:

cat $PATH_TO_FILE | lein repl