Command line 如何运行我创建的.clj Clojure文件?
我已经在我的LinuxMint机器上安装了Geany,并编写了一些简单的代码。只是一个小小的hello world,开始学习该语言 现在我想运行它,看看它输出了什么 如何运行此代码?我没有使用IDE或预先打包的东西,只是使用简单的文本编辑器GeanyCommand line 如何运行我创建的.clj Clojure文件?,command-line,clojure,Command Line,Clojure,我已经在我的LinuxMint机器上安装了Geany,并编写了一些简单的代码。只是一个小小的hello world,开始学习该语言 现在我想运行它,看看它输出了什么 如何运行此代码?我没有使用IDE或预先打包的东西,只是使用简单的文本编辑器Geany 我应该运行什么命令?对于可以添加的单个clj文件 #!/usr/bin/env java -cp /path/to/clojure-1.2.0.jar clojure.main 或者你可以使用leiningen,这是一个clojure构建工具,它
我应该运行什么命令?对于可以添加的单个clj文件
#!/usr/bin/env java -cp /path/to/clojure-1.2.0.jar clojure.main
或者你可以使用leiningen,这是一个clojure构建工具,它将创建一个jar,将所有内容打包,然后你就可以
java -jar cool_app.jar
可以使用以下命令运行脚本:
java -cp clojure.jar clojure.main file.clj
但最好使用它,尤其是当您开始向项目添加依赖项时。lein提供了大量命令来运行代码(具有所有必要的依赖项),使用lein-jar
将代码打包到存档中,或者使用lein-uberjar
创建完整、独立的存档,您可以使用:
java -jar your_app.jar
命令
另外,您可以在中阅读如何使用
lein
——它描述了基本任务和配置FWIW,我将这里的问题解释为专门询问如何运行单个文件,如脚本,而不是作为编译项目的一部分。
显然,在运行单个文件的方式和原因以及构建完整项目的方式之间存在着一定的关系,因此我在一些方面也考虑了这一点
最佳选择:clj
工具
文件如下:
这是Clojure项目的官方部分,这本身就是走这条路线的一个很好的理由。但是,与其他解决方案相比,它有两个优点:
- 通过
deps.edn
- 还可以通过git引用解析依赖关系李>
似乎比~/.clojure/deps.edn
~/.lein/profiles.clj
- 如果您需要在repl中加载代码,
不会像clj
那样被阻塞的src文件阻塞lein repl
clj您的代码文件。clj
或者如果你有依赖关系
clj-Sdeps'{:deps{clj time{:mvn/version“0.14.2”}}您的代码文件。clj
在脚本中也能很好地工作
#!clj -deps '{:deps {clj-time {:mvn/version "0.14.2"}}}
(ns my-crazy-script!
(:require ...))
...
我建议安装,它现在可以在Mac和Linux上运行。如果您使用的是Windows,我建议您使用WSL+brew
我看到的lein
(见下文)工具与clj
相比的一个优点是,lein
在构建和打包代码库的过程中处理得更多一些。
然而,还有其他的处理方法(参见或cambada),上面提到的clj
的优点超过了IMHO
使用lein
和lein exec
如果您更喜欢<代码> Lein < /Cult>工具,或者有<代码> ~//LeI/Prrices。CLJ 文件已经方便,不想投资学习<代码> CLJ <代码> />代码> DEP.Enn>代码>,您可以考虑查看./P> 如果您已经使用依赖项设置了
project.clj
,当然可以运行lein run-m[/]
如上所述,lein
优于clj
的一个优点是它是一个完整的构建工具,可以使用lein-jar
或lein-uberjar
为您制作jar/uberjar,并进行部署等等
为ClojureScript
我推荐。它现在支持(引导式)快速启动ClojureScript脚本,而无需启动JVM或Clojure。对于大多数脚本任务,快速执行非常重要,因此当您不需要任何特定于JVM的东西时,这是我的#1建议
对于更大的项目,不仅仅是repl/cli风格的使用,您可能希望了解Shadlow CLJS,因为它易于合并vanilla JS项目。
而FWIW,Shadow与deps和lein很好地集成,并且有自己内置的hode代码重新加载,比如figwheel
滴水
加快启动时间
注意:我已经好几年没试过使用这个东西了,所以不知道它是否还能工作,或者维护得有多好
was(is?)是一个整洁的小工具,它为您提供了一个准备好启动的预引导JVM映像。这对于缩短JVM应用程序的启动时间非常有用。Clojure需要相当长的时间来引导自己,所以滴水是一个很好的工具,可以帮助加快这个过程。当您编写小脚本时尤其如此,通常需要快速运行。如果您正在使用leiningen,请查看该插件
使用java
当然,正如另一个答案中所建议的,您可以使用
java -cp clojure.jar clojure.main file.clj
但是在野外你不会经常看到这一点,因为找到你的clojure.jar
的路径并手动为依赖项编写类路径是件痛苦的事情。
但是,你知道,每个人都有自己的选择。现在可能是这个问题的最佳答案(有关将滴水与Clojure一起使用的详细信息,请参阅)
Cake被合并到Leiningen中,并被Drop取代,成为Clojure自动化最稳定的实现——这里有一个类似的问题。一旦您安装了lein和插件,运行您创建的.clj文件就非常简单了
lein exec hello.clj
如果您正在传递命令行参数,如
lein exec hello.clj arg1 arg2 arg3
您可以在hello.clj中的“foo”函数中访问它们
(foo *command-line-args*)
在使用
lein
从clojure项目运行特定的clojure脚本文件时,我遇到了类似的问题。然后我找到了一条捷径,想和别人分享
在project.clj
文件中,您可以切换clojure脚本文件名(当然有main方法)。以下是对此的声明
:main^:跳过aot conv.newconv
;这里conv是名称空间,newconv是文件名
不是
clj -m (NameSpace name)
(load-file filelocation)
(load-file "Sample.clj")