【问题标题】:typical way of running clojure programs运行 clojure 程序的典型方式
【发布时间】:2012-06-05 16:53:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: clojure


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    【解决方案2】:

    添加到 Arthur Ulfeldt 的出色答案中的一件事是 lein 为您创建了一个 project.clj,并且您的 main 函数(程序开始执行的函数)可以在其中定义。默认情况下,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 中的 main 函数将被运行。

    【讨论】:

      【解决方案3】:

      回答部分问题:“是否有类似 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 命令简单地运行一个类似上面的命令。

      【讨论】:

      • 这适用于所有系统吗?我知道在 Ubuntu 上从 aptitude 安装会为您提供 clojure 命令,但我不知道其他安装是否如此。最好在这里验证和更新。
      【解决方案4】:

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

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

      【讨论】:

      • 这确实增加了这个问题的答案,因为问题的一部分是“有没有办法运行类似于 Python 的 Clojure 程序?”这个答案向我们展示了如何。有时,我只想运行一个脚本。
      【解决方案5】:

      我的 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 和 3rd 方库复制到 $HOME/.clojure, 你可以运行 clojure your_program.clj 作为 python pyfile.py

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多