2012-06-05 15 views
19

Jestem nowy w Clojure i naprawdę nie rozumiem, w jaki sposób powinienem prowadzić programy Clojure.typowy sposób uruchamiania programów clojure

Moje pierwsze pytanie dotyczy tego, czy każdy program Clojure jest pakietem Leiningen? Jeśli chcę pisać, to zaczynam od stworzenia nowego projektu Leiningen? Czy można uruchomić programy Clojure podobne do Pythona (np. python pyfile.py)

Zdaję sobie sprawę, że to może być głupie pytanie, ale od pewnego czasu byłem zdezorientowany i kilka książek/tutoriali, które przeszły przez wykładowców Wydaje się, że właściwie odpowiadają na to pytanie. Do tej pory korzystam z kodu Clojure w REPL.

Odpowiedz

25

Po znalezieniu leiningen od razu jesteś na dobrej drodze. To nie jest głupie pytanie, ponieważ udzielenie odpowiedzi pomoże innym uzyskać lepsze wyniki w Google.

  • clojure każdy program powinien być osobny projekt Leiningen, więc uruchomić lein new project-name dla każdego z nich.

  • wynikiem budowania projektu Clojure jest taka sama jak w projekcie Java, plik JAR, który pobiera uruchomić z java -jar myproject-standalone.jar na przykład

  • Leiningen może zbudować skrypt powłoki otoki dla ciebie, który wytwarza .Sh plik że po prostu wywołuje java -jar

  • Kiedy uruchomić programy Clojure w produkcji w pracy po prostu sprawdzić je z git, a następnie zadzwonić lein run w katalogu (właściwie Jenkins to robi).

+0

W jaki sposób tłumi się numer wersji w pliku docelowym '.jar'? – nekonari

+2

dodaj ': uberjar-name" sample-standalone.jar "' do twojego pliku project.clj. zobacz przykładowy projekt: https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L382 –

9

Jedno dodanie doskonałą odpowiedzią Arthura Ulfeldt jest to, że Lein tworzy project.clj dla ciebie, a główną funkcją (funkcja gdzie realizacja programu rozpocznie się od) można zdefiniować tam. Domyślnie Leiningen tworzy główną funkcję w pliku o nazwie core.clj Na przykład:

(defproject music "1.0.0-SNAPSHOT" 
    :description "A workspace for my music experiments" 
    :dependencies [ 
    [org.clojure/clojure "1.3.0"] 
    [org.clojure/math.combinatorics "0.0.1"] 
    ] 
    :main music.core) 

teraz mój projekt może być prowadzony przy użyciu:

lein run 

i główną funkcją w music.core zostanie uruchomiony.

2

mój skrypt bash clojure:

#!/bin/sh 

export CLOJURE_EXT=$HOME/.clojure 
export CLOJURE_OPTS="-Xmx1g -server" 

LIBS=$(ls -1 $CLOJURE_EXT/* 2> /dev/null) 
export CLASSPATH=.:$CLOJURE_EXT:$CLASSPATH:"$(echo "$LIBS" | tr \\n :)" 

JAVA=${CLOJURE_JAVA:-java} 
OPTS=${CLOJURE_OPTS:-} 
MAIN=${CLOJURE_MAIN:-clojure.main} 

breakchars="(){}[],^%$#@\"\";:''|\\" 

if [ $# -eq 0 ]; then 
    exec rlwrap --remember -c -b $breakchars \ 
     -f $HOME/.clj_completions \ 
     --history-filename=$HOME/.clj_history --histsize=1000000 \ 
     $JAVA $OPTS $MAIN -i $HOME/.clojure.clj --repl 
else 
    exec $JAVA $OPTS $MAIN "[email protected]" 
fi 

zapisać je do $ HOME/bin/Clojure, chmod + x $ HOME/bin/Clojure, kopiowania clojure.jar i 3rd biblioteki strona w $ HOME/.clojure, można uruchomić clojure your_program.clj jak python pyfile.py

5

Aby odpowiedzieć na część pytania: "Czy można uruchomić programy Clojure podobne do Pythona?" Naprawdę można po prostu uruchomić skrypt Clojure tak (zwany hello.clj):

(println "Hello!") 

tak:

clojure hello.clj 

EDIT: Następujące powinny pracować na wszystkich systemów:

java -jar <path-to-clojure-jar>/clojure.jar hello.clj 

W moim systemie plik clojure.jar znajduje się w /usr/share/clojure/clojure.jar. Komenda Linux odpalić clojure po prostu uruchamia polecenie podobne do tego pod kołdrą.

+0

Czy to działa we wszystkich systemach? Wiem, że instalacja z aptitude na Ubuntu daje komendę 'clojure', ale nie wiem, że tak jest w przypadku innych instalacji. Byłoby dobrze, aby zweryfikować i zaktualizować tutaj. – metasoarous

+0

Zaktualizowałem to, aby działało na wszystkich systemach. – djhaskin987

0

jako aktualizację, to prosta droga do czynienia z programami Clojure jest wykorzystanie leiningen

Jeśli chcesz uruchomić małe skrypty Clojure, użyj lein-exec

0

Utwórz alias w pliku .bashrc lub równowartość:

alias clojure="java -jar path/to/clojure-x.x.x.jar"

Następnie można uruchomić clojure my-file.clj w terminalu.

Powiązane problemy