我跑了 lein uberjar 在我的项目上,它创建了相应的JAR文件。当我运行罐子时 ClassNotFoundException: explodingdots.core 被扔了。我指定了 explodingdot.core 作为我的主要课程。我提取了罐子文件,确实没有 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

有帮助吗?

解决方案

好的,我解决了我的原始问题。承认它有点尴尬,但是我认为我必须为了完整性而这样做。我与自己的道路混在一起。我在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))

通过查看解决方案,我必须思考,为什么我不将其写入前面。这是最简单,最直接的方式。也许我需要一个假期;)。

其他提示

我必须在我的主要名称空间中添加第三个组件,然后将所有内容移至SRC下的COM子目录中。

com.explodingdots.core

我还声明Main采用ARG矢量,不确定这是否有所不同:

(declare main) 
(defn -main [& args]    
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top