学习 Clojure / 安装
截至撰写本文时,Clojure 缺乏 Windows 的标准安装程序,并且存在一些针对流行 *nix 操作系统的软件包。不过,所有提供的示例在所有系统上的工作方式完全相同,无论您选择哪种安装类型。
基本安装是最小的安装,它提供了 Clojure 语言的所有功能,但没有 GUI 或用于协助的额外接口。使用此方法进行安装需要执行一些低级任务,这些任务并不难执行,但对于以前从未在系统上手动安装过程序的人来说,可能看起来很困难。
首先,您应该确认您的机器上已安装 Java 虚拟机。这可以通过转到终端并键入 java -version
来轻松检查。如果它返回有关您的 Java 版本的信息,则您应该已经设置好了。如果它没有返回任何信息,则您需要从 Java 网站 [1] 下载 Java 虚拟机。
确认您的机器上已安装 Java 后,从 Clojure 主网站 [1] 获取最新的 Clojure 版本。本书是针对 Clojure 版本 1.2(稳定版)编写和测试的。您下载的文件将是一个 zip 文件,其中包含多个文件,在 源代码安装 部分将详细解释这些文件。我们要的文件是 clojure.jar
。
将此文件提取到您选择的任何目录中。此时,您已在您的机器上成功安装了 Clojure!您只需要打开一个命令窗口,将您的目录更改为您提取 clojure.jar
的目录,然后键入 java -jar clojure.jar
,您将看到 Clojure REPL。
请注意,这仅仅是为了启动 Clojure 需要做的很多工作,因此我们将为每个操作系统创建一个脚本,用单个命令运行该程序,并将该程序添加到 PATH 中,以便随时随地轻松地执行该程序。
首先,我们需要创建一个脚本,在没有大量输入的情况下运行 Clojure。本教程假设您将 clojure.jar
解压缩到 C:\Development\Learning Clojure
,并且下面的 bat 文件名为 clj.bat
,该脚本正是为此而设计的。
rem File: clj.bat
rem Version: 1.0
rem Date: 2010OCT31
rem
rem Script based off of the Wikibooks Clojure Programming Getting Started.
rem Source: https://wikibooks.cn/wiki/Clojure_Programming/Getting_Started#Windows_2
rem
rem Usage:
rem
rem clj # Starts REPL
rem clj my_script.clj # Runs an external script
rem clj my_script.clj arg1 arg2 # Runs the script passing it arguments
@echo off
:: Change the following to match your paths
set CLOJURE_DIR=C:\Development\Learning Clojure
set CLOJURE_VERSION=1.2.0
set CLOJURE_JAR="%CLOJURE_DIR%\clojure-%CLOJURE_VERSION%.jar"
if (%1) == () (
:: Start REPL
java -server -cp .;%CLOJURE_JAR% clojure.main
) else (
:: Start some_script.clj
java -server -cp .;%CLOJURE_JAR% clojure.main %1 -- %*
)
让我们将其分解成几块。
以 rem
开头的几行是注释。它们的存在是为了提醒您该 bat 文件的工作原理。下一块表示您不希望看到此 bat 文件的输出。这将在您启动 Clojure 时消除命令行“噪音”。下一块定义您安装 Clojure 的位置,并为启动 Clojure 时准备参数。请注意,CLOJURE_JAR 变量是用引号引起来的。这是因为 Java 识别空格为参数的结尾。因此,如果没有引号,Java 命令将尝试运行 C:\Development\Learning
,这是无效的。
最后,我们有一个条件语句。该条件语句检查是否传递了参数(在我们的例子中是一个 clj 文件)。如果没有传递参数,我们将运行 Clojure 的 REPL。如果传递了参数,我们将运行传递的 clj 文件,并将任何其他参数传递给该脚本。
因此,我们现在有了 clj.bat,我们可以轻松地从该脚本运行 Clojure。现在让我们将其添加到 PATH 中,以便我们可以在系统上的任何目录中执行 Clojure。
这可以通过以下方式实现。
- 单击“开始”
- 右键单击“我的电脑”
- 选择“属性”
- 单击“高级”选项卡
- 单击“环境变量”
如果您希望只为当前用户安装,请在“用户变量”框架下找到 PATH。如果 PATH 不存在,请单击“新建”按钮。您将看到一个弹出窗口,其中包含变量名称和参数。对于参数字段,请添加 C:\Development\Learning Clojure
。如果已经存在某个值,请转到最开始,输入相同的内容,并在其后立即添加一个分号。最后,单击“变量属性”屏幕上的“确定”,然后再次单击“环境变量”屏幕上的“确定”。
如果您希望为系统上的每个用户安装,请在“系统变量”下找到 PATH 变量,并执行与上述相同的步骤。
此时,您的系统应该已设置好,可以从任何目录运行 Clojure。要尝试一下,请单击“开始”,运行,然后键入 clj
。您将看到 Clojure REPL。
Leiningen 是一个用于 Clojure 的自动化工具。它类似于 Java 的 Maven,为编译、执行和分发功能提供了易于配置的环境。它还提供标准约定和项目结构。您可以从 https://github.com/technomancy/leiningen 下载 Leiningen,它带有一个批处理文件和 wget.exe,用于下载其余工具。该网站的 Github 页面详细介绍了安装和使用。
Linux 和 OSX 用户遵循与 Windows 设置类似的脚本流程。以下是运行 Clojure 所需的脚本
#!/bin/bash
# File: clj
# Version: 1.0
# Date: 2010OCT31
#
# Usage:
#
# clj # Starts REPL
# clj my_script.clj # Runs an external script
# clj my_script.clj arg1 arg2 # Runs the script passing it arguments
CWD="/opt/Learning Clojure"
if [ $# -eq 0 ]; then
java -server -cp ${CWD}/clojure.jar clojure.main
else
java -server -cp ${CWD}/clojure.jar clojure.main $1 -- "$@"
fi
您现在应该通过键入 chmod a+x clj.bat
将该文件标记为可执行文件,并将该目录添加到您的路径中。这可以通过将静态链接添加到 /usr/bin 或更改 .bashrc 中的 PATH 值来实现。
现在,您应该能够通过在命令提示符下键入 clj
来运行 Clojure REPL。
Clojure 有几个 IDE,它们通过提供额外的功能和实用程序来简化开发。使用 IDE 进行开发的首要优势是拥有一个一体化软件包。IDE 既是您的编辑器,又是您的编译器,还是您的构建系统。第二个优势是可以使用外部工具,例如源代码版本控制系统,如 Mercurial、Git 和 Subversion。此外,IDE 通常可以使学习一种语言变得更容易、更快,因为大多数任务都是标准化的。
使用 IDE 也存在一些问题。使用 IDE 通常会导致供应商锁定。如果您在某个特定的 IDE 中编写了代码,您不太可能切换到另一个 IDE。另一个问题是 IDE 提供了很多功能,但有时在某些方面会限制您,例如在 Make、Maven 和 Leiningen 之间选择构建系统。
截至撰写本文时,Clojure 有三个主要的 IDE,它们都可以在 Windows、Linux 和 OSX 上运行。
Enclojure 是一个 Netbeans 赞助的项目,它涵盖了广泛的功能。
Counter Clockwise 是一个 Eclipse 插件,它对 Clojure 如何集成到 IDE 中提供了不同的看法。
Swank Clojure 是一个古老的 Slime 接口的克隆,用于在 Emacs 中编程 Lisp。
这些说明来自:http://riddell.us/ClojureSwankLeiningenWithEmacsOnLinux.html,但该位置不是维基,并且需要一些小的修复,所以我将复制其中的内容并进行这些小的修复。
以下是如何在 Ubuntu 中启动和运行的说明。
安装 Java
~$ sudo apt-get install sun-java6-jdk
注意:如果您使用的是 Lucid Lynx (10.04) 或更高版本(以及可能的一些早期版本),则需要先更改 apt-get 存储库,以便可以使用 sun-java6-jdk。
~$ sudo add-apt-repository "deb http://archive.canonical.com/ maverick partner"
(其中“maverick”是您 Ubuntu 版本的形容词描述符(“lucid”表示 lucid lynx,“maverick”表示 maverick meerkat 等)。)
~$ sudo apt-get update
安装 Ant
~$ sudo apt-get install ant
安装 Maven
~$ sudo apt-get install maven2
安装 Git
~$ sudo apt-get install git-core
安装 Clojure
~$ mkdir ~/opt ~$ cd ~/opt ~$ git clone git://github.com/clojure/clojure.git ~$ cd clojure ~$ ./antsetup.sh ~$ ant ~$ mkdir ~/.clojure ~$ cp clojure.jar ~/.clojure
- 测试 Clojure,各位,启动您的 REPL。
~$ cd ~/.clojure ~$ java -cp clojure.jar clojure.main user=> (+ 1 41) 42 Ctrl-d will exit the REPL.
安装 clojure-contrib
~$ cd ~/opt ~$ git clone git://github.com/clojure/clojure-contrib.git ~$ cd clojure-contrib ~$ mvn install
配置 Bash 启动脚本
clojure-contrib 包含一个名为 clj-env-dir 的 bash 脚本,用于使用各种选项启动 clojure。编辑您的 ~/.bashrc 文件以配置此脚本。
export CLOJURE_EXT=~/.clojure export PATH=$PATH:~/opt/clojure-contrib/launchers/bash alias clj=clj-env-dir
添加到上述文件中的最后一行设置了对 clj-env-dir 脚本的别名。此示例使用 clj,但可以设置为任何内容。
有关选项,请参阅 ~/opt/clojure-contrib/launchers/bash/clj-env-dir 中的文件。
添加 JLine 支持
从 http://jline.sourceforge.net/ 下载 JLine,然后解压缩并将 jar 文件复制到 ~/.clojure 目录。
将 jline.ConsoleRunner 添加到 ~/opt/clojure-contrib/launchers/bash/clj-env-dir 中的最后一行以添加 JLine 功能。
exec $JAVA $OPTS jline.ConsoleRunner $MAIN "$@"
- 测试脚本
要测试新脚本并验证对 clojure-contrib 库的访问权限,请打开一个新的终端窗口并尝试以下操作
~$ clj user=> (System/getProperty "java.class.path")
如果需要任何其他 jar 文件,请将它们复制或链接到 ~/.clojure 目录。
Emacs 支持
安装 Emacs
~$ sudo apt-get install emacs-snapshot-gtk
安装 Slime
~$ cd ~/opt ~$ git clone git://github.com/nablaone/slime.git
安装 clojure-mode
~$ cd ~/opt ~$ git clone git://github.com/technomancy/clojure-mode.git
安装 leiningen
~$ cd ~/opt ~$ git clone https://github.com/technomancy/leiningen.git ~$ cd leiningen/bin !$ chmod +x lein; ./lein self-install # or maybe just ./lein is enough
将以下内容添加到 .bashrc 中。
export PATH=$PATH:~/opt/leiningen
执行 leiningen 脚本。
~$ chmod +x lein ~$ ./lein self-install
配置 Emacs
将这些细节添加到 .emacs 文件中。
;; clojure-mode (add-to-list 'load-path "~/opt/clojure-mode") (require 'clojure-mode) ;; slime (eval-after-load "slime" '(progn (slime-setup '(slime-repl)))) (add-to-list 'load-path "~/opt/slime") (require 'slime) (slime-setup)
测试配置
创建一个测试项目。
~$ mkdir ~/tmp ~$ cd tmp ~$ lein new test-project ~$ cd test-project ~$ emacs project.clj
添加以下内容
(defproject test-project "0.1.0" :description "Test Project" :dependencies [[org.clojure/clojure "1.2.0-master-SNAPSHOT"] [org.clojure/clojure-contrib "1.2.0-SNAPSHOT"]] :dev-dependencies swank-clojure "1.2.1")
保存并退出文件。
~$ lein deps ~$ lein swank
打开一个新的终端并使用 emacs 打开生成的文件
~$ emacs ~/tmp/test-project/src/test_project/core.clj
连接到正在运行的 swank 服务器
M-x slime-connect
在文件中添加一些代码
(System/getProperty "java.class.path")
然后在行末,评估
C-x C-e
输出将显示配置的 jar 文件及其在 Java 类路径上的关联路径。
最后,编译文件
C-c C-k
如果您从未修改过环境变量或处理过命令行操作,则在 Windows 上的安装会稍微复杂一些。您需要在计算机上安装 Sun JDK 或 OpenJDK 软件包,并且还需要安装 Maven,然后才能尝试此过程。
- doc
- Clojure 项目的文档。
- script
- 从源代码构建时使用的测试脚本
- src
- 您的 Clojure 版本构建所基于的 Java 代码(请参阅 源代码安装)。
- test
- 从源代码构建 Clojure 时运行的测试脚本
- build.xml
- Ant 编译的构建文件
- changes.txt
- 最近更改日志。
- epl-v10.html
- Eclipse 公共许可证
- install
- 运行 Clojure 安装的 Bash 脚本
- pom-tempalate.xml
- Mavin 编译的构建文件
- readme.txt
- 包含您在安装之前应该阅读的基本信息