Domanda

Mi sono imbattuto lein uberjar sul mio progetto e ha creato i file jar corrispondenti. Quando eseguo il vaso è gettato un ClassNotFoundException: explodingdots.core. Ho specificato explodingdot.core come la mia classe principale. Ho estratto il file jar e non c'era infatti alcun core.class nella directory corrispondente. Quello che ho dimenticato?

Ho il seguente codice nel 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)))

Il contenuto della mia project.clj è:

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

Nota: Sto usando Leiningen 1.3.1

È stato utile?

Soluzione

Ok ho risolto il mio problema originale. E 'sorta di imbarazzante ammetterlo, ma penso che devo farlo per ragioni di completezza di questa discussione. Mi alzai mescolato con i miei sentieri. Ho lo stesso file all'interno di un progetto Netbeans e in un progetto di Leiningen. E io ero la modifica del file Netbeans. Siamo spiacenti.

Ma poi ho avuto un altro problema. Il metodo principale si trova ma ottengo un

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

Ho provato a cambiare il mio metodo principale da (defn -main [_] ...) a (defn -main [& args] ...) come Arthur ha suggerito, ma che non ha funzionato. Per risolvere questo problema ho scritto appena (defn -main[]...) senza args.

Il problema successivo è stato quello di chiamare (init) da (main) ha provocato un errore. Ho lavorato in giro che, non chiamando (init) a tutti, ma chiamando (exploding-dots) direttamente da (main).

Quindi, per far funzionare tutto il mio aspetto src/explodingdots/core.clj come

(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))

Per guardando la soluzione devo pensare, perché non mi scrivere che avanti a destra. E 'il più semplice e più modo dritto in avanti. Forse ho bisogno di una vacanza;)

.

Altri suggerimenti

ho dovuto aggiungere un terzo componente per il mio principale spazio nome e spostare tutto nella sottodirectory com sotto src.

com.explodingdots.core

Dichiaro inoltre principale di prendere un vettore arg, non so se questo fa la diference:

(declare main) 
(defn -main [& args]    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top