學習 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://wikibook.tw/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
- 包含您在安裝之前應該閱讀的基本資訊