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, который является отличным инструментом обучения.

http://github.com/relevance/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/ тоже.

Другие вопросы по тегам