将Clojure集成到现有的Java项目中?

13 clojure

如何获取现有的大型Java项目并开始添加Clojure模块?例如,在下面的代码中,我想在Java中提供以下函数:state?,zip?,state-list,zipcode-list.两个谓词将返回一个布尔值,但"getters"将返回数组.

(def *states* (list "NJ" "NY" "CA"))
(def *zipcodes*  (list 12345 54343 98765))

(defn member [x sq]
  (if (seq sq)
    (if (= x (first sq))
      sq
      (recur x (rest sq)))))

(defn state? [aState]
  (not (= (member aState *states*) nil)))

(defn zip? [aZip]
  (not (= (member aZip *zipcodes*) nil)))

(defn state-list []
  *states*)

(defn zipcode-list []
  *zipcodes*)
;; ---------------
(state? "AA")
(state? "CA")
(zip? 11111)
(zip? 12345)

Art*_*ldt 11

我将使用leininge n 编译它然后将jar文件作为构建dep添加到我的java项目中.这是一个关于使用leiningen 的精彩视频.然后你可以直接从java调用它.Leiningen有一个uberjar选项,可以使用clojure和你所有的clojure依赖项,因此你只需要担心一个文件.我喜欢这个,因为它的工作量较少.

一个更友好的java方法是添加一个ant任务来与java项目一起构建它只需要更多的工作

对于需要返回正确的Java数组调用的函数to-array对他们

与许多顶级"从java调用clojure"相反,你不应该调用clojure运行时RT.

PS:我最喜欢的标语行"我想使用一个名为clojure的java库"我问Rich他说这很酷;)

  • 我试着问一下我认为很多人会面临的一般性问题.想象一个大型Java项目(例如> 100k行),有人想开始使用Clojure.我想在这里找到这个问题的答案.让我们拯救其他所有人,从谷歌开始,测试和摸不着头脑. (3认同)
  • 我认为如何从java调用clojure的问题"不同于"如何将clojure与我的java项目集成. (2认同)