clojure/lein REPL с jline
По какой-то причине я не могу заставить clojure REPL работать с jline, я сделал git clone из репозитория 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, чтобы начать проект.
4 ответа
Я решил ту же проблему сегодня, удалив лишнюю jline*.jar
от /Library/Java/Extensions
оставляя только одну инсталляцию jline в CLASSPATH
,
Более длинное объяснение: я пытался собрать labrepl, который устанавливает все его зависимости в подкаталоге lib
, но я ранее настроил jline, скопировав файл.jar в /Library/Java/Extensions
, Видимо, java.lang.ClassLoader
не смог обработать две установки jline, и пока они были доступны в двух местах, командная строка, запускающая Clojure REPL, не сможет найти последний из классов jline.ConsoleRunner
а также clojure.main
в зависимости от порядка их java
команда.
Надеюсь, это поможет.
См. мои альтернативные инструкции по установке на моей вилке:
http://github.com/jedschneider/leiningen
Я отправил запрос на обновление, чтобы обновить файл readme, но не получил ответа на него. После установки lein вы можете поместить bin / leiningen.sh в ~/bin и вызывать его где угодно. я положил ярлык на мой.bash_profile
alias lein="~/bin/leiningen.sh"
а затем позвоните lein repl
запустить снаряд
также проверьте labrepl, который является отличным инструментом обучения.
Ваш java ...
Команда выглядит хорошо, я бы дважды проверил, все ли банки находятся там, где вы думаете, что они должны быть (и что это банки, которые, как вы думаете, они есть, т.е. clojure.jar
на самом деле это тот, который вы создали локально, а не какой-то супер устаревший).
Если вы хотите использовать Leiningen для lein repl
Это тоже возможно. Обратите внимание, что нельзя сказать, что он "поддерживает свою собственную версию Clojure"; Leiningen - это инструмент для сборки, используемый как часть проектно-ориентированного рабочего процесса, а отдельные банки Clojure зависят от проекта. Чтобы создать пример проекта, чтобы поиграть в, скажем, lein new foo
где-то удобно. Тогда вам нужно cd foo
получить ваши Clojure и Contour банки с lein deps
(project.clj
скелет предоставлен lein new
уже содержит записи для обоих) и начать ответ с lein repl
,
Наконец, вы можете использовать новый cljr
проект; он имеет всеобъемлющий README, который должен начать вас в кратчайшие сроки, и с его помощью вы сможете сказать cljr repl
чтобы получить Clojure REPL где угодно, без необходимости создавать "проект".
Я встретил ту же проблему. Кажется, что jline.ConsoleRunner (по крайней мере, о jline-0.9.5, который я использую) не может найти файлы классов по пути, добавленному в пути поиска классов из опции -cp команды java. Это означает, что он не может найти ни одного класса в вашем текущем каталоге. Я решил это, скопировав clojure.main в папку /Library/Java/Extensions/ тоже.