2017-11-28 5 views
1

Ich führe derzeit einen einfachen CLI Ich schrieb mit dem Aufruf: lein run my-cli-command arg --optionKann ich meinen Befehl ohne Probleme ausführen?

Wie kann ich meinen Befehl aufrufen, ohne lein run einzuschließen? Das ist, was ich bin:

Muss ich es in eine binäre oder ausführbare konvertieren und wenn ja wie?

Antwort

3

Soweit ich weiß, gibt es keine Möglichkeit, nur zu laufen.

Sie können lein nehmen aus der Gleichung obwohl durch ein Java-Archiv zu erstellen:

lein uberjar 

Dann das Glas laufen wie jedes andere:

java -jar target/my-cli-command-standalone.jar arg --option 

uberjar wird das Glas Namen auf Was Sie Ihr Projekt in project.clj genannt haben, und wird ein Jar erstellen, das auf externe Abhängigkeiten angewiesen ist, und eines, das nicht (standalone).

Dann, wie @gary wies darauf hin, können Sie den java - jar ... Befehl in einer .bat-Datei, nennen Sie es, was Sie wollen, dann führen Sie den Schläger direkt. Meine bat -Fu ist ziemlich schwach, aber es gibt wahrscheinlich eine Möglichkeit, Argumente an die Fledermaus zu übergeben und sie an das Glas zu übergeben, so dass Sie die Argumente nicht hart codieren müssen.

+0

diese Lösung ermöglicht es Ihnen, um dann einen BAT-Datei oder Shell-Skript „my-cli-Befehl namens zu erstellen "die du so nennen kannst wie du es ursprünglich wolltest. Das Skript würde wie folgt aussehen: java -jar target/mein-cli-command-standalone.jar ' – Gary

+0

@Gary Ja. Ich werde versuchen, einen Klappentext hinzuzufügen. – Carcigenicate

2

Ich habe es nicht verwendet, aber ich weiß inlein existiert und es sieht aus, wie Sie brauchen.

Inlein ist der einfachste und schnellste Weg, Clojure-Skripte auszuführen. Sie müssen nur Ihre Abhängigkeiten einbinden, eine Shebang-Zeile hinzufügen und die Skriptdatei ausführbar machen.

Und ein minimales Beispiel:

#!/usr/bin/env inlein 

'{:dependencies [[org.clojure/clojure "1.8.0"]]} 

(println "hello world!") 
+0

das ist genial! –

1

Sie können "binary Nutzlast" in Shell-Skript verwenden, wie beschrieben in https://coderwall.com/p/ssuaxa/how-to-make-a-jar-file-linux-executable

Grundsätzlich können Sie ein Shell-Skript und Ihre uberjar in einer einzigen Schale verketten Skriptdatei und führen Sie Java im Skript aus, indem Sie das Skript als JAR-Datei im Klassenpfad angeben. Das Beispiel stammt aus dem verknüpften Beitrag:

Speichern Sie Ihren Runner-Scrip t in stub.sh:

#!/bin/sh 
MYSELF=`which "$0" 2>/dev/null` 
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0" 
java=java 
if test -n "$JAVA_HOME"; then 
    java="$JAVA_HOME/bin/java" 
fi 
exec "$java" $java_args -jar $MYSELF "[email protected]" 
exit 1 

Dann verketten es mit Ihren uberjar:

cat stub.sh my-cli-command-uberjar.jar > my-cli-command && chmod +x my-cli-command

Jetzt können Sie es direkt ausführen:

./my-cli-command args...

Es gibt auch eine lein Plugin Automatisierung Dieser Prozess: lein-binplus

+0

Schauen Sie [lein-bin] (https://github.com/Raynes/lein-bin), es wird das für Sie tun. –

1

Ab Clojure 1.9 gibt es neue CLI-Tools! Siehe this guide für die Installation.Sie können eine ausführbare Skript wie folgt erstellen:

#!/usr/local/bin/clojure 
(println "Hello World! from" *ns*) 
(require '[clojure.walk :as walk]) 
(walk/postwalk-demo {:woo ::yeah}) 

dann das Skript ausführbar machen und führen Sie es aus:

$ chmod +x my_script 
$ ./my_script 
Hello World! from #object[clojure.lang.Namespace 0x1ebea008 user] 
Walked: :woo 
Walked: :user/yeah 
Walked: [:woo :user/yeah] 
Walked: {:woo :user/yeah} 

Anlaufzeit und verbessert zu sein scheint. Es dauert etwas mehr als eine Sekunde ein triviales Skript ausgeführt werden soll auf einen neuen MBP (nur einen String in Druckbuchstaben):

time ./hello 
Hello World! 
./hello 1.51s user 0.12s system 184% cpu 0.887 total 
Verwandte Themen