2009-10-14 39 views
17

Tengo un proyecto de clojure que utiliza el ingenioso motor de juego 2D que estoy tratando de ejecutar como un archivo jar ejecutable. Creé el proyecto tanto en Netbeans como en Eclipse y no tuve suerte exportándolos a un formato ejecutable. Sigue dando el error no pudo encontrar la clase principal, seguido de dar mi clase principal. He intentado editar el archivo de manifiesto cambiando el nombre con la esperanza de que lo encuentre, pero hasta ahora no hay suerte.¿Cómo crear un archivo jar ejecutable desde un proyecto clojure?

Se ejecuta en el entorno de desarrollo, pero no fuera de él.

Respuesta

13

Ha pasado un tiempo desde que publiqué esta pregunta y pensé que mantendría lo que he encontrado desde entonces para cualquiera que necesite esta pregunta respondió.

Ahora uso Leiningen para administrar mis proyectos, aunque he empezado a jugar con cljr que es un administrador de repuestos y paquetes que lo complementa. Cualquiera de estos hace que sea mucho más simple generar un archivo jar ejecutable.

Tomando Leiningen como ejemplo, configúralo usando las instrucciones en el sitio y luego llama al lein new en tu área de trabajo. Esto creará una carpeta para alojar sus proyectos, así como una subcarpeta para su fuente y probará un archivo léame y un archivo project.clj.

Edite project.clj con las dependencias que va a utilizar. Las dependencias de desarrollador son dependencias que necesita exclusivamente para el desarrollo, como swank-clojure, como se muestra en el ejemplo a continuación.

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

me parece Swank-clojure útil como usted puede entonces escribir lein swank para iniciar una instancia Swank que se puede conectar a través de emacs.

: main define qué namespace contiene la función -main.

Llamando lein uberjar creará un jar independiente que se ejecutará.

¡Espero que ayude a cualquiera que haya tenido mi problema!

+0

'Error: No se pudo encontrar o cargar la clase principal [prueba.core]'. He incluido ': main' y su valor correspondiente, y tengo una función' -main' que es pública en ese espacio de nombres. ¿Alguna idea sobre lo que podría estar yendo mal? – m0skit0

+0

Hola @ m0skit0, ha pasado un tiempo desde que escribí esto. ¿Ha estructurado sus directorios de forma adecuada? Con eso me refiero es su 'project.clj' en una carpeta que contiene' src' que contiene 'prueba' que contiene' core.clj'? ¿Usó 'lein new ' y luego editó el archivo 'core.clj' creado? Si no, ¿podría explicar lo que ha hecho con la mayor claridad posible? – toofarsideways

+0

La estructura del proyecto es correcta porque fue creada por Leiningen. Finalmente lo hice funcionar, usando la siguiente sintaxis ': main root.scriptlauncher: aot [root.scriptlauncher]' para el 'defproject'. – m0skit0

3

Tuve que agregar clojure.jar y clojure-contrib.jar como una "dependencia" al proyecto para hacer que se incluya en el contenedor. una vez que obtuve eso, pude ejecutar el jar resultante. Tenga en cuenta que Netbeans tiene su propio clojure.jar que se usa para ejecutar el plugin y no necesita ser el mismo clojure.jar que usa su programa. Netbeans tiene un menú para agregar bibliotecas. Necesitarás agregar clojure [-contrib] .jar a las librerías de compilación y ejecución

+0

He intentado agregar eso como biblioteca de tiempo de ejecución y de ejecución para el proyecto, pero hasta ahora no he tenido suerte. – toofarsideways

Cuestiones relacionadas