2017-12-22 83 views
6

W przeszłości korzystałem z instalatora systemu Windows pod adresem clojure.org, aby zainstalować clojure na różnych komputerach z Windows. Clojure 1.9 jest dostępny od kilku tygodni, ale nadal nie ma żadnych oznak instalatora dla systemu Windows lub ogólnej instalacji opartej na języku Java, o ile mogę znaleźć.Instalacja systemu Windows Clojure 1.9

Próbowałem pobierając słoiki z clojure.org i działa

java -jar clojure.1.9.0.jar 

ale to po prostu zrzuca stosu:

Exception in thread "main" java.lang.ExceptionInInitializerError 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Unknown Source) 
     at clojure.lang.RT.classForName(RT.java:2204) 
     at clojure.lang.RT.classForName(RT.java:2213) 
     at clojure.lang.RT.loadClassForName(RT.java:2232) 
     at clojure.lang.RT.load(RT.java:450) 
     at clojure.lang.RT.load(RT.java:426) 
     at clojure.core$load$fn__6548.invoke(core.clj:6046) 
     at clojure.core$load.invokeStatic(core.clj:6045) 
     at clojure.core$load.doInvoke(core.clj:6029) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.core$load_one.invokeStatic(core.clj:5848) 
     at clojure.core$load_one.invoke(core.clj:5843) 
     at clojure.core$load_lib$fn__6493.invoke(core.clj:5888) 
     at clojure.core$load_lib.invokeStatic(core.clj:5887) 
     at clojure.core$load_lib.doInvoke(core.clj:5868) 
     at clojure.lang.RestFn.applyTo(RestFn.java:142) 
     at clojure.core$apply.invokeStatic(core.clj:659) 
     at clojure.core$load_libs.invokeStatic(core.clj:5925) 
     at clojure.core$load_libs.doInvoke(core.clj:5909) 
     at clojure.lang.RestFn.applyTo(RestFn.java:137) 
     at clojure.core$apply.invokeStatic(core.clj:659) 
     at clojure.core$require.invokeStatic(core.clj:5947) 
     at clojure.core.server$loading__6434__auto____8456.invoke(server.clj:9) 
     at clojure.core.server__init.load(Unknown Source) 
     at clojure.core.server__init.<clinit>(Unknown Source) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Unknown Source) 
     at clojure.lang.RT.classForName(RT.java:2204) 
     at clojure.lang.RT.classForName(RT.java:2213) 
     at clojure.lang.RT.loadClassForName(RT.java:2232) 
     at clojure.lang.RT.load(RT.java:450) 
     at clojure.lang.RT.load(RT.java:426) 
     at clojure.core$load$fn__6548.invoke(core.clj:6046) 
     at clojure.core$load.invokeStatic(core.clj:6045) 
     at clojure.core$load.doInvoke(core.clj:6029) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.core$load_one.invokeStatic(core.clj:5848) 
     at clojure.core$load_one.invoke(core.clj:5843) 
     at clojure.core$load_lib$fn__6493.invoke(core.clj:5888) 
     at clojure.core$load_lib.invokeStatic(core.clj:5887) 
     at clojure.core$load_lib.doInvoke(core.clj:5868) 
     at clojure.lang.RestFn.applyTo(RestFn.java:142) 
     at clojure.core$apply.invokeStatic(core.clj:659) 
     at clojure.core$load_libs.invokeStatic(core.clj:5925) 
     at clojure.core$load_libs.doInvoke(core.clj:5909) 
     at clojure.lang.RestFn.applyTo(RestFn.java:137) 
     at clojure.core$apply.invokeStatic(core.clj:659) 
     at clojure.core$require.invokeStatic(core.clj:5947) 
     at clojure.core$require.doInvoke(core.clj:5947) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.lang.Var.invoke(Var.java:381) 
     at clojure.lang.RT.doInit(RT.java:487) 
     at clojure.lang.RT.<clinit>(RT.java:336) 
     at clojure.main.<clinit>(main.java:20) 
