「Lein Jar」と「Lein Uberjar」がメインクラスを適切に設定しない
質問
走った lein uberjar
私のプロジェクトでは、対応するJARファイルを作成しました。瓶を実行するときa 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を使用しています
解決
わかりました、私は元の問題を解決しました。それを認めるのはちょっと恥ずかしいですが、このスレッドの完全性のためにそれをしなければならないと思います。私は自分の道と混同されました。 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))
解決策を見て、私が考えなければならない、なぜ私はそれをすぐに書かなかったのか。それは最もシンプルで最も率直な方法です。多分私は休暇が必要です;)。
他のヒント
メイン名スペースに3番目のコンポーネントを追加し、すべてをSRCの下のcomサブディレクトリに移動する必要がありました。
com.explodingdots.core
また、MainをArg Vectorを取得するように宣言しますが、それが異なるものをもたらすかどうかはわかりません。
(declare main)
(defn -main [& args]