原创,转载请注明。
本文关注怎样在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和其他。
分享到:
相关推荐
tools.trace, 1.3更新 clojure.contrib.trace clojure.tools. 跟踪一个Clojure跟踪工具。定义跟踪宏/fns以帮助你查看代码正在执行的操作。以前称为 clojure.contrib.trace 。请参阅 tools.trace API参考代码。发布和...
Clojure则是一种基于Lisp的现代编程语言,它运行在Java虚拟机(JVM)上,提供了强大的并发处理能力以及简洁的语法。将Clojure与MySQL结合,可以创建高性能的数据存储和查询解决方案。 标题"为mysql设计的Clojure库....
Schema 是一个 Clojure(Script) 库,用来声明数据描述和验证。 代码示例:(ns schema-examples (:require [schema.core :as s :include-macros true ;; cljs only ])) (def Data "A schema for ...
根据https://github.com/clojure-cookbook/clojure-cookbook的描述,将cookbook的代码转换为了html文档,供方便下载。
《Apress.Practical.Clojure.May.2010》这本书主要涵盖了Clojure编程语言的实践应用。Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,同时也提供了与Java的无缝交互。本书是针对那些希望通过...
clojure.java.jdbc 一个低层的Clojure包装器,用于基于JDBC的数据库访问。 该项目是“稳定的”(不再是“活动的”)。 实际上,它已被取代。 有关兼容的高级DSL和迁移库,请参阅。 以前称为clojure.contrib.sql ...
一个Clojure库,为clojure.tools.logging库提供core.typed批注。 用法 只需将注释添加到执行日志记录的模块中即可。 ( ns example.logging ( :require [clojure.tools.logging :as log] [typed-logging....
The discussion details the read—eval—print workflow that enables fast feedback loops, then dives into enterprise-level Clojure development with expert guidance on web services, testing, datomics, ...
clutch, 面向Apache的Clojure库 离合器 离合器是一个用于 Apache的 Clojure插件库。"安装"要在项目中包含离合器,只需将以下内容添加到你的project.clj 依赖项:[com.ashafa/clutch "0.4.0"]或者,如果要使
Once you're familiar with Clojure, take the next step with extended lessons on the best practices and most critical decisions you'll need to make while developing. Learn how to model your domain with...
Cljure是类Lisp的函数式编程语言的Java实现,为Lisp的新生开辟了新的道路,Pragmatic.Programming.Clojure.2nd.edition 描述了Clojure开发的方方面面,是一本不可多得的好书, 该下载资源为该书的配套示例代码。
Clojure is a general-purpose language from the Lisp family with an emphasis on functional programming. It has some interesting concepts and features such as immutability, gradual typing, thread-safe ...
clj-antlr, ANTLR 4解析器的Clojure绑定 clj-antlr面向 ANTLR 4 解析器库的Clojure绑定,一个自适应的( * ) 。 看起来很像 Instaparse,只有更快的语法定义,更丰富的语法定义,而且没有令人愉悦的。安装只需将 clj-...
clojure-twitter, 面向 Twitter API的Clojure客户端 面向Clojure的 Twitter 客户端 API从Clojure访问 Twitter API 。建筑lein depslein jar示例(require 'twitter ['oauth.
clojure.data.zip 用于过滤树(尤其是XML树)的系统。 以前称为clojure.contrib.zip-filter。 发布和依赖项信息 该项目遵循版本方案MAJOR.MINOR.PATCH,其中每个组件都提供有关更改大小的一些相对指示,但不遵循...
clojure-1.5.1.jar