跳至內容

學習 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 中,以便隨時隨地輕鬆地執行該程式。

Windows 配置

[編輯 | 編輯原始碼]

首先,我們需要建立一個指令碼,在沒有大量輸入的情況下執行 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。

這可以透過以下方式實現。

  1. 單擊“開始”
  2. 右鍵單擊“我的電腦”
  3. 選擇“屬性”
  4. 單擊“高階”選項卡
  5. 單擊“環境變數”

如果您希望只為當前使用者安裝,請在“使用者變數”框架下找到 PATH。如果 PATH 不存在,請單擊“新建”按鈕。您將看到一個彈出視窗,其中包含變數名稱和引數。對於引數欄位,請新增 C:\Development\Learning Clojure。如果已經存在某個值,請轉到最開始,輸入相同的內容,並在其後立即新增一個分號。最後,單擊“變數屬性”螢幕上的“確定”,然後再次單擊“環境變數”螢幕上的“確定”。

如果您希望為系統上的每個使用者安裝,請在“系統變數”下找到 PATH 變數,並執行與上述相同的步驟。

此時,您的系統應該已設定好,可以從任何目錄執行 Clojure。要嘗試一下,請單擊“開始”,執行,然後鍵入 clj。您將看到 Clojure REPL。

Windows 上的 Leiningen

[編輯 | 編輯原始碼]

Leiningen 是一個用於 Clojure 的自動化工具。它類似於 Java 的 Maven,為編譯、執行和分發功能提供了易於配置的環境。它還提供標準約定和專案結構。您可以從 https://github.com/technomancy/leiningen 下載 Leiningen,它帶有一個批處理檔案和 wget.exe,用於下載其餘工具。該網站的 Github 頁面詳細介紹了安裝和使用。

Linux/OSX 配置

[編輯 | 編輯原始碼]

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。

整合開發環境 (IDE)

[編輯 | 編輯原始碼]

Clojure 有幾個 IDE,它們透過提供額外的功能和實用程式來簡化開發。使用 IDE 進行開發的首要優勢是擁有一個一體化軟體包。IDE 既是您的編輯器,又是您的編譯器,還是您的構建系統。第二個優勢是可以使用外部工具,例如原始碼版本控制系統,如 Mercurial、Git 和 Subversion。此外,IDE 通常可以使學習一種語言變得更容易、更快,因為大多數任務都是標準化的。

使用 IDE 也存在一些問題。使用 IDE 通常會導致供應商鎖定。如果您在某個特定的 IDE 中編寫了程式碼,您不太可能切換到另一個 IDE。另一個問題是 IDE 提供了很多功能,但有時在某些方面會限制您,例如在 Make、Maven 和 Leiningen 之間選擇構建系統。

截至撰寫本文時,Clojure 有三個主要的 IDE,它們都可以在 Windows、Linux 和 OSX 上執行。

Enclojure (Netbeans)

[編輯 | 編輯原始碼]

Enclojure 是一個 Netbeans 贊助的專案,它涵蓋了廣泛的功能。

Counter Clockwise (Eclipse)

[編輯 | 編輯原始碼]

Counter Clockwise 是一個 Eclipse 外掛,它對 Clojure 如何整合到 IDE 中提供了不同的看法。

Swank Clojure (Emacs)

[編輯 | 編輯原始碼]

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
包含您在安裝之前應該閱讀的基本資訊


參考資料

[編輯 | 編輯原始碼]
  1. http://www.java.com/en/download/manual.jsp
Previous page
歷史
學習 Clojure Next page
REPL
安裝
華夏公益教科書