我在项目上运行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
答案 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
到相应的缺失类。