20

我是 Clojure 的新手,对如何运行 Clojure 程序感到非常困惑。

我的第一个问题是每个 Clojure 程序是否都是 Leiningen 包?如果我想写作,我是从创建一个新的 Leiningen 项目开始吗?是否有运行类似于 Python(即python pyfile.py)的 Clojure 程序

我意识到这可能是一个愚蠢的问题,但我已经对此感到困惑了一段时间,而且我读过的几本书/教程似乎并没有正确回答这个问题。到目前为止,我一直在 REPL 中运行 Clojure 代码。

4

7 回答 7

27

既然你直接找到了 leiningen,你就走在了正确的轨道上。这不是一个愚蠢的问题,因为回答它会帮助其他人获得更好的谷歌搜索结果。

  • 每个 clojure 程序都应该是一个单独的 leiningen 项目,因此您可以lein new project-name为每个程序运行。

  • java -jar myproject-standalone.jar构建 Clojure 项目的结果与构建 Java 项目的结果相同,例如可以运行的 JAR 文件

  • leiningen 可以为您构建一个包装器 shell 脚本,该脚本会生成一个仅调用 java -jar 的 .sh 文件

  • 当我在工作中运行 clojure 程序时,我们只需将它们从 git 中检查出来,然后lein run在目录中调用(实际上 Jenkins 就是这样做的)。

于 2012-06-05T19:12:33.650 回答
9

添加到 Arthur Ulfeldt 的出色答案的一件事是 lein 为您创建了一个 project.clj,并且您的 main 函数(程序开始执行的函数)可以在其中定义。默认情况下,Leiningen 在名为core.cljFor example 的文件中创建 main 函数:

(defproject music "1.0.0-SNAPSHOT"
  :description "A workspace for my music experiments"
  :dependencies [
    [org.clojure/clojure "1.3.0"]
    [org.clojure/math.combinatorics "0.0.1"]
  ]
  :main music.core)

现在我的项目可以使用:

lein run

并且music.core中的主要功能将被运行。

于 2012-06-05T20:31:12.990 回答
8

回答部分问题:“是否有运行类似于 Python 的 Clojure 程序?” 你真的可以像这样运行一个 clojure 脚本(称为hello.clj):

(println "Hello!")

像这样:

clojure hello.clj

编辑:以下应该适用于所有系统:

java -jar <path-to-clojure-jar>/clojure.jar hello.clj

在我的系统上,clojure.jar 文件位于 /usr/share/clojure/clojure.jar 中。启动 clojure 的 linux 命令只是简单地运行一个类似于上面的命令。

于 2013-09-06T02:59:00.540 回答
6

可能最简单的方法是使用lein-exec运行 Clojure 脚本:

http://charsequence.blogspot.in/2012/04/scripting-clojure-with-leiningen-2.html

于 2012-06-06T12:29:36.337 回答
2

我的 bash clojure 脚本:

#!/bin/sh

export CLOJURE_EXT=$HOME/.clojure
export CLOJURE_OPTS="-Xmx1g -server"

LIBS=$(ls -1 $CLOJURE_EXT/* 2> /dev/null)
export CLASSPATH=.:$CLOJURE_EXT:$CLASSPATH:"$(echo "$LIBS" | tr \\n :)"

JAVA=${CLOJURE_JAVA:-java}
OPTS=${CLOJURE_OPTS:-}
MAIN=${CLOJURE_MAIN:-clojure.main}

breakchars="(){}[],^%$#@\"\";:''|\\"

if [ $# -eq 0 ]; then
    exec rlwrap --remember -c -b $breakchars \
        -f $HOME/.clj_completions \
        --history-filename=$HOME/.clj_history --histsize=1000000 \
        $JAVA $OPTS $MAIN -i $HOME/.clojure.clj --repl
else
    exec $JAVA $OPTS $MAIN "$@"
fi

将它们保存到$HOME/bin/clojure,chmod +x $HOME/bin/clojure,将clojure.jar和第3方库复制到$HOME/.clojure,你可以运行clojure your_program.clj为python pyfile.py

于 2012-06-06T00:47:22.143 回答
1

作为更新,处理 clojure 程序的一种简单方法是使用leiningen

如果要运行小型 clojure 脚本,请使用lein-exec

于 2014-12-26T01:24:47.597 回答
0

在您的文件中创建别名.bashrc,或等效:

alias clojure="java -jar path/to/clojure-x.x.x.jar"

然后你可以clojure my-file.clj在你的终端中运行。

于 2016-12-20T02:25:08.120 回答