clojure/lein реплицируется с помощью jline
Вопрос
По какой-то причине я не могу заставить clojure REPL работать с jline, что я сделал, так это git клонировал репозиторий clojure с github, затем запустил ant для его сборки, затем я загружаю jline-0.9.94.jar в каталог с помощью clojure.jar, затем запускаю следующую команду:
java -cp jline-0.9.94.jar:clojure.jar jline.ConsoleRunner clojure.main
И получаю следующие ошибки:
Exception in thread "main" java.lang.ClassNotFoundException: clojure.main
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:317)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:375)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at jline.ConsoleRunner.main(Unknown Source)
Вот файлы в моем текущем каталоге:
vvshs-macbook-2:clojure vvsh$ ls
build.xml clojure-sources-1.2.0-master-SNAPSHOT.jar epl-v10.html src
classes clojure-sources.jar jline-0.9.94.jar test
clojure-1.2.0-master-SNAPSHOT.jar clojure.iml pom-template.xml
clojure-slim-1.2.0-master-SNAPSHOT.jar clojure.jar pom.xml
clojure-slim.jar doc readme.txt
vvshs-macbook-2:clojure vvsh$
Я получил ту же ошибку в clojure 1.1 и lein repl (похоже, lein поддерживает свою собственную версию clojure).
Кстати, это есть на mac ox 10.5.8
java version "1.5.0_24"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_24-b02-357-9M3165)
Java HotSpot(TM) Client VM (build 1.5.0_24-149, mixed mode, sharing)
Кто-нибудь знает, что не так и как это исправить?Поскольку я действительно хочу заставить lein repl работать, чтобы начать проект.
Решение
Сегодня я решил ту же проблему, удалив избыточный jline*.jar
от /Library/Java/Extensions
, оставляя только одну установку jline в CLASSPATH
.
Более подробное объяснение: Я пытался построить лабрепл, который устанавливает все свои зависимости в подкаталог lib
, но я ранее настроил jline , скопировав файл .jar в /Library/Java/Extensions
. Вероятно, java.lang.ClassLoader
не удалось обработать две установки jline, и до тех пор, пока они были доступны в двух местах, командная строка, запускающая Clojure REPL, не смогла бы найти последний из классов jline.ConsoleRunner
и clojure.main
, в зависимости от приказа , который они получили в java
команда.
Я надеюсь, что это поможет.
Другие советы
См. Мои альтернативные инструкции для установки на мою вилку:
http://github.com/jedschneide/leinken
Я отправил запрос на то, чтобы обновить readme, но не получил ответ на это.Как только у вас установлен ЛЕИН, вы можете поставить BIN / LEINGEN.SH в своем ~ / bin и позвоните ему где угодно.Я положил ярлык на мой .bash_profile
alias lein="~/bin/leiningen.sh"
, а затем вызовите lein repl
, чтобы запустить оболочку
Также оформить заказ LabRepl, который является отличным инструментом обучения.
Твой java ...
Команда выглядит нормально, я бы дважды проверил, все ли банки находятся там, где, по вашему мнению, они должны быть (и что они тот банки, которые вы думаете, что они есть, т.е. clojure.jar
на самом деле это тот, который вы создали локально, а не какой-то супер-устаревший).
Если вы хотите использовать Лейнинген для lein repl
, это тоже возможно.Обратите внимание: неверно говорить, что он «поддерживает собственную версию Clojure»;Leiningen — это инструмент сборки, используемый как часть проектно-ориентированного рабочего процесса, а отдельные jar-файлы Clojure предназначены для конкретного проекта.Чтобы создать образец проекта для экспериментов, скажем, lein new foo
где-нибудь удобно.Тогда вам нужно будет cd foo
, получите Clojure и банки вкладов с помощью lein deps
( project.clj
скелет предоставлен lein new
уже содержит записи для обоих) и запустите REPL с помощью lein repl
.
Наконец, вы можете использовать новый cljr
проект;у него есть подробный README, с помощью которого вы сможете начать работу в кратчайшие сроки, и с его помощью вы сможете сказать cljr repl
получить Clojure REPL где угодно, без необходимости создавать «проект».
Я встретил ту же проблему.jline.consolerunner (по крайней мере, о jline-0.9.5, которую я использую), кажется, не сможет найти файлы классов на пути, добавленной к путям поиска класса из опции «Java».Это означает, что он не может найти ни классов в вашем текущем каталоге.Я решил это, скопировав CLOJURE.MAIN под / библиотеку / Java / расширения / тоже.