clojure / lein REPL с jline - PullRequest
       17

clojure / lein REPL с jline

6 голосов
/ 10 июля 2010

По какой-то причине я не могу заставить 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 ]

3 голосов
/ 11 июля 2010

Сегодня я решил ту же проблему, удалив лишнюю 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.

Надеюсь, это поможет.

1 голос
/ 10 июля 2010

см. Мои альтернативные инструкции по установке на моей вилке:

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

0 голосов
/ 28 ноября 2010

Я встретил ту же проблему.jline.ConsoleRunner (по крайней мере, о jline-0.9.5, который я использую), кажется, не может найти файлы классов по пути, добавленному к путям поиска классов из опции -cp команды java.Это означает, что он не может найти ни одного класса в вашем текущем каталоге.Я решил эту проблему, скопировав clojure.main в папку / Library / Java / Extensions / тоже.

0 голосов
/ 10 июля 2010

Ваша команда java ... выглядит хорошо, я бы дважды проверил, все ли банки находятся там, где, как вы думаете, они должны быть (и что они являются банками , как вы думаете, то естьна самом деле тот, который вы создали локально, а не какой-то супер устаревший).

Если вы хотите использовать Leiningen для lein repl, это тоже возможно.Обратите внимание, что нельзя сказать, что он «поддерживает свою собственную версию Clojure»;Leiningen - это инструмент для сборки, используемый как часть проектно-ориентированного рабочего процесса, а отдельные файлы Clojure зависят от проекта.Чтобы создать пример проекта для игры, скажем lein new foo в удобном месте.Затем вам нужно cd foo, получить банки Clojure & contrib с lein deps (скелет project.clj, предоставленный lein new уже содержит записи для обоих) и запустить REPL с lein repl.

Наконец, вы можете использовать новый cljr проект ;у него есть всеобъемлющий README, который позволит вам начать работу в кратчайшие сроки, и с его помощью вы сможете сказать cljr repl, чтобы получить Clojure REPL где угодно, без необходимости создавать «проект».

...