原创,转载请注明。
本文关注怎样在eclipse上搭建基本的Clojure开发环境。本文读者需要有Java的开发经验和eclipse的使用经验,最好有Maven使用经验。
Clojure 是以JVM为基础平台的 Lisp 方言,属于现代的函数式语言。关于Clojure本身可以访问其官网(http://clojure.org/)进行了解。
Leiningen是针对Clojure的项目构建工具,兼容Maven。其官网地址是:https://github.com/technomancy/leiningen。关于Leiningen的完全使用方法请移步其官网。
Counterclockwise是用于进行Clojure开发的eclipse插件,官网位于:http://code.google.com/p/counterclockwise/。
本文操作环境如下:
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。
从官网上(http://clojure.org/downloads)下载Clojure的zip文件,版本为1.3.0。以“解压到当前文件夹”的方式解压文件,随后可以将此文件夹放入到任何目录中。本文将其放入“D:\dev”目录。
在系统环境变量中加入环境变量“CLOJURE_HOME”,值为Clojure的主目录,这里是“D:\dev\clojure”。在系统环境变量“CLASSPATH”的值上追加上“;%CLOJURE_HOME%\;”。
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文件,并作必要配置。
在系统环境变量中加入环境变量“LEIN_HOME”,值为Leiningen的主目录,这里是“D:\dev\lein”。在系统环境变量“PATH”的值上追加上“;;%LEIN_HOME%\;”。这样我们就可以在任意目录中调用lein.bat了。
开启命令行,执行命令“lein plugin install lein-eclipse 1.0.0”,安装Leiningen的eclipse插件,版本为1.0.0。等待插件的安装直至出现提示“lein plugin install lein-eclipse 1.0.0”。这时此插件就已经安装好了。
运行eclipse,并在菜单上选择:Help –> Install New Software -> 在弹出的对话框中点击“Add”添加Name为counterclockwise的site,其location为http://ccw.cgrand.net/updatesite。添加好后,在下拉框中选择这个site,这时eclipse会在对话框的中间区域显示插件的详细组件,全部勾选之后点击“Next”。然后根据提示安装直到完成。
在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的官网。
运行eclipse,并在菜单上选择:File -> Import,在弹出的对话框的中心区域找到“Existing Project into Workspace”选择并点击“Next”。点击“Browse”选择Clojure所在的目录,这里为“D:\dev\lein\workspace\clojure_hello”。点击“Finish”以完成项目导入。
这时就可以在eclipse看到这个项目了,项目目录结果与基于Maven的项目基本一致,只是将“pom.xml”变成了“project.clj”。
Leiningen在创建项目的时候已经为我们添加了一个默认的clojure源码文件,即:src源码文件夹下的“clojure_hello”源码包下的“core.clj”文件。
我们简单编辑一下,让其运行后打印“Hello, Clojure!”。虽然这个程序很俗,但是为了不偏离主题我们还是这么写吧。^_^
编辑好后的“core.clj”文件如下:
(ns clojure_hello.core) (println "Hello, Clojure!")
其中,第一行为这个程序文件的命名空间,相当于Java的“package”。第二行就是我们要做的事——打印一行很俗的语句。
现在我们的目标是运行这个小程序。
在程序文件上点右键并选择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程序。
Clojure是简单、强大和有趣的Lisp方言体检大家学习。Clojure有三个版本,分别给予JVM、CLR和JS引擎。由于本人是Java出身,并且Clojure最初是为Java平台量身打造的,因此这里只简单演示JVM版Clojure的构建和运行过程。
希望通过这篇文章能够消除大家第一次使用eclipse构建Clojure项目的一些小障碍。同时,也希望大家能因此喜欢上Clojure。只要你稍微读一点Clojure的文档,就会知道它有多么有趣。
好吧,最后介绍下我自己。本人是Java系程序员,非纯粹的,也就是说工作兴趣不只在程序设计上,当然非工作兴趣更加广泛一些。
我在新浪微博、搜狐微博以及“我的搜狐”(http://i.sohu.com)上的昵称都是“特价萝卜”。我的对外邮箱是:[email protected]。欢迎各位同仁联系我并讨论Clojure和其他。