web-dev-qa-db-fra.com

Comment exécuter un fichier .clj Clojure que j'ai créé?

J'ai installé Geany sur ma machine Linux Mint et j'ai écrit du code simple. Juste un petit bonjour pour commencer avec la langue.

Maintenant, je voudrais l'exécuter et voir ce qu'il produit.

Comment puis-je exécuter ce code? Je n'utilise pas un IDE ou quelque chose qui est préemballé, juste le simple éditeur de texte Geany.

Quelle commande dois-je exécuter?

65

Avec clojure

Je ne peux pas croire que personne ne l'ait encore suggéré. Vous devriez pouvoir faire

clojure path/to/script.clj

Cela fonctionne en utilisant le clojure installé sur Ubuntu avec apt-get. Pas sûr des autres installations ...

Avec lein-exec

Cependant, si le script sur lequel vous travaillez a des dépendances , je recommanderais lein-exec plugin . Cela a l'avantage de vous permettre d'utiliser Leiningen pour gérer toutes les dépendances, ce qui est agréable. Leiningen a déjà a lein run, mais elle ne fonctionne que pour l'exécution des fonctions principales dans un projet Clojure/lein complet . Alors le lein-exec le plugin est un très bon complément pour les scripts à petite échelle.

Détails de la dépendance ...

Remarque: Par souci de rigueur, si vous utilisez lein, vous pouvez ajouter toutes les bibliothèques que vous souhaitez utiliser à un ~/.lein/profiles.clj fichier, ou à votre project.clj fichier si vous travaillez dans un projet. Ensuite, lorsque vous exécutez lein deps toutes les dépendances seront installées et accessibles dans vos scripts/projets lors de l'utilisation de lein exec/lein run. Aditionellement, lein repl vous donne une réponse Clojure avec accès à ces dépendances. Encore une fois, certainement la voie à suivre si vous avez des dépendances de bibliothèque.

Dans les deux cas, envisagez d'utiliser drip pour une heure de démarrage plus rapide

Drip est un petit outil soigné qui vous fournit une image JVM pré-amorcée prête à être lancée. Cela peut être utile pour réduire les délais de lancement des applications JVM. Clojure peut prendre un certain temps à bootstrap lui-même, donc le goutte à goutte est un bel outil pour aider à accélérer ce processus. C'est particulièrement le cas lorsque vous écrivez de petits scripts, avec lesquels il y a généralement une attente d'exécution rapide. Si vous utilisez leiningen, jetez un œil au plugin lein-drip .

Pour ClojureScript

Je recommanderais http://planck-repl.org/ . Il prend désormais en charge le lancement rapide (amorcé) des scripts ClojureScript sans avoir à lancer la JVM ou Clojure. Pour la plupart des tâches de script, une exécution rapide est importante, donc lorsque vous n'avez besoin de rien de spécifique à la JVM, c'est ma recommandation n ° 1.

62
metasoarous

Vous pouvez exécuter le script avec la commande suivante:

Java -cp clojure.jar clojure.main file.clj

mais il vaut mieux utiliser leiningen , surtout quand vous commencerez à ajouter des dépendances à votre projet. lein fournit un certain nombre de commandes pour exécuter votre code (avec toutes les dépendances nécessaires), pack de code dans l'archive avec lein jar, ou créez des archives complètes et indépendantes avec lein uberjar avec lequel vous pouvez exécuter:

Java -jar your_app.jar

commander

P.S. Vous pouvez lire comment utiliser lein dans article suivant - il décrit les tâches de base et les configurations

57
Alex Ott

Une fois que vous avez installé lein et le plugin lein-exec , exécuter le fichier .clj que vous avez créé est aussi simple que

lein exec hello.clj

Si vous passez des arguments de ligne de commande comme

lein exec hello.clj arg1 arg2 arg3

vous pouvez y accéder dans la fonction 'foo' de votre hello.clj comme

(foo *command-line-args*) 
13
finiterecursion

Pour un seul fichier clj, vous pouvez ajouter,

#!/usr/bin/env Java -cp /path/to/clojure-1.2.0.jar clojure.main

en haut du fichier et le rendre exécutable ou vous pouvez utiliser leiningen qui est un outil de construction de clojure, il créera un seul pot qui a tout emballé, alors vous pouvez simplement le faire,

Java -jar cool_app.jar
8
Hamza Yerlikaya

Drip est probablement maintenant la meilleure réponse à cette question (voir wiki de Drip pour plus de détails sur l'utilisation de Drip avec Clojure).

Cake a été intégré à Leiningen et a depuis été remplacé comme l'implémentation la plus stable de l'automatisation Clojure par Drip - voir cette réponse à une question similaire ici.

1
duncsoz

si vous voulez juste exécuter un seul fichier, que diriez-vous de le rediriger vers le repl comme:

cat $PATH_TO_FILE | lein repl

1
Will Munn

J'ai rencontré un problème similaire lors de l'exécution d'un fichier de script clojure spécifique à partir d'un projet clojure à l'aide de lein. Puis j'ai trouvé un raccourci, pensé à le partager.

Dans project.clj fichier, vous pouvez basculer le nom du fichier de script clojure (qui a bien sûr la méthode principale). Voici la déclaration pour cela.

:main ^:skip-aot conv.newconv; here conv is namespace and newconv is the file name.

Remarque: Je suis novice en matière de clojure et je ne sais pas pourquoi '^: skip-aot` est utilisé, je n'ai pas vérifié cela.

Remarque: Cette méthodologie, ne nécessite aucun plugin à installer ni aucun bocal le fichier doit être généré. Cela ne nécessite que de changer un nom dans le fichier de projet.

Hypothèse: Votre projet clojure a plusieurs fichiers clojure, chacun ayant sa méthode principale. Je suppose que cela est créé à des fins de test uniquement. Ma solution fonctionnera pour ce scénario spécifique.

0
Arindam Nayak

Pour exécuter un seul fichier via la ligne de commande, utilisez les commandes suivantes:

clj -m (NameSpace name)

ex: clj -m Sample

Ou si vous souhaitez exécuter repl:

(load-file filelocation)

ex:

 (load-file "Sample.clj")
0