'lein jar'和'lein uberjar'没有正确设置大班

时间:2010-09-09 14:09:58

标签: jar clojure leiningen

我在项目上运行lein uberjar并创建了相应的jar文件。当我运行jar时,会抛出ClassNotFoundException: explodingdots.core。我指定explodingdot.core作为我的主要课程。我解压缩了jar文件,相应的目录中确实没有core.class。我忘记了什么?

我在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

3 个答案:

答案 0 :(得分:5)

好的,我解决了原来的问题。承认这一点有点令人尴尬,但我认为我必须为了这个线程的完整性而这样做。我和我的路径混在一起。我在Netbeans项目和leiningen项目中拥有相同的文件。我正在编辑Netbeans文件。遗憾。

但后来我又遇到了其他问题。找到了主要方法,但我得到了

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

我尝试改变我的主要方法 像亚瑟建议的那样(defn -main [_] ...)(defn -main [& args] ...),但这不起作用。为了解决这个问题,我只写了(defn -main[]...)而没有args。

下一个问题是从(init)调用(main)会导致错误。除了直接从(init)致电(exploding-dots)之外,我一直没有打电话给(main)

为了让一切正常,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 :(得分:2)

我必须在主名空间中添加第三个组件,并将所有内容移动到src下的com子目录中。

com.explodingdots.core

我还声明main取一个arg向量,不确定是否会产生差异:

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

答案 2 :(得分:0)

我遇到了这个问题,并通过添加对其进行了修正

:gen-class到相应的缺失类。