2009-10-14 11 views
17

J'ai un projet clojure qui utilise le moteur de jeu 2d slick que j'essaye d'exécuter en tant que fichier jar exécutable. J'ai créé le projet dans Netbeans et Eclipse et je n'ai pas eu de chance de les exporter dans un format exécutable. Il continue à donner l'erreur n'a pas pu trouver la classe principale, suivie par donner ma classe principale. J'ai essayé d'éditer le fichier manifeste en changeant le nom dans l'espoir qu'il le trouvera mais pas de chance jusqu'à présent.Création d'un fichier jar exécutable à partir d'un projet clojure?

Il fonctionne dans l'environnement de développement, mais pas à l'extérieur.

Répondre

13

Cela fait un moment que j'ai posté cette question et je pensais que je voudrais coller ce que j'ai trouvé depuis pour tous ceux qui ont besoin cette question a répondu.

Maintenant j'utilise Leiningen pour gérer mes projets bien que j'ai commencé à jouer avec cljr qui est un remplisseur et gestionnaire de paquets qui le complète. L'un ou l'autre de ces éléments facilite beaucoup la génération d'un fichier JAR exécutable. En prenant exemple sur Leiningen, configurez-le en suivant les instructions du site, puis appelez le lein new dans votre espace de travail. Cela créera un dossier pour héberger vos projets ainsi qu'un sous-dossier pour votre source et testera un fichier readme et un fichier project.clj.

Modifiez le projet.clj avec les dépendances que vous allez utiliser. Les dépendances de dev sont des dépendances dont vous avez besoin uniquement pour le développement tel que swank-clojure montré dans l'exemple ci-dessous.

(defproject myproject "0.0.1-SNAPSHOT" 
    :description "My Personal Project." 
    :url "http://example.com/my-project" 
    :dependencies [[org.clojure/clojure "1.1.0"] 
       [org.clojure/clojure-contrib "1.1.0"] 
       [**other dependencies**]] 
    :dev-dependencies [[swank-clojure "1.2.1"]] 
    :main [org.myproject.core]) 

Je trouve Swank-clojure utile que vous pouvez alors saisir lein swank pour démarrer une instance de Swank que vous pouvez vous connecter à via emacs.

: principal définit quel espace de noms contient la fonction -main.

L'appel lein uberjar créera un pot autonome qui sera ensuite exécuté.

J'espère que cela aide tous ceux qui ont eu mon problème!

+0

'Erreur: Impossible de trouver ou de charger la classe principale [prueba.core]'. J'ai inclus ': main' et sa valeur correspondante, et j'ai une fonction' -main' qui est publique dans cet espace de noms. Une idée sur ce qui pourrait aller mal? – m0skit0

+0

Salut @ m0skit0, ça fait longtemps que j'ai écrit ça. Avez-vous structuré vos répertoires de manière appropriée? Je veux dire par là que votre 'project.clj' est dans un dossier contenant' src' contenant 'prueba' contenant' core.clj'? Avez-vous utilisé 'lein new ', puis éditez le fichier 'core.clj' créé? Si non, pourriez-vous expliquer ce que vous avez fait aussi clairement que possible? – toofarsideways

+0

La structure du projet est correcte car elle a été créée par Leiningen. J'ai finalement réussi à le faire, en utilisant la syntaxe suivante:: root.scriptlauncher: aot [root.scriptlauncher] 'pour le' defproject'. – m0skit0

3

Je devais ajouter clojure.jar et clojure-contrib.jar en tant que "dépendance" au projet pour qu'il soit inclus dans le pot. Une fois que j'ai compris que j'étais capable de courir le pot résultant. Gardez à l'esprit que Netbeans possède son propre fichier clojure.jar qui est utilisé pour exécuter le plugin lui-même et il n'est pas nécessaire que ce soit le même clojure.jar que votre programme utilise. Netbeans a un menu pour ajouter des bibliothèques. Vous aurez besoin d'ajouter clojure [-contrib] .jar à la fois la construction et l'exécution des bibliothèques

+0

J'ai essayé d'ajouter cela comme une bibliothèque de temps de compilation et d'exécution au projet, mais pas de chance jusqu'à présent. – toofarsideways

Questions connexes