Caused by: java.io.FileNotFoundException: Could not locate clojure/spec/alpha__init.class or clojure/spec/alpha.clj on classpath. 
     at clojure.lang.RT.load(RT.java:463) 
     at clojure.lang.RT.load(RT.java:426) 
     at clojure.core$load$fn__6548.invoke(core.clj:6046) 
     at clojure.core$load.invokeStatic(core.clj:6045) 
     at clojure.core$load.doInvoke(core.clj:6029) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.core$load_one.invokeStatic(core.clj:5848) 
     at clojure.core$load_one.invoke(core.clj:5843) 
     at clojure.core$load_lib$fn__6493.invoke(core.clj:5888) 
     at clojure.core$load_lib.invokeStatic(core.clj:5887) 
     at clojure.core$load_lib.doInvoke(core.clj:5868) 
     at clojure.lang.RestFn.applyTo(RestFn.java:142) 
     at clojure.core$apply.invokeStatic(core.clj:659) 
     at clojure.core$load_libs.invokeStatic(core.clj:5925) 
     at clojure.core$load_libs.doInvoke(core.clj:5909) 
     at clojure.lang.RestFn.applyTo(RestFn.java:137) 
     at clojure.core$apply.invokeStatic(core.clj:659) 
     at clojure.core$require.invokeStatic(core.clj:5947) 
     at clojure.main$loading__6434__auto____8543.invoke(main.clj:11) 
     at clojure.main__init.load(Unknown Source) 
     at clojure.main__init.<clinit>(Unknown Source) 
     ... 55 more 

a jak nie mam pliki clojure/spec/alpha__init.class lub clojure/spec/alpha.clj wydaje że w tej chwili nie mam szczęścia.

A więc - czy istnieje krok po kroku, aby słoiki 1.9.0 były uruchamiane w systemie Windows?

Wszystkie sugestie z zadowoleniem.

Odpowiedz

3

TL; DR:

Trzeba również ściągnąć org.clojure/spec.alpha i org.clojure/core.specs.alpha. Następnie należy uruchomić z:

java -cp clojure-1.9.0-alpha17.jar;spec.alpha-0.1.123.jar;core.specs.alpha-0.1.10.jar clojure.main 

(Uwaga, że ​​twoje wersje nie będzie inaczej, a tam będzie : instad z ; dla rodziny Unix OS).

Jak dowiedzieć się, i sprowadzić pozostałym deps

Z ostatnich zmian w Clojure do wykorzystania dedykowanych artefakty dla Spec w sub-nazw alfa, to nie jest już łatwo uruchomić prosty rEPL tylko z zwykły słoik (np. java -jar $CLOJURE_JAR clojure.main). Jak zacząć teraz?

dzień przed jesteś lepiej zrobić lein new gdzieś zmienić org.clojure/Clojure zależności do wersji chcesz i zrobić lein deps :tree sprowadzić wszystko, co jest potrzebne i wyświetla jakie rzeczy org.clojure/core teraz zależy od. Na przykład.

[org.clojure/clojure "1.9.0-alpha17"] 
    [org.clojure/core.specs.alpha "0.1.10" :exclusions [[org.clojure/clojure] [org.clojure/spec.alpha]]] 
    [org.clojure/spec.alpha "0.1.123" :exclusions [[org.clojure/clojure]]] 

Wszystkie artefakty skończyć w ~/.m2/repository. Następnie musisz zbudować ścieżkę klas, aby zadzwonić do REPL. Możesz teraz uruchomić lein with-profile uberjar cp w tym sztucznym projekcie, aby uzyskać ścieżkę klasy, z której korzysta Leiningen. Np .:

$ lein with-profile uberjar cp 
/tmp/xxx/test:/tmp/xxx/src:/tmp/xxx/resources:/tmp/xxx/target/classes:/home/user/.m2/repository/org/clojure/clojure/1.9.0/clojure-1.9.0.jar:/home/user/.m2/repository/org/clojure/spec.alpha/0.1.143/spec.alpha-0.1.143.jar:/home/user/.m2/repository/org/clojure/core.specs.alpha/0.1.24/core.specs.alpha-0.1.24.jar 
# this will be `;` instead of `:` as well here for windows 

Usuń test , src i zasobów te, a to, co masz do przekazania do -cp.

rozwiązanie Future

Jak stwierdzono w Getting Started na clojure CLI nie jest jeszcze dostępny dla systemu Windows.

+1

Dziękuję za tę odpowiedź! Jedyną zmianą wymaganą do uruchomienia w systemie Windows jest użycie ';' jako separatora ścieżki klasy zamiast ':' tak jak: 'java -cp clojure-1.9.0.jar; spec.alpha-0.1.143.jar; core.specs.alpha-0.1.24.jar clojure.main' – JBiserkov

+0

@JBiserkov dzięki za podpowiedź. zaktualizuję odpowiedź. – cfrick