2010-09-09 81 views
4

我在我的項目上運行了lein uberjar,它創建了相應的jar文件。當我運行一個ClassNotFoundException: explodingdots.core的jar被拋出。我指定explodingdot.core作爲我的主要課程。我提取了jar文件,並且在相應的目錄中確實沒有core.class。我忘了什麼?'lein jar'和'lein uberjar'沒有正確設置主類

我在src/explodingdots/core.clj

(ns explodingdots.core 
(:import (java.awt Color Dimension Graphics2D AlphaComposite RenderingHints) 
      (java.awt.event ActionListener MouseAdapter WindowAdapter) 
      (javax.swing Timer JPanel JFrame)) 
    (:gen-class)) 

[ ... ] 

(defn -init[] exploding-dots) 
(defn -main[_] 
    (let [ed (new explodingdots.core)] 
    (.init ed))) 

下面的代碼我project.clj內容是:

(defproject explodingdots "0.1" 
    :dependencies [[org.clojure/clojure "1.2.0"] 
       [org.clojure/clojure-contrib "1.2.0"]] 
    :main explodingdots.core) 

注:我使用leiningen 1.3.1

+0

嘗試添加選項:main true:前綴「 - 」到gen-class表單。 – Isaac 2010-09-09 15:25:50

+0

我很確定他不應該那樣做。 – Rayne 2010-09-09 16:11:17

+0

事實上,我通過* remove *'修正了一個與這個非常相似的問題:'main true' – 2011-11-12 18:00:35

回答

5

好吧,我解決我原來的問題。承認它是一種尷尬,但我認爲我必須爲了完成這個線程而做到這一點。我混淆了我的路徑。我在Netbeans項目和leiningen項目中擁有相同的文件。我正在編輯Netbeans文件。抱歉。

但後來我有其他問題。主要方法是找到,但我得到一個

 
java.lang.IllegalArgumentException: Wrong number of args (0) passed to: core$-main 

我試圖改變我的主要方法從 (defn -main [_] ...)(defn -main [& args] ...)像亞瑟建議,但沒有奏效。爲了解決這個問題,我只寫了(defn -main[]...),沒有參數。

接下來的問題是從(main)調用(init)導致錯誤。我周圍的工作,根本不打電話(init),但直接從(main)調用(exploding-dots)

因此,爲了使一切工作,我的src/explodingdots/core.clj看起來像

 
(ns explodingdots.core 
(:import (java.awt Color Dimension Graphics2D AlphaComposite RenderingHints) 
      (java.awt.event ActionListener MouseAdapter WindowAdapter) 
      (javax.swing Timer JPanel JFrame)) 
    (:gen-class)) 

[ ... ] 

(defn -main[] (exploding-dots)) 

通過看解決方案,我不得不思考,爲什麼沒有我寫的正前方。這是最簡單,最直接的方式。也許我需要一個假期;)。

+1

我也遇到了需要一個無參數main方法的問題,謝謝! – Lyle 2011-07-28 14:09:52

2

我不得不將第三個組件添加到我的主名稱空間並將所有內容都移動到src下的com子目錄中。

com.explodingdots.core 

我也聲明主要採取的ARG載體,不知道是否是有性差異:

(declare main) 
(defn -main [& args]