Как я могу взять большой существующий проект Java и начать добавлять модули Clojure? Например, в коде ниже, я хотел бы сделать следующие функции доступными в Java: состояние?, zip?, список состояния, список индекса. Эти два предиката возвратят булевскую переменную, но "методы get" возвратят массивы.
(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)
Я бы скомпилировал его, используя leininge , а затем добавил файл jar в мой проект java в качестве депозита сборки. Вот отличное видео об использовании leiningen. , тогда вы бы вызывали его прямо из java. В Leiningen есть опция uberjar, которая накапливает clojure и все ваши зависимости clojure, поэтому вам нужно беспокоиться только об одном файле. Мне это нравится, потому что там меньше работы.
Более дружественным к java подходом было бы добавить задачу ant для ее создания вместе с java-проектом. Это лишь немного больше работы
для функций, которые должны возвращать правильные массивы java call to-array
на них
, в отличие от многих популярных обращений «вызов clojure из java», вам не нужно вызывать среду выполнения clojure RT.
PS: мой любимый тэг: «Я хотел бы использовать библиотеку java под названием clojure». Я спросил Рича, он сказал, что это круто;)
Было проще предпринять существующее приложение Java и оберните его в Cljure, чем наоборот, потому что Java Interop от Clojure очень прост.
Как вы спрашиваете, как получить доступ к CLOJURE из Java, ответ заключается в том, что вам либо нужно загрузить код Clojure загрузки, либо вам нужно создать файлы классов Java, которые можно использовать из вашего проекта Java. Загрузка включает ссылку на банку Clojure и доступа к функции нагрузки для загрузки источника Clojure. Для генерации классов Java посмотрите на AOT (см. Пример на сайте).