2010-10-13 7 views
3

Je le contenu suivant dans le fichier src/main/clojure/za/co/pb/maven_test/test.clj:Comment exécuter une application clojure emballé maven-du pot

(ns za.co.pb.maven-test.test 
    (:gen-class)) 

(defn -main [] 
    (println "Hello world!")) 

J'ai aussi un POM qui a les dépendances necesary sur clojure-maven-plugin avec la compilation exécution.

Si j'exécute une commande mvn package, je reçois un fichier target/maven-test-1.0-SNAPSHOT.jar et si je regarde dans le dossier des classes je ces fichiers dans le dossier target/classes/za/co/pb/maven_test:

  • test.class
  • test.clj
  • test__init.class
  • test$loading__4410__auto__.class
  • test$_main.class

Ceci, pour autant que je sache, est approprié.

Cependant, quand je lance cette commande:

java -cp target\app-1.0-SNAPSHOT.jar za.co.pb.maven_test.test

Je reçois ceci:

Exception in thread "main" java.lang.NoClassDefFoundError: clojure/lang/IFn 
Caused by: java.lang.ClassNotFoundException: clojure.lang.IFn 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: za.co.pb.maven_test.test. Program will exit. 

Répondre

5

Vous n'avez pas les fichiers clojure dans le classpath. Vous pouvez soit les incorporer selon la réponse de Stuart, ou si vous n'aimez pas avoir toutes les dépendances intégrées dans un seul pot, vous pouvez utiliser le plugin dependency et le plugin jar pour que cela fonctionne bien.

Voir: http://groups.google.com/group/enclojure/msg/87159854fcb0e708 pour un résumé (note, il y a une faute de frappe dans le message lié, le paquet devrait s'appeler "foo").

-2

-ce que toutes les dépendances disponibles? Je ne connais pas la classe clojure.lang.IFn. Est-ce d'une bibliothèque externe? Si c'est le cas, avez-vous marqué la dépendance avec la portée fournie?

4

Vous devez générer un fichier JAR qui inclut toutes les dépendances de votre projet. Le plugin Maven Assembly le fait pour vous, en utilisant le descripteur jar-with-dependencies intégré.

1

Si vous utilisez leiningen, après avoir généré le conteneur avec lein uberjar, n'utilisez pas java -jar target/your-name.jar, mais utilisez java -jar target/your-name-standalone.jar.

Même chose pour boot.

Questions connexes