2009-10-14 22 views
17

Mam projekt clojure, który używa zręczny silnik gry 2d, który próbuję uruchomić jako plik wykonywalny jar. Stworzyłem projekt zarówno w Netbeans, jak i Eclipse i nie miałem szczęścia, eksportując je do formatu wykonywalnego. Powoduje, że błąd nie może znaleźć głównej klasy, po której następuje moja główna klasa. Próbowałem edytować plik manifestu, zmieniając nazwę w nadziei, że go znajdzie, ale niestety nie ma szczęścia.Tworzenie pliku wykonywalnego jar z projektu clojure?

Działa w środowisku programistycznym, ale nie poza nim.

Odpowiedz

13

Minęło trochę czasu, odkąd zamieściłem to pytanie i pomyślałem, że odstąpię od tego, co znalazłem, ponieważ dla każdego, kto potrzebuje to pytanie odpowiedziało.

Teraz używam Leiningen do zarządzania moimi projektami, chociaż zacząłem grać z cljr, który jest repliką i menedżerem pakietów, który je uzupełnia. Każda z tych opcji znacznie ułatwia generowanie działającego pliku jar.

Wykonanie Leiningena jako przykładu należy przeprowadzić za pomocą instrukcji na stronie, a następnie zadzwonić pod numer lein new w swoim obszarze roboczym. Spowoduje to utworzenie folderu do przechowywania projektów, a także podfolderów dla źródła i przetestuje plik readme i plik project.clj.

Edytuj plik project.clj za pomocą zależności, których będziesz używać. Dev-dependencies są zależnościami, których potrzebujesz tylko do rozwoju, takich jak swank-clojure pokazane w poniższym przykładzie.

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

znajdę Swank-clojure użyteczne, jak można następnie wpisz lein swank rozpocząć wystąpienie Swank, które można podłączyć do urządzeń emacs.

: main definiuje, która przestrzeń nazw zawiera funkcję -main.

Wywołanie lein uberjar utworzy samodzielny słoik, który następnie zostanie uruchomiony.

Mam nadzieję, że pomoże każdemu, kto miał mój problem!

+0

'Błąd: Nie można znaleźć lub wczytać głównej klasy [prueba.core]'. Zawarłem ': main' i odpowiadającą mu wartość, i mam funkcję' -main', która jest publiczna w tej przestrzeni nazw. Masz pojęcie, co może być nie tak? – m0skit0

+0

Hi @ m0skit0, minęło trochę czasu, odkąd to napisałem. Czy w uporządkowany sposób uporządkowałeś swoje katalogi? Mam przez to na myśli twoje 'project.clj' w folderze zawierającym' src' zawierające 'prueba' zawierający' core.clj'? Czy użyłeś 'lein new ', a następnie edytujesz utworzony plik 'core.clj'? Jeśli nie, czy możesz wyjaśnić, co zrobiłeś tak wyraźnie, jak to możliwe? – toofarsideways

+0

Struktura projektu jest poprawna, ponieważ została stworzona przez Leiningen. W końcu udało mi się go uruchomić, używając następującej składni ': main root.scriptlauncher: aot [root.scriptlauncher]' dla 'defproject'. – m0skit0

3

Musiałem dodać clojure.jar i clojure-contrib.jar jako "zależność" do projektu, aby spowodować, że będzie on zawarty w słoiku. gdy już to zrobiłem, udało mi się uruchomić wynikowy słoik. Należy pamiętać, że Netbeans ma swój własny plik clojure.jar, który jest używany do uruchamiania wtyczki samego siebie i nie musi to być ten sam plik clojure.jar, z którego korzysta twój program. Netbeans ma menu do dodawania bibliotek. Będziesz musiał dodać clojure [-contrib] .jar zarówno do bibliotek kompilacji, jak i uruchamiania

+0

Próbowałem dodać to jako bibliotekę czasu kompilacji i czasu pracy do projektu, ale bez powodzenia. – toofarsideways

Powiązane problemy