« Ідіть нафіг. Я живу за київським часом | | Маркер групи, або Хто не з нами, того я з'їм »
22 листопада 2011
Clojure 1.3 (все в одному)
Ті, хто програмують на клоӂурі, вже могли чути про зміни, що з'явились в останній версії. Зокрема, замість єдиної бібліотеки clojure.contrib тепер використовуються окремі модулі, розкидані по різних репозиторіях. Важко сказати, в чому переваги такого підходу — економія дискового простору, більша гнучкість розробки... Звичайно, якщо програміст для збирання свого великого й складного проекту використовує lein чи maven, особливої різниці він може й не відчути: в масштабах такого проекту, налаштування залежностей — найлегша частина роботи. Зрештою, може бути так, що для роботи вистачає й основних біліотек clojure, без contrib. Я ж не стільки пишу робочий код, скільки вивчаю й експериментую в REPL (тобто, проектів як таких здебільшого нема — лише маленькі програмки з одного файла) — мені зручніше, коли все необхідне лежить в одному архіві, і я можу спробувати ту чи іншу можливість, не тратячи час на конфігурування та встановлення додаткових пакетів. Власне, ось:
- clojure-all-in-one-1.3.0.zip (3 167 КБ)
Скачуєте, розпаковуєте. Для запуску — clojure.bat
(для тих, хто користується лінуксом, цей варіант не підходить, але,
гадаю, аналогічний баш-скрипт написати нескладно). Збірка включає в себе
базові бібліотеки clojure та більшість модулів
з clojure.contrib , їх можна підключати безпосередньо за
допомогою use
— якихось додаткових налаштувань за межами програмного коду робити не
треба. Може, це й не відповідає філософії справжнього програміста, але
мені так зручніше.
30.11.2011
— до збірки додано модуль algo.generic, якого раніше не було в
репозиторії.
Коротко про те, як зібрати аналогічний jar своїми руками (якщо вас чимось не влаштовує зроблений мною):
- Встановлюємо lein
-
Робимо
lein new clojure-all-in-one - Заходимо в папку, створену попередньою командою, й відкриваємо файл project.clj
-
Замінюємо список залежностей (номери найсвіжіших версій пакетів можна
побачити тут):
(defproject clojure-all-in-one "1.3.0"
:description "All the Clojure 1.3 libraries placed in one single jar"
:dependencies [[org.clojure/clojure "1.3.0"]
[org.clojure/algo.generic "0.1.0"]
[org.clojure/algo.monads "0.1.0"]
[org.clojure/core.incubator "0.1.0"]
[org.clojure/core.logic "0.6.5"]
[org.clojure/core.match "0.2.0-alpha6"]
[org.clojure/core.unify "0.5.1"]
[org.clojure/data.codec "0.1.0"]
[org.clojure/data.csv "0.1.0"]
[org.clojure/data.finger-tree "0.0.1"]
[org.clojure/data.json "0.1.2"]
[org.clojure/data.priority-map "0.0.1"]
[org.clojure/data.zip "0.1.0"]
[org.clojure/java.classpath "0.2.0"]
[org.clojure/java.jdbc "0.1.1"]
[org.clojure/java.jmx "0.1"]
[org.clojure/math.combinatorics "0.0.2"]
[org.clojure/math.numeric-tower "0.0.1"]
[org.clojure/test.generative "0.1.3"]
[org.clojure/tools.cli "0.2.1"]
[org.clojure/tools.logging "0.2.3"]
[org.clojure/tools.macro "0.1.1"]
[org.clojure/tools.namespace "0.1.1"]
[org.clojure/tools.nrepl "0.0.5"]
[org.clojure/tools.trace "0.7.1"]])
- Вміст папок src і test нас не цікавить, тому їх можна очистити від автоматично згенерованих файлів (необов'язково)
-
Тепер лишається тільки завантажити всі залежності й зібрати їх в один
файл. В командному рядку вводимо команду
lein uberjar
Якщо все зроблено правильно, система завантажить усі перелічені бібліотеки і збере їх у спільний jar. -
Тепер перевірка:
java -cp clojure-all-in-one-1.3.0-standalone.jar clojure.main
Якщо все ОК, має з'явитись запрошення:Clojure 1.3.0
user=>
(якщо замість цього вискочив стек помилок, спробуйте повторити попередні кроки).
Короткий тест:user=>
(use 'clojure.algo.monads)
nil
user=>
(domonad sequence-m
[letters ['a 'b 'c]
numbers [1 2 3]]
[letters
numbers])
([a 1] [a 2] [a 3] [b 1] [b 2] [b 3]
[c 1] [c 2] [c 3])
user=> (doc *)
-------------------------
clojure.core/*
([]
[x] [x y] [x y & more])
Returns the product of nums. (*) returns
1. Does not auto-promote
longs, will throw on overflow. See also: *'
nil
Змінено 16 грудня 2011 16:39
Категорії: Clojure, Download