2012-06-05 9 views
19

Ich bin neu in Clojure und wirklich verwirrt darüber, wie ich Clojure-Programme laufen sollte.typische Art des Laufens clojure Programme

Meine erste Frage ist, ob jedes Clojure-Programm ein Leiningen-Paket ist? Wenn ich schreiben möchte, fange ich an, ein neues Leiningen-Projekt zu erstellen? Gibt es ein Clojure-Programm ähnlich wie Python (python pyfile.py)

Ich weiß, dass dies eine dumme Frage sein könnte, aber ich bin seit einer Weile darüber verwirrt und die wenigen Bücher/Tutorials, die ich durchgelaufen bin Ich beantworte diese Frage nicht richtig. Bis jetzt habe ich Clojure-Code nur in der REPL ausgeführt.

Antwort

25

Da Sie Leiningen direkt gefunden haben, sind Sie auf dem richtigen Weg. Es ist keine alberne Frage, denn die Antwort hilft anderen, bessere Google-Ergebnisse zu erhalten.

  • jedes clojure Programm sollte ein separates Leiningen Projekt, so dass Sie lein new project-name für jeden von ihnen laufen.

  • das Ergebnis eines Clojure Projekt Bau ist das gleiche wie ein Java-Projekt, eine JAR-Datei, die

  • Leiningen mit java -jar myproject-standalone.jar zum Beispiel ausgefuehrt wird für Sie ein Wrapper-Shell-Skript erstellen, die eine .sh-Datei erzeugt das ruft nur java -jar

  • Wenn ich Clojure-Programme in der Produktion bei der Arbeit ausführen, überprüfen wir sie nur aus Git und rufen Sie dann lein run im Verzeichnis (eigentlich Jenkins tut dies).

+0

Wie unterdrücken Sie die Versionsnummer in der '.jar' Zieldatei? – nekonari

+2

fügen Sie '' uberjar-name "sample-aloneal.jar" 'zu Ihrer project.clj-Datei hinzu. Sehen Sie sich das Beispielprojekt an: https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L382 –

9

Eine Sache, die Arthur Ulfeldt des ausgezeichneten Antwort hinzuzufügen ist, dass lein für Sie eine project.clj erstellt, und Ihre Hauptfunktion (Funktion, bei der Ausführung des Programms aus startet) kann dort definiert werden. In der Voreinstellung erzeugt Leiningen die Hauptfunktion in einer Datei core.clj Zum Beispiel genannt:

lein run 

und die Hauptfunktion in music.core wird ausgeführt werden:

(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) 

jetzt kann mein Projekt mit ausgeführt werden.

2

meine bash clojure Skript:

#!/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 

speichern Sie sie auf $ HOME/bin/clojure, chmod + x $ HOME/bin/clojure, Kopie clojure.jar und der 3rd-Party-Bibliothek in $ HOME/.clojure, können Sie clojure your_program.clj als python pyfile.py laufen

5

Um einen Teil der Frage zu beantworten: "Gibt es ein Clojure-Programm ähnlich wie Python?" Sie kann wirklich nur ein clojure Skript wie folgt ausgeführt werden (so genannte hello.clj):

(println "Hello!") 

wie folgt aus:

clojure hello.clj 

EDIT: Die folgende Beschreibung ist auf alle Systeme arbeiten:

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

Auf meinem System befindet sich die Datei clojure.jar in /usr/share/clojure/clojure.jar. Der Befehl linux clojure abzufeuern, führt einfach einen Befehl wie den oben unter den Deckeln aus.

+0

Funktioniert das auf allen Systemen? Ich weiß, dass die Installation von aptitude auf Ubuntu Ihnen einen 'clojure'-Befehl gibt, aber ich weiß nicht, dass dies für andere Installationen gilt. Wäre gut, hier zu überprüfen und zu aktualisieren. – metasoarous

+0

Ich habe dies aktualisiert, so dass es auf allen Systemen funktionieren sollte. – djhaskin987

0

als Update, eine einfache Art und Weise mit clojure Programmen zu beschäftigen ist leiningen

verwenden Wenn Sie kleine clojure Skripte ausführen möchten, verwenden Sie lein-exec

0

einen Alias ​​erstellen in Ihrer .bashrc Datei oder äquivalent:

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

Dann können Sie clojure my-file.clj in Ihrem Terminal laufen.

Verwandte Themen