文档章节

Clojure Dev. on Eclipse

hyper0x
 hyper0x
发布于 2012/02/27 09:32
字数 2086
阅读 1853
收藏 6

原创,转载请注明。

本文关注怎样在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)        JDKOracle JDK 1.6

3)        Clojure1.3.0

4)        Leiningen1.7.0

5)        eclipseeclipse 3.7 (Indigo) jee edition

6)        Counterclockwise0.5.0.STABLE002

3.  基本环境搭建

3.1.  安装Clojure

3.1.1.  下载Clojure

从官网上(http://clojure.org/downloads)下载Clojurezip文件,版本为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的自安装,这时脚本会从官网上下载指定版本的Leiningenjar文件,并作必要配置。

3.2.2.  配置Leiningen

在系统环境变量中加入环境变量“LEIN_HOME”,值为Leiningen的主目录,这里是“D:\dev\lein”。在系统环境变量“PATH”的值上追加上“;;%LEIN_HOME%\;”。这样我们就可以在任意目录中调用lein.bat了。

3.2.3.  安装Leiningeneclipse插件

开启命令行,执行命令“lein plugin install lein-eclipse 1.0.0”,安装Leiningeneclipse插件,版本为1.0.0。等待插件的安装直至出现提示“lein plugin install lein-eclipse 1.0.0”。这时此插件就已经安装好了。

3.3.  eclipse上安装Counterclockwise插件

运行eclipse,并在菜单上选择:Help –> Install New Software -> 在弹出的对话框中点击“Add”添加Namecounterclockwisesite,其locationhttp://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"]])

文件中的声明其实跟Mavenpom.xml文件非常类似。简单说明如下:

 

1)        第一行:声明了项目的名称“clojure_hello”和版本号“1.0.0-SNAPSHOT”。

2)        第二行:声明了对该项目的描述,这里我们可以任意修改双引号中的文字。

3)        第三行:声明了该项目的依赖。这里仅依赖的Clojure1.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。不久后就会在eclipseConsole面板中看到“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项目,并用eclipseCounterclockwise运行了一个简单的Clojure程序。

5.  后话

Clojure是简单、强大和有趣的Lisp方言体检大家学习。Clojure有三个版本,分别给予JVMCLRJS引擎。由于本人是Java出身,并且Clojure最初是为Java平台量身打造的,因此这里只简单演示JVMClojure的构建和运行过程。

 

希望通过这篇文章能够消除大家第一次使用eclipse构建Clojure项目的一些小障碍。同时,也希望大家能因此喜欢上Clojure。只要你稍微读一点Clojure的文档,就会知道它有多么有趣。

6.  关于作者

好吧,最后介绍下我自己。本人是Java系程序员,非纯粹的,也就是说工作兴趣不只在程序设计上,当然非工作兴趣更加广泛一些。

 

我在新浪微博、搜狐微博以及“我的搜狐”(http://i.sohu.com)上的昵称都是“特价萝卜”。我的对外邮箱是:freej.cn@gmail.com。欢迎各位同仁联系我并讨论Clojure和其他。

© 著作权归作者所有

hyper0x

hyper0x

粉丝 99
博文 7
码字总数 13119
作品 0
朝阳
部门经理
私信 提问
JVM上的并发编程利器:Clojure语言

诞生于2007年的Clojure是JVM平台上的Lisp实现,Lisp 以强大的功能和表达性而著称,但应用范围存在着固定的局限,于是发起人Rich Hickey设计Clojure的初衷便是希望得到一门能够服务于高并发应...

红薯
2010/09/06
1K
2
安装eclipse的clojure插件

1 在eclipse的marketplace所有clojure会看到这个Counterclockwise插件,直接点击安装 2 创建项目设置jdk (我本机上 jdk有2个版本 一个1.6 一个1.8 默认是1.6的) 使用1.8的 3运行clojure ,...

天地的星空
2015/08/13
0
0
翻译:使用 Emacs 开发 Clojure

使用 Emacs 开发 Clojure 译者按 本文译自 Clojure with Emacs。 前几天我在技术翻译板块投递了原文,昨天审核通过后自行做了翻译,也可点击此处查看。 译者水平很菜,非常欢迎指正。闲话少说...

ostatsu
2015/12/24
146
0
cfg-nvim

abbr 命令行 au autocmd setl setlocal sw shiftwidth ts tabstop sts softtabstop fdm foldmethod fdl foldlevel 文档 req: requirements req-dev: development requirements tag: descrip......

1354057778
2015/10/08
249
0
Clojure使用Korma 来访问数据库

使用Korma 来访问数据库 本章源代码: https://github.com/LightSwordSpringBoot/clj-web 访问数据库 Java 提供了标准的 JDBC 接口访问数据库,Clojure 的数据库接口 是对 Java JDBC 的封装。...

东海陈光剑
2016/07/04
78
0

没有更多内容

加载失败,请刷新页面

加载更多

Java的线程同步和并发问题示例

并发问题 多线程是一个非常强大的工具,它使我们能够更好地利用系统的资源,但我们需要在读取和写入多个线程共享的数据时特别小心。 当多个线程尝试同时读取和写入共享数据时,会出现两种类型...

hiuh
今天
1
0
Spring Boot 常用注解说明

实体类 @Entity (实体类注解) @Table(可指定表名) @Data(可缺省get/set) @Id (指定属性主键) @GeneratedValue(指定主键生成规则)

兜兜毛毛
今天
3
0
局域网能互相ping通,ubuntu虚拟机不能上外网

【问题】 桥接模式老是无法上网,查看本机IP发现被分配了一个私网地址,猜测应该是虚拟DHCP服务器没有打开,于是查看Ubuntu的网络配置: /etc/network/interfaces 发现没有dhcp配置的信息,只...

tahiti_aa
今天
2
0
以太坊助记词PHP开发包简介

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力。下载地址:以太坊助记词php开发包 。 1、开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39...

汇智网教程
昨天
4
0
系统监控-分布式调用链Skywalking

1. 为什么要使用分布式调用链技术? 随着公司业务的高速发展,公司服务之间的调用关系愈加复杂,如何理清并跟踪它们之间的调用关系就显的比较关键。线上每一个请求会经过多个业务系统,并产生...

秋日芒草
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部