2010-07-10 15 views
6

Z jakiegoś powodu nie mogę uzyskać clojure REPL pracując z jline, to co zrobiłem to git clone repozytorium clojure off github następnie uruchom mrówkę, aby go zbudować, a następnie pobierz jline-0.9.94. jar do katalogu z clojure.jar, a następnie uruchomić następujące polecenie:clojure/lein REPL z jline

java -cp jline-0.9.94.jar:clojure.jar jline.ConsoleRunner clojure.main 

i uzyskać następujące błędy:

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) 

Oto pliki w moim bieżącym katalogu:

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$ 

Mam ten sam błąd na clojure 1.1 i repl lein (wydaje się, że lein utrzymuje swoją własną wersję clojure).

Nawiasem mówiąc, jest to na 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) 

Ktoś wie co się dzieje i jak to naprawić? Naprawdę chcę, aby lein repl pracowało nad uruchomieniem projektu.

+0

W rzeczywistości ta konfiguracja działa dla mnie w niemal identycznym środowisku (OSX, Clojure ze źródła, jline, ta sama linia poleceń). –

Odpowiedz

3

Rozwiązałem ten sam problem już dziś, usuwając nadmiarowy jline*.jar z /Library/Java/Extensions, pozostawiając tylko jedną instalację jline w CLASSPATH.

Dłuższe wyjaśnienie: starałem się budować labrepl, który instaluje wszystkie zależności w podkatalogu lib, ale wcześniej skonfigurować jline kopiując plik .jar do /Library/Java/Extensions. Apparently, java.lang.ClassLoader nie mógł obsłużyć dwóch instalacji jline i tak długo, jak były dostępne w dwóch miejscach, wiersz polecenia uruchamiający Clojure REPL nie znalazłby drugiej z klas jline.ConsoleRunner i clojure.main, w zależności od kolejności, w jakiej zostały podane do polecenia java.

Mam nadzieję, że to pomoże.

+0

Dzięki, wszystko działa teraz, nie mogę uwierzyć, że proste usunięcie go rozwiązuje problem. –

+0

Również mnie to uderzyło. Zobacz [tę odpowiedź] (http://stackoverflow.com/questions/4655852/why-is-my-javap-output-different-than-yours-for-the-jar-file/5530443#5530443) dla innego wersja tego samego wydania. – Lyle

1

zobaczyć moje alternatywne instrukcje do zainstalowania na mój widelec:

http://github.com/jedschneider/leiningen

Wysłałem prośbę do ściągania aktualizacji readme, ale nie dostał odpowiedzi na nią. gdy już zainstalujesz lein, możesz umieścić bin/leiningen.sh w katalogu ~/bin i wywołać go w dowolnym miejscu. I umieścić skrót na moim bash_profile

alias lein="~/bin/leiningen.sh"

a następnie zadzwonić lein repl uruchomić muszli

również wyewidencjonowania labrepl który jest doskonałym narzędziem edukacyjnym.

http://github.com/relevance/labrepl

+0

Dzięki za dobre narzędzie, udało mi się zastąpić leina za pomocą metody pyrtsa. –

0

Twoje polecenia java ... wygląda dobrze, ja bym dokładnie sprawdzić czy wszystkie słoje są gdzie myślisz powinny być (i są się słoiki myślisz one są, tzn clojure.jar jest rzeczywiście taki, który zbudowałeś lokalnie, a nie jakiś super przestarzały).

Jeśli chcesz użyć Leiningen do lein repl, to też jest możliwe. Zauważ, że nie można powiedzieć, że "zachowuje swoją własną wersję Clojure"; Leiningen to narzędzie do budowania, wykorzystywane w ramach przepływu pracy zorientowanego na projekt, a oddzielne słoiki Clojure są specyficzne dla projektu. Aby utworzyć przykładowy projekt do zabawy, powiedzmy, w dogodnym miejscu. Następnie musisz cd foo, dostać swoje słoiki Contrib Clojure & z lein deps (szkielet project.clj dostarczony przez lein new zawiera już wpisy dla obu) i uruchomić REPL z lein repl.

Wreszcie można użyć nowego ; ma obszerny README, który powinien zacząć od razu, a dzięki niemu będziesz mógł powiedzieć cljr repl, aby uzyskać Clifure REPL w dowolnym miejscu, bez potrzeby tworzenia "projektu".

+0

Ah, nawiasem mówiąc, jeśli chcesz świeżą kompilację Clojure, może lepiej udać się na http://build.clojure.org/ i dostać tam słoik. A jeśli zaczynasz od tego języka - nie wynika to z pytania, czy jesteś, czy nie, ale jeśli - prawdopodobnie powinieneś trzymać się wersji 1.1. –

+0

Dzięki, jestem początkujący, więc myślę, że wszystkie funkcje 1.1 będą wystarczające, aby się uczyć :) –

0

Spotkałem ten sam problem. jline.ConsoleRunner (przynajmniej o jline-0.9.5, którego używam) wydaje się nie być w stanie znaleźć plików klas w ścieżce dodanej do ścieżek wyszukiwania klas z opcji -cp polecenia "java". Oznacza to, że nie może znaleźć żadnej z klas w bieżącym katalogu. Rozwiązałem to, kopiując clojure.main w/Library/Java/Extensions/też.