2009-10-14 7 views
17

Ho un progetto clojure che utilizza il sdolcinato motore di gioco 2D che sto cercando di eseguire come file jar eseguibile. Ho creato il progetto sia in Netbeans che in Eclipse e non ho avuto la fortuna di esportarli in un formato eseguibile. Continua a dare l'errore non riuscendo a trovare la classe principale, seguita dando la mia classe principale. Ho provato a modificare il file manifest cambiando il nome nella speranza che lo troverà ma senza fortuna finora.Creazione di un file jar eseguibile da un progetto clojure?

Viene eseguito nell'ambiente di sviluppo, ma non al di fuori di esso.

risposta

13

È passato un po 'di tempo da quando ho postato questa domanda e ho pensato che avrei mantenuto quello che ho trovato da allora per chiunque abbia bisogno questa domanda ha risposto.

Ora utilizzo Leiningen per gestire i miei progetti anche se ho iniziato a giocare con cljr che è un repl e gestore di pacchetti che lo integra. Ognuno di questi rende molto più semplice la creazione di un file jar eseguibile.

Prendendo Leiningen come esempio, configurarlo utilizzando le istruzioni sul sito e quindi chiamare lein new nell'area di lavoro. Questo creerà una cartella per ospitare i tuoi progetti e una sottocartella per la tua fonte e testerà un file readme e un file project.clj.

Modificare project.clj con le dipendenze che verranno utilizzate. Le dipendenze degli sviluppatori sono dipendenze di cui hai bisogno esclusivamente per lo sviluppo, come ad esempio lo swank-clojure mostrato nell'esempio seguente.

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

trovo Swank-clojure utile come si può digitare lein swank per avviare un'istanza Swank quale è possibile collegare a via emacs.

: main definisce quale spazio dei nomi contiene la funzione -main.

La chiamata lein uberjar creerà un jar autonomo che verrà quindi eseguito.

Speriamo che questo aiuti chiunque abbia avuto il mio problema!

+0

'Errore: impossibile trovare o caricare la classe principale [prueba.core]'. Ho incluso ': main' e il suo valore corrispondente, e ho una funzione' -main' che è pubblica in quel namespace. Qualche idea su cosa potrebbe andare storto? – m0skit0

+0

Ciao @ m0skit0, è da un po 'che non scrivo questo. Hai strutturato in modo appropriato le tue directory? Con ciò intendo il tuo 'project.clj' in una cartella contenente' src' contenente 'prueba' contenente' core.clj'? Hai usato 'lein new ' e poi hai modificato il file 'core.clj' creato? In caso contrario, potresti spiegare cosa hai fatto nel modo più chiaro possibile? – toofarsideways

+0

La struttura del progetto è corretta perché è stata creata da Leiningen. Finalmente ho funzionato, usando la seguente sintassi ': root root.scriptlauncher: aot [root.scriptlauncher]' per 'defproject'. – m0skit0

3

Ho dovuto aggiungere clojure.jar e clojure-contrib.jar come "dipendenza" al progetto per far sì che fosse incluso nel contenitore. una volta ottenuto che ero in grado di eseguire il vaso risultante. Tieni presente che Netbeans ha il proprio clojure.jar che viene utilizzato per eseguire il plug-in autonomamente e non è necessario che sia lo stesso clojure.jar utilizzato dal programma. Netbeans ha un menu per aggiungere le librerie. Dovrai aggiungere clojure [-contrib] .jar alle librerie di build ed esegui

+0

Ho provato ad aggiungerlo sia come libreria di tempo di compilazione che di runtime al progetto, ma finora non ho avuto fortuna. – toofarsideways