« Pot lein » et « lein uberjar » ne pas fixer la principale classe correctement

StackOverflow https://stackoverflow.com/questions/3677372

  •  01-10-2019
  •  | 
  •  

Question

J'ai couru lein uberjar sur mon projet et il a créé les fichiers jar correspondants. Quand je lance le pot un ClassNotFoundException: explodingdots.core est jeté. J'ai spécifié explodingdot.core comme ma classe principale. J'ai extrait le fichier jar et il n'y avait en effet pas core.class dans le répertoire correspondant. Qu'est-ce que j'oublie?

Je le code suivant dans 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)))

Le contenu de mon project.clj est:

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

Remarque: J'utilise Leiningen 1.3.1

Était-ce utile?

La solution

Ok je résolu mon problème d'origine. Il est un peu embarassant de l'admettre, mais je pense que je dois faire pour être complet de ce fil. Je me suis levé mélangé avec mes chemins. J'ai le même fichier dans un projet Netbeans et dans un projet de Leiningen. Et je modifier le fichier Netbeans. Désolé.

Mais alors j'ai eu un autre problème. La principale méthode est trouvé, mais je reçois un

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

J'ai essayé de changer ma méthode principale de (defn -main [_] ...) à (defn -main [& args] ...) comme Arthur a suggéré, mais cela ne fonctionne pas. Pour résoudre ce que j'ai écrit juste (defn -main[]...) sans args.

Le prochain problème était que l'appel (init) de (main) a donné lieu à une erreur. Je CONTOURNÉS que ne pas appeler (init) du tout, mais d'appeler (exploding-dots) directement à partir (main).

Donc, pour faire tout ce travail mes regards src/explodingdots/core.clj comme

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

En regardant la solution que je dois penser, pourquoi ne pas je vous écris ce droit avant. Il est la plus simple et la plus simple. Peut-être que je besoin de vacances;)

.

Autres conseils

Je devais ajouter un troisième composant à mon espace de nom principal et tout mouvement dans le sous-répertoire com sous src.

com.explodingdots.core

Je déclare également principale de prendre un vecteur arg, pas sûr si cela fait une diference:

(declare main) 
(defn -main [& args]    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top