Noir

2012-12-25 32 views
11

का उपयोग कर क्लोजर में वेब ऐप चलाने के दौरान कोई मुख्य नामस्थान त्रुटि नहीं, मैं नोयर का उपयोग कर रहा हूं।Noir

यह मेरा project.clj

(defproject noir "1.0.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :dependencies [[org.clojure/clojure "1.3.0"]]) 

lein रन मुझे इस त्रुटि देता है:

No :main namespace specified in project.clj. 

कहाँ मैं गलत हो रहा हूँ?

अब, अगर मैं जोड़ें: मुख्य मेरी-website.server project.clj लिए, मैं इस त्रुटि मिलती है:

सूत्र में अपवाद "मुख्य" java.lang.RuntimeException: java.lang.ClassNotFoundException: मेरी- website.server

at clojure.lang.Util.runtimeException(Util.java:165) 
    at clojure.lang.RT.classForName(RT.java:2017) 
    at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:206) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92) 
    at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:225) 
    at user$eval29.invoke(NO_SOURCE_FILE:1) 
    at clojure.lang.Compiler.eval(Compiler.java:6465) 
    at clojure.lang.Compiler.eval(Compiler.java:6455) 
    at clojure.lang.Compiler.eval(Compiler.java:6431) 
    at clojure.core$eval.invoke(core.clj:2795) 
    at clojure.main$eval_opt.invoke(main.clj:296) 
    at clojure.main$initialize.invoke(main.clj:315) 
    at clojure.main$null_opt.invoke(main.clj:348) 
    at clojure.main$main.doInvoke(main.clj:426) 
    at clojure.lang.RestFn.invoke(RestFn.java:421) 
    at clojure.lang.Var.invoke(Var.java:405) 
    at clojure.lang.AFn.applyToHelper(AFn.java:163) 
    at clojure.lang.Var.applyTo(Var.java:518) 
    at clojure.main.main(main.java:37) 
Caused by: java.lang.ClassNotFoundException: my-website.server 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:61) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at clojure.lang.RT.classForName(RT.java:2013) 
    ... 21 more 
+0

ऐसा लगता है कि आपके पास मेरी वेबसाइट.server में एक -इन फ़ंक्शन नहीं है। आपने परियोजना कैसे बनाई? यदि आप लीन नोयर नई मेरी वेबसाइट करते हैं तो यह project.clj सेट करता है और server.clj –

+1

में डिफ़ॉल्ट-मुख्य फ़ंक्शन बनाता है जो मैंने किया था। lein noir new appname – Hick

उत्तर

9

समस्या यह है कि lein जहाँ आपके -main समारोह का पता लगाने का पता नहीं है है:

सबसे पहले, आप को चलाने के लिए .clj फ़ाइल बनाने जाएगा। आप ns मैक्रो का उपयोग करके इसका नामस्थान निर्दिष्ट कर सकते हैं। तो फिर तुम इस नाम स्थान में -main समारोह को परिभाषित करेगा:

(ns my-website.server 
    (:require [noir.server :as server] 
      [noir.core :refer [defpage]])) 

(defpage "/welcome" [] 
    "Welcome to Noir!") 

(defn -main 
    [& args] 
    (server/start 4000)) 

तो आप कॉन्फ़िगर करेगा अपने project.clj:

(defproject my-website "0.1.0-SNAPSHOT" 
      :description "..." 
      :dependencies [[org.clojure/clojure "1.4.0"] 
          [noir "1.2.2"]] 
      :main my-website.server) 

[noir "1.2.2"] नॉई के नवीनतम स्थिर संस्करण है। इसका उपयोग करना सबसे अच्छा है।

इस फ़ाइल को अपनी स्रोत निर्देशिका में डालने के लिए मत भूलना। Bu प्रोजेक्ट रूट में ./src dir डिफ़ॉल्ट करें। इसलिए, यदि आपके नेमस्पेस को my-website.server कहा जाता है तो लीन ./src/my-website/server.clj फ़ाइल में (या ./src/my_website/server.clj में, मुझे यकीन नहीं है) में इसकी तलाश होगी।

अब lein run नामस्थान my-website.server दर्ज करने के लिए और फिर (-main) फ़ंक्शन चलाने के लिए लीन का कारण बन जाएगा।

अधिक जानकारी के लिए sample lein project देखें।

आप lein noir template का उपयोग करके अपने नोयर प्रोजेक्ट के लिए project.clj भी उत्पन्न कर सकते हैं।

+1

यह .clj फ़ाइल को क्या कहा जाना चाहिए? (क्षमा करें, बस शुरू करें और इसे बाहर निकालने के लिए प्रलेखन की एक चेतावनी है।) – Hick

+0

मैंने इस जानकारी को जोड़ने के लिए अभी अपना जवाब संपादित किया है। –

+0

क्या वह था। वर्तमान त्रुटि: थ्रेड में मुख्य "java.lang.RuntimeException: प्रतीक को हल करने में असमर्थ: इस संदर्भ में defpartial, संकलन: (noir/content/defaults.clj: 8) – Hick

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^