Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行clojure程序的典型方式_Clojure - Fatal编程技术网

运行clojure程序的典型方式

运行clojure程序的典型方式,clojure,Clojure,我是Clojure的新手,对如何运行Clojure程序感到困惑 我的第一个问题是,是否每个Clojure程序都是一个Leiningen包?如果我想写作,我是从创建一个新的Leiningen项目开始的吗?是否有运行类似于Python的Clojure程序的方法(即Python pyfile.py) 我意识到这可能是一个愚蠢的问题,但我对此困惑了一段时间,我读过的几本书/教程似乎没有正确回答这个问题。到目前为止,我一直在REPL中运行Clojure代码。自从您直接找到leiningen以来,您的思路是

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

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


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

自从您直接找到leiningen以来,您的思路是正确的。这不是一个愚蠢的问题,因为回答它会帮助其他人获得更好的谷歌搜索结果

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

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

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

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


阿瑟·乌尔费尔德(Arthur Ulfeldt)的优秀答案中需要补充的一点是,莱恩为您创建了一个project.clj,您的主要功能(程序开始执行的功能)可以在其中定义。默认情况下,Leiningen在名为
core.clj
的文件中创建主函数,例如:

(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中的主要功能。

我的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和第三方库复制到$HOME/.clojure中,
您可以以python pyfile.py运行
clojure\u程序.clj
,最简单的方法可能是使用
lein exec
运行clojure脚本:


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

像这样:

clojure hello.clj
编辑:以下内容应适用于所有系统:

java-jar/clojure.jar hello.clj

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

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


如果要运行小型clojure脚本,请在
.bashrc
文件或等效文件中使用创建别名:

alias clojure=“java-jar路径/to/clojure-x.x.x.jar”


然后您可以在终端中运行
clojure my file.clj

这确实增加了这个问题的答案,因为问题的一部分是“有没有一种方法可以运行类似于Python的clojure程序?”这个答案向我们展示了如何运行clojure程序。有时候,我只想运行一个脚本。这在所有系统上都有效吗?我知道在Ubuntu上安装aptitude会给你一个
clojure
命令,但我不知道其他安装是这样的。最好在这里进行验证和更新。如何抑制
.jar
目标文件中的版本号?将“:uberjar name”sample standalone.jar”添加到project.clj文件中。请参见示例项目:
clojure hello.clj
java -jar <path-to-clojure-jar>/clojure.jar hello.clj