博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在OS X上配置Clojure开发环境
阅读量:6880 次
发布时间:2019-06-26

本文共 4820 字,大约阅读时间需要 16 分钟。

原文地址:

图片描述

Clojure环境依赖

Java

Clojure是运行在JVM上的语言,所以依赖一个Java运行环境。虽然在UNIX平台上有Oracle JDK和OpenJDK之分,但对于进行基于JVM的开发而言,仍旧推荐使用Oracle JDK,好在OS X为我们提供了这样的环境。Clojure对Java版本并没有特别的要求,于是只要正确设置Java的相关环境变量,Clojure就能正常运行。

运行javajavac命令检查相应的版本,以确定这两个命令都能够正常运行即可。

bash$ java -versionjava version "1.7.0_60"Java(TM) SE Runtime Environment (build 1.7.0_60-b19)Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)$ javac -versionjavac 1.7.0_60

Homebrew

对于Clojure而言,Homebrew并不是必要的;然而我们仍然可以通过Homebrew来安装Leiningen。

Clojure核心组件

Clojure

Clojure是一个运行在JVM上的语言,说到底,它的核心就是一个jar包。

可以在Clojure的官网上到最新的稳定版,也就是Clojure 1.6。

把其中的clojure-1.6.0.jar移动到我们已有的路径下:

bash$ cd clojure/$ sudo mkdir /usr/local/lib/clojure$ sudo cp cojoure-1.6.0.jar /usr/local/lib/clojure

然后进入刚刚创建的目录,我们可以先尝试一下进入REPL

bash$ java -cp clojure.jar clojure.main

在进入的交互式命令行中,可以用经典的Lisp语法尝试输入一些运算,以及调用一些熟悉的Java函数:

Clojure(println "Clojure is awesome!")(+ 2 5)(System/exit 0)

clj Script

如果每次都要切换目录,输入一大串命令来运行Clojure REPL,这简直太麻烦了。好在我们有另一种解决方案:clj脚本。

clj脚本是对Clojure的调用,可以让我们快速进入REPL,也可以直接通过clj命令来运行写好的简单Clojure程序。

我把clj脚本存放在/usr/local/bin/目录下:

bash$ sudo touch /usr/local/bin/clj

然后用最喜爱的编辑器打开这个文件,输入下面内容:

#!/bin/sh# Parts of this file come from:# http://en.wikibooks.org/wiki/Clojure_Programming/Getting_Started#Create_clj_ScriptBREAK_CHARS="\(\){}[],^%$#@\"\";:''|\\"CLOJURE_DIR=/usr/local/lib/clojureCLOJURE_JAR=$CLOJURE_DIR/clojure.jarCLASSPATH="$CLOJURE_DIR/*:$CLOJURE_JAR"while [ $# -gt 0 ]do    case "$1" in    -cp|-classpath)            CLASSPATH="$CLASSPATH:$2"    shift ; shift    ;;-e) tmpfile="/tmp/`basename $0`.$$.tmp"    echo "$2" > "$tmpfile"    shift ; shift    set "$tmpfile" "$@"    break # forces any -cp to be before any -e    ;;*)  break    ;;esacdoneif [ $# -eq 0 ]then  exec rlwrap --remember -c -b $BREAK_CHARS \    -f "$HOME"/.clj_completions \      java -cp $CLASSPATH clojure.mainelse  exec java -cp $CLASSPATH clojure.main $1 -- "$@"fi

然后给它加上权限:

bash$ sudo chmod +x /usr/local/bin/clj

这样就可以通过运行clj命令来进入REPL,同时可以运行clj xxx.clj来测试写好的简单的Clojure程序。是不是很方便呢?

Leiningen

clj命令针对的是小型Clojure程序的调试,如果想用Clojure做上规模的项目,就需要解决各种库和依赖的问题,同时还需要遵循规范的项目目录结构、打包Jar进行部署等问题。

Leiningen是一个命令行工具,用来解决Clojure项目的包管理、依赖、打包、部署等问题。关于Leiningen的使用,请参考。下面介绍它的安装。

Leiningen有介绍安装方法,而在OS X上,有强大的Homebrew,就可以利用Homebrew进行安装。

bash$ brew install leiningen

Clojure扩展组件

