原創,轉載請註明。
本文關注怎樣在eclipse上搭建基本的Clojure開發環境。本文讀者需要有Java的開發經驗和eclipse的使用經驗,最好有Maven使用經驗。
1. 基礎概念
1.1. Clojure
Clojure 是以JVM爲基礎平臺的 Lisp 方言,屬於現代的函數式語言。關於Clojure本身可以訪問其官網(http://clojure.org/)進行了解。
1.2. Leiningen
Leiningen是針對Clojure的項目構建工具,兼容Maven。其官網地址是:https://github.com/technomancy/leiningen。關於Leiningen的完全使用方法請移步其官網。
1.3. Counterclockwise
Counterclockwise是用於進行Clojure開發的eclipse插件,官網位於:http://code.google.com/p/counterclockwise/。
2. 操作環境
本文操作環境如下:
1) 操作系統:Windows 7。
2) JDK:Oracle JDK 1.6。
3) Clojure:1.3.0。
4) Leiningen:1.7.0。
5) eclipse:eclipse 3.7 (Indigo) jee edition。
6) Counterclockwise:0.5.0.STABLE002。
3. 基本環境搭建
3.1. 安裝Clojure
3.1.1. 下載Clojure
從官網上(http://clojure.org/downloads)下載Clojure的zip文件,版本爲1.3.0。以“解壓到當前文件夾”的方式解壓文件,隨後可以將此文件夾放入到任何目錄中。本文將其放入“D:\dev”目錄。
3.1.2. 配置Clojure
在系統環境變量中加入環境變量“CLOJURE_HOME”,值爲Clojure的主目錄,這裏是“D:\dev\clojure”。在系統環境變量“CLASSPATH”的值上追加上“;%CLOJURE_HOME%\;”。
3.2. 安裝Leiningen
3.2.1. 下載Leiningen
Leiningen的下載地址是:https://github.com/technomancy/leiningen/downloads。雖然現在的Leiningen的最新版本是1.7.0,但是我們這裏下載其中的leiningen-1.4.1-win32.zip。下載後將其以“解壓到當前文件夾”的方式解壓,得到lein文件夾。本文將這個文件夾放入“D:\dev”目錄。
編輯這個文件夾中的lein.bat文件,將文件第三行的“set LEIN_VERSION=1.5.2”改爲“set LEIN_VERSION=1.7.0”,即使用最新版本的Leiningen。
現在以命令行的方式進入到lein文件夾中,即“D:\dev\lein”,運行命令“lein self-install”,即進行Leiningen的自安裝,這時腳本會從官網上下載指定版本的Leiningen的jar文件,並作必要配置。
3.2.2. 配置Leiningen
在系統環境變量中加入環境變量“LEIN_HOME”,值爲Leiningen的主目錄,這裏是“D:\dev\lein”。在系統環境變量“PATH”的值上追加上“;;%LEIN_HOME%\;”。這樣我們就可以在任意目錄中調用lein.bat了。
3.2.3. 安裝Leiningen的eclipse插件
開啓命令行,執行命令“lein plugin install lein-eclipse 1.0.0”,安裝Leiningen的eclipse插件,版本爲1.0.0。等待插件的安裝直至出現提示“lein plugin install lein-eclipse 1.0.0”。這時此插件就已經安裝好了。
3.3. 在eclipse上安裝Counterclockwise插件
運行eclipse,並在菜單上選擇:Help –> Install New Software -> 在彈出的對話框中點擊“Add”添加Name爲counterclockwise的site,其location爲http://ccw.cgrand.net/updatesite。添加好後,在下拉框中選擇這個site,這時eclipse會在對話框的中間區域顯示插件的詳細組件,全部勾選之後點擊“Next”。然後根據提示安裝直到完成。
4. Clojure項目示例
4.1. 使用Leiningen創建Clojure項目
在lein主目錄中創建文件夾“workspace”,並以命令行方式進入這個文件夾,執行“lein new clojure_hello”以創建“clojure_hello”項目。然後,從命令行進行剛剛被Leiningen創建的“workspace ”目錄下“clojure_hello”文件夾,執行“lein eclipse”命令以使該項目符合eclipse項目的目錄結構。該命令會根據項目目錄(即“clojure_hello”文件夾)中的“project.clj”文件中的配置信息進行一系列項目配置,例如:把配置的依賴程序包拷貝到項目文件夾下的lib子文件夾中。
“project.clj”文件其實就是Leiningen給項目添加的配置文件,類似於Maven的“pom.xml”。我們這裏來瀏覽一下根據上述步驟後由Leiningen創建的該文件:
(defproject clojure_hello "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.3.0"]])
文件中的聲明其實跟Maven的pom.xml文件非常類似。簡單說明如下:
1) 第一行:聲明瞭項目的名稱“clojure_hello”和版本號“1.0.0-SNAPSHOT”。
2) 第二行:聲明瞭對該項目的描述,這裏我們可以任意修改雙引號中的文字。
3) 第三行:聲明瞭該項目的依賴。這裏僅依賴的Clojure的1.3.0版本。
關於“project.clj”的詳細配置說明請參見Leiningen的官網。
4.2. 將Clojure項目導入eclipse
運行eclipse,並在菜單上選擇:File -> Import,在彈出的對話框的中心區域找到“Existing Project into Workspace”選擇並點擊“Next”。點擊“Browse”選擇Clojure所在的目錄,這裏爲“D:\dev\lein\workspace\clojure_hello”。點擊“Finish”以完成項目導入。
這時就可以在eclipse看到這個項目了,項目目錄結果與基於Maven的項目基本一致,只是將“pom.xml”變成了“project.clj”。
4.3. 編寫第一個程序
Leiningen在創建項目的時候已經爲我們添加了一個默認的clojure源碼文件,即:src源碼文件夾下的“clojure_hello”源碼包下的“core.clj”文件。
我們簡單編輯一下,讓其運行後打印“Hello, Clojure!”。雖然這個程序很俗,但是爲了不偏離主題我們還是這麼寫吧。^_^
編輯好後的“core.clj”文件如下:
(ns clojure_hello.core)
(println "Hello, Clojure!")
其中,第一行爲這個程序文件的命名空間,相當於Java的“package”。第二行就是我們要做的事——打印一行很俗的語句。
4.4. 運行第一個程序
現在我們的目標是運行這個小程序。
在程序文件上點右鍵並選擇Run as -> Clojure Application。不久後就會在eclipse的Console面板中看到“Hello, Clojure!”這句話了。
現在讓我們稍稍增加點難度。編輯“core.clj”文件將其改爲如下內容:
(ns clojure_hello.core)
(defn hello [target] (println "Hello, " target "!"))
OK,現在我們能對任何人說“Hello”了。這種情況下就需要我們在提示符下調用這個函數以求達到與第一版程序相同的輸出效果了。
第一步同樣是在程序文件上點右鍵並選擇Run as -> Clojure Application。這時,會看到Clojure的一個提示符環境(即“REPL”)已經啓動。在我們調用第二版程序中的函數之前還要做三件事:
1) 在程序文件上點右鍵並選擇Clojure -> Load file in REPL。這樣做的目的是讓這個提示符環境將這個程序文件加載進來。
2) 在程序文件上點右鍵並選擇Clojure -> Compile file in REPL。顧名思義,這是要編譯這個Clojure源碼文件。
3) 文件編譯好後,我們爲了調用這個函數需要在程序文件上點右鍵並選擇Clojure -> Switch REPL to File’s Workspace。當然這一步是可選的,不過調用函數的時候會略有不同,這在後面會說明。
現在我們可以在這個提示符環境中調用這個函數了。在環境中鍵入調用語句“(hello "Clojure")”並鍵入Ctrl + Enter。如果沒有進行上面的第三步的話,需要將調用語句改爲“(clojure_hello.core/hello "Clojure")”。其中,“clojure_hello.core”程序的命名空間,以“/”與函數名分隔。
運行效果如下圖:
好了,我們現在用Leiningen構建了一個簡單的Clojure項目,並用eclipse和Counterclockwise運行了一個簡單的Clojure程序。
5. 後話
Clojure是簡單、強大和有趣的Lisp方言體檢大家學習。Clojure有三個版本,分別給予JVM、CLR和JS引擎。由於本人是Java出身,並且Clojure最初是爲Java平臺量身打造的,因此這裏只簡單演示JVM版Clojure的構建和運行過程。
希望通過這篇文章能夠消除大家第一次使用eclipse構建Clojure項目的一些小障礙。同時,也希望大家能因此喜歡上Clojure。只要你稍微讀一點Clojure的文檔,就會知道它有多麼有趣。
6. 關於作者
好吧,最後介紹下我自己。本人是Java系程序員,非純粹的,也就是說工作興趣不只在程序設計上,當然非工作興趣更加廣泛一些。
我在新浪微博、搜狐微博以及“我的搜狐”(http://i.sohu.com)上的暱稱都是“特價蘿蔔”。歡迎各位同仁聯繫我並討論Clojure和其他。