"لين جرة" و "لين أوبرجار" لا يضعون الفئة الرئيسية بشكل صحيح

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

  •  01-10-2019
  •  | 
  •  

سؤال

ركضت lein uberjar في مشروعي وإنشاء ملفات جرة المقابلة. عندما أدير الجرة أ ClassNotFoundException: explodingdots.core هذا خطئ. لقد حددت explodingdot.core كصفتي الرئيسية. لقد استخرجت ملف الجرة ولم يكن هناك بالفعل لا 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)

ملحوظة: أنا أستخدم Lininingen 1.3.1

هل كانت مفيدة؟

المحلول

حسنًا ، لقد حلت مشكلتي الأصلية. إنه لأمر محرج أن أعترف بذلك ، لكنني أعتقد أنني يجب أن أفعل ذلك من أجل اكتمال هذا الموضوع. لقد اختلطت مع مساراتي. لدي نفس الملف ضمن مشروع NetBeans وفي مشروع Lininingen. وكنت أقوم بتحرير ملف 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))

من خلال النظر إلى الحل الذي يجب أن أفكر فيه ، لماذا لم أكتب ذلك إلى الأمام. إنها الطريقة الأكثر بساطة والأكثر مستقيمًا إلى الأمام. ربما أحتاج إلى إجازة ؛).

نصائح أخرى

اضطررت إلى إضافة مكون ثالث إلى مساحة اسمي الرئيسية ونقل كل شيء إلى دليل COM تحت SRC.

com.explodingdots.core

أعلنت أيضًا أن تأخذ ناقل Arg ، لست متأكدًا مما إذا كان ذلك يجعل الاختلاف:

(declare main) 
(defn -main [& args]    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top