4

lein uberjar在我的项目上运行,它创建了相应的 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[] 爆炸点)
(定义-main[_]
  (让 [ed(新的 explodingdots.core)]
    (.init 编辑)))

我的内容project.clj是:

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

注意:我使用的是 leiningen 1.3.1

4

3 回答 3

5

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

但后来我遇到了另一个问题。找到了主要方法,但我得到了一个

java.lang.IllegalArgumentException:错误数量的参数(0)传递给:core$-main

我尝试将我的主要方法从 Arthur 建议(defn -main [_] ...)(defn -main [& args] ...)那样更改,但没有奏效。为了解决这个问题,我只写(defn -main[]...)了没有参数。

下一个问题是调用(init)from(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[] (爆炸点))

通过查看解决方案,我不得不思考,为什么我不提前写出来。这是最简单、最直接的方式。也许我需要一个假期;)。

于 2010-09-10T07:39:40.413 回答
2

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

com.explodingdots.core

我还声明 main 采用 arg 向量,不确定这是否有所不同:

(declare main) 
(defn -main [& args]    
于 2010-09-09T17:47:46.147 回答
0

我遇到了这个,并通过添加来修复它

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

于 2019-11-18T17:31:50.603 回答