rlwrap Plugin

在运行REPL的时候,会经常遇到输入很长的路径、文件名、包名、函数名的情况,默认的REPL并不像bash一样能有自动补全功能,而rlwrap插件则提供了这个功能,所以这是个非常方便又十分必要的插件。

同样是利用Homebrew安装:

$ brew install rlwrap

rlwrap需要配置,而一部分的配置文件已经写在上面的clj中了,接下来要利用一段Clojure程序生成一个文件:

Clojure; generating the completion file(def completions (keys (ns-publics (find-ns 'clojure.core))))(with-open [f (java.io.BufferedWriter. (java.io.FileWriter. (str (System/getenv "HOME") "/.clj_completions")))]    (.write f (apply str (interpose \newline completions)))); 如果要生成Clojure中所有的命名空间,把上述第一行改为:(def completions (mapcat (comp keys ns-publics) (all-ns)))

在clj中运行以上代码,就可以生成~/clj_completions文件。

同时,还要添加~/.inputrc文件:

set editing-mode vitab: completeset completion-ignore-case onset blink-matching-paren on

接下来,打开clj,体验命令自动补全在Clojure中带来的快感吧!

Clojure~» cljClojure 1.6.0user=> (re
re-find read-string ref-min-history repeat reset!re-groups reader ref-set repeatedly reset-meta!re-matcher realized? refer repl resolvere-matches record? refer-clojure repl-caught resourcere-pattern reduce reify repl-exception resourcesre-quote-replacement reduce-kv release-pending-sends repl-prompt restre-seq reduced rem repl-read restart-agentread reduced? remove repl-requires resultset-seqread-instant-calendar reductions remove-all-methods replace reverseread-instant-date ref remove-method replace-first reversible?read-instant-timestamp ref-history-count remove-ns replicateread-line ref-max-history remove-watch require

关于clojure_contrib

在当前的1.6版本中,并不需要特别配置clojure_contrib,如果在老版本(1.3或更早)的项目中,请单独配置并管理clojure_contrib。

Clojure Editor/IDE

Clojure支持各种文本编辑器和IDE:

  • Emacs
  • Vim
  • Sublime Text
  • Atom
  • IntelliJ IDEA
  • Eclipse

我尝试过用Vim那套配置写Clojure,感觉并不是很畅快。几经周折,选择了用IntellJ IDEA,而作为一个成熟的IDE,这并不需要特别配置些什么,只需要在里面安装一个插件即可。

结束

简单的Clojure配置就是这样,接下来就可以尝试者做一些Clojure程序啦!

我在这里先写一个,因为REPL中并没有类似exit的命令,所以我就写了这么个函数:

Clojure(defn exit [] (System/exit 0))

把这行代码保存到~/.clojure.clj文件里,这样在每次退出REPL时候,输入(exit)即可。

最后在上一张图,这是用Clojure写的Processing程序:

图片描述

祝Happy Hacking with Clojure!

转载地址:http://otgfl.baihongyu.com/

你可能感兴趣的文章
JAVA_OPTS, JAVA_TOOL_OPTIONS,_JAVA_OPTIONS傻傻分不清楚
查看>>
SpringMVC结合Ajaxfileupload异步多文件上传至远程服务器
查看>>
Oracle的REDO和UNDO
查看>>
最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY。
查看>>
详细探究Spark的shuffle实现
查看>>
云桌面技术展望
查看>>
openstack 制作winserver2008_R2镜像 用cloudbase-init 实现第一次创建就注入密码(需登录)...
查看>>
Tengine (淘宝nginx ) + tomcat 安装整合 后篇+ 高可用和负载均衡
查看>>
『AngularJS』创建 Service
查看>>
linux 修改桌面背景
查看>>
Quick Test Professional(UFT)Web Service 测试入门
查看>>
Ubuntu上手动安装sbt
查看>>
facebook首席运营谈成功经验
查看>>
资本倍增
查看>>
DataQL 的表达式编译(自创的一种表达式编译算法)
查看>>
9.29PMP每日一题
查看>>
ORACLE 学习笔记1
查看>>
vmware格式转换
查看>>
PHP操作文件函数大全
查看>>
【Practical API Design学习笔记】工厂方法由于构造函数
查看>>