2012-11-03 25 views
5

के साथ जावा के बीच सैंडविच क्लोजर एक कक्षा के लिए, मुझे कुछ जेवीएम कोड लिखना होगा, और मैं क्लोजर का उपयोग करने की उम्मीद कर रहा हूं। मुझे सॉफ़्टवेयर स्टैक के निचले भाग के साथ काम करने के लिए मिला, लेकिन मैं इसे ऊपर और नीचे के हिस्से में बैठे जीयूआई परत के बीच काम करने के लिए प्रबंधित नहीं कर सकता। मेरी मुख्य समस्या जावा क्लूआई को मेरी क्लोजर फाइलों को पहचानने के लिए मिल रही है। मैं इसके लिए लीनिंगेन का उपयोग करना चाहता हूं, लेकिन जावा संकलन समाधान इस बातचीत के लिए जिम्मेदार नहीं लगता है। उत्तर here बिल्कुल वही है जो मुझे चाहिए। मुझे समझ में नहीं आता कि कोड कहां रखा जाए और ऐसा (केवल पर्याप्त विवरण नहीं)। क्या किसी के भी पास कोई भी सुझाव है?लीनिंगेन

मैंने plugin बनाने का प्रयास किया, लेकिन ऐसा लगता है कि यह काम नहीं करता है। मुझे पता है कि मेरा मामला निश्चित रूप से समस्याओं के झुकाव पर है, लेकिन एक समाधान कक्षा सेटिंग में क्लोजर का उपयोग करना अधिक आसान होगा।

धन्यवाद!

अधिक विवरण:

मैं एक संकलित Clojure जार का उपयोग कर के साथ बहुत किस्मत नहीं था। मुझे एक (यूघ) स्टेटफुल क्लोजर क्लास बनाने की ज़रूरत है (यानी विधियां स्थैतिक नहीं हो सकती हैं)। मेरी कक्षा के लिए कोड (src/final_project/MyLinkLayer.clj) लग रहा है मेरे project.clj

तरह
(ns final_project.MyLinkLayer 
    (:gen-class)) 

(defn -init[s] (print s)) 
(defn -send [dest data len] (println data)) 
(defn -recv [trans] (println trans)) 
(defn -status [] (println "I am a status!")) 
(defn -command [cmd value] (println (str cmd " with value=" value))) 

(defproject final_project "0.1.0-SNAPSHOT" 
    :description "A simulated MAC layer." 
    :dependencies [[org.clojure/clojure "1.4.0"] 
       [local/classFiles "1"]] 
    :aot [final_project.MyLinkLayer]) 

वर्ग compiles ("lein संकलन") ठीक "लक्ष्य/वर्गों में है/final_project/", लेकिन विधियां दिखाई नहीं देती हैं। मैं जार के माध्यम से कक्षा लोड कर सकता हूं (पैकेज के काम के मेरे प्रोजेक्ट आयात के शीर्ष जावा भाग में मेवेन का उपयोग करके पर्याप्त रूप से पर्याप्त)। मैंने एक्लिप्स के साथ .class फ़ाइल को भी चेक किया, और ऑब्जेक्ट्स से उत्पन्न एकमात्र विधियां हैं। कोई विचार? साथ ही, एक बार जब मैं वास्तव में अपने क्लोजर वर्ग के "राज्यव्यापी" भाग में जाता हूं, तो क्या किसी के पास कोई विचार है? अग्रिम में धन्यवाद।

+0

वे वास्तव में कक्षा में क्लोजर का उपयोग करने देते हैं? अरे, यहां पर वे हमेशा जावा पर जोर देते हैं (अच्छी तरह से निष्पक्ष होने के लिए, अब तक इतनी सारी जेवीएम भाषाएं हैं कि आप वास्तव में कक्षा को शाही गड़बड़ी के बिना उन सभी का उपयोग करने की अनुमति नहीं दे सकते हैं)। – Cubic

+0

हाँ। यह बहुत रोमांचक है, लेकिन चूंकि यह मेरे प्रोफेसर के लिए इतना जोखिम और प्रयोग है, इसलिए मुझे मूल रूप से इसे आसान दिखाना पड़ता है अगर किसी और को इसका उपयोग करने का मौका मिलता है। यही कारण है कि मैं नीचे मेवेन समाधान को अपनाने में संकोच क्यों करता हूं। Leiningen बहुत "अच्छा" है। – kwenholz

उत्तर

2

जब मैं क्लोजर और जावा दोनों का उपयोग करने वाली परियोजनाओं को लिखता हूं, तो मैं आमतौर पर लीनिंगेन के बजाय मेवेन का उपयोग करता हूं - सरल कारणों से कि अधिकांश जावा टूल्स (उदा। ग्रहण) वर्तमान में लीनिंगन को समझने से बेहतर मेवेन को समझते हैं।

नोट प्रमुख विशेषताएं:

clojure-maven-plugin
  • की
    • उपयोग

      यहाँ एक उदाहरण pom.xml कि मैं बहुभाषी Clojure/जावा परियोजनाओं के लिए उपयोग करें क्लोजर स्रोत निर्देशिकाओं की कॉन्फ़िगरेशन को संसाधन के रूप में माना जाना चाहिए - यह सुनिश्चित करता है एस .clj फ़ाइलों को संसाधन के रूप में माना जाता है, उत्पादित किसी भी .jar फ़ाइलों में बंडल किया जाता है और रनटाइम पर गतिशील रूप से लोड किया जा सकता है (यह आपके द्वारा देखी जा रही समस्या को हल कर सकता है जिसे आप अपनी .clj फ़ाइलों को पहचानने में विफल रहे हैं)

    • क्लोजर्स को शामिल करना एक भंडार के रूप में .org - गंभीर क्लोजर विकास के लिए बहुत जरूरी है!
  • +0

    सहायता के लिए धन्यवाद। क्या इस तरह के काम से शुरू करने के लिए कोई अच्छा संसाधन है? आपका pom.xml कुछ समझ में आता है, लेकिन मैं मैवेन में बिल्कुल भी नहीं जानता हूं। क्या आप सीखना शुरू करने के लिए एक अच्छी जगह के बारे में जानते हैं, जल्दी? इस समस्या के आने तक Leiningen भयानक रहा है। । । । – kwenholz

    +0

    आप कमांड लाइन (अधिक जटिल, अधिक शक्तिशाली) या अपने आईडीई एकीकरण का उपयोग करके मेवेन सीख सकते हैं (आसान, हालांकि आपको अधिक उन्नत संचालन के लिए कमांड लाइन में ड्रॉप करने की आवश्यकता हो सकती है)। मैंने व्यक्तिगत रूप से ग्रहण का उपयोग करके आईडीई मार्ग सीखा - जानकारी और ट्यूटोरियल के लिए http://wiki.eclipse.org/Maven_Integration देखें – mikera

    +0

    ठीक है धन्यवाद। मैं ग्रहण का प्रशंसक नहीं हूं, इसलिए मैं कमांड लाइन से कोशिश करूंगा। अगर मैं इसे मेवेन के तहत काम करने के लिए प्राप्त कर सकता हूं (ऐसा लगता है) और अगले कुछ दिनों में लीनिंगेन समाधान काम नहीं कर पा रहा है, तो मैं आपको जवाब के रूप में चिह्नित करूंगा। धन्यवाद! – kwenholz