2016-01-16 15 views
6

मैं कोटलिन Vert.x भाषा समर्थन मॉड्यूल बनाने की कोशिश कर रहा हूं और मुझे कोटलिन फ़ाइलों को संकलित करने और ClassLoader के साथ परिणामों को लोड करने का एक तरीका चाहिए। मैंने kotlin-compiler लाइब्रेरी का उपयोग करने का प्रयास किया है और K2JVMCompiler कक्षा मिली है, लेकिन ऐसा लगता है कि यह exec विधि के साथ केवल कमांड-लाइन-शैली तर्कों का समर्थन करता है। क्या रनटाइम में कोटलिन फ़ाइल को संकलित करने का कोई तरीका है (संभावित रूप से .class फ़ाइलों को सहेजने और पढ़ने के बिना) और तुरंत जेनरेट की गई कक्षाएं लोड करें? (Groovy की तरह है।) यदि नहीं, तो क्या आपके पास कोई उपयोगी कंपाइलर तर्क सुझाव या बहुत अधिक सलाह है?रनटाइम में कोटलिन कोड को संकलित और उपयोग कैसे करें?

+0

यह वर्टेक्स 2 के लिए है? वर्टेक्स 3 के लिए आप ऐसा कुछ नहीं करेंगे। –

+0

@ जेसन मॉनार्ड, मुझे पूरा यकीन है कि यह Vert.x 3 है: https://github.com/vert-x3/vertx-lang-groovy/blob/master/src/main/groovy/io/vertx/lang/ groovy/groovyVerticleFactory.groovy मुझे पता है कि आप पूरी तरह से .class फ़ाइलों का उपयोग कर सकते हैं और सामान्य कोटलिन संकलन पर भरोसा कर सकते हैं, लेकिन यदि आप सादा छोड़ सकते हैं तो यह बहुत लचीला होगा। कोटलिन फाइलें और Vert.x यह जान लेंगे कि इसे कैसे चलाया जाए। मैं अभी भी ढांचे के लिए नया हूं (बस इसे मिला), तो शायद मैं सादे Vert.x पुस्तकालयों (और एम्बेडेड Vert.x) का उपयोग कर समाप्त हो जाएगा और देखें कि यह कैसे चला जाता है। – JustACluelessNewbie

+0

मुझे लगता है कि यह एक एक्सवाई समस्या (http://xyproblem.info/) है, इसलिए मैंने जो जवाब दिया है, उसका उत्तर दिया गया है यदि आपने वाई –

उत्तर

2

यह XY Problem जैसा लगता है। आप जानना चाहते हैं कि कोटलिन को फ्लाई पर कैसे संकलित करना है ताकि आप संकलित कोड के बजाय कोटलिन स्रोत फ़ाइलों से चलकर Vert.x का अधिक आसानी से उपयोग कर सकें। लेकिन वास्तव में Vert.x उपयोग के लिए अनुशंसित पथ कोड का एक साधारण बिट बनाना है जो आपके ऊर्ध्वाधर को संकलित कोड के भीतर तैनात करता है।

सवाल में, भाषा समर्थन के लिए अपने लिंक पथ "vertx.io/ vertx2 /language_support.html" में Vert.x 2 कहते हैं; जो अब Vert.x 3 में किया गया है उससे अलग है। मुझे लगता है कि आप दो विचारों को विलय कर रहे हैं। सबसे पहले कि Vert.x 3 चाहता है कि आप स्रोत से जावा/कोटलिन फ़ाइलों को चलाएं (यह वास्तव में नहीं है; वह एक वर्ट.एक्स 2 चीज थी जिसे वे संकलित भाषाओं) से दूर ले गए थे, और दूसरा आपको कस्टम भाषा समर्थन की आवश्यकता है (आप नहीं हैं)।

आपको संकलित कोड चलाकर Vert.x 3 का उपयोग करने का प्रयास करना चाहिए। ऐसा करने के लिए, अपनी कक्षाएं बनाएं और अपना खुद का main() चलाएं जो deploys a verticle programatically है। आपका कोड होगा सरल रूप में:

import io.vertx.core.Vertx 

fun main(args: Array<String>) { 
    val vertx = Vertx.vertx() 
    vertx.deployVerticle(SomeVerticleOfMine()) 
} 

वैकल्पिक रूप से, docs for running and deploying from the command-line कहते हैं:

Vert.x चलाने से पहले फ्लाई पर जावा स्रोत फ़ाइल संकलित कर देगा। यह वास्तव में लंबवत प्रोटोटाइप और डेमो के लिए महान के लिए उपयोगी है। एक मेवेन या ग्रैडल सेट अप करने की आवश्यकता नहीं है पहले जाने के लिए!

और वास्तव में यह वास्तव में प्रोटोटाइप और त्वरित परीक्षण के लिए है, और यह आपके आईडीई को समान करने और संकलित कक्षाओं से चलने से कहीं अधिक तेज़ नहीं है। इसके बाद भी आपके पास आईडीई की डीबगिंग सुविधाएं होती हैं जो असीम रूप से मूल्यवान होती हैं।

Vert.x साथ Kotlin प्रयोग करने के लिए कुछ हेल्पर लाइब्रेरी के लिए, इन विकल्पों को देखने के:

  • Vert.x 3 module for Klutter - मैं लेखक हूँ, मेरी पुस्तकालयों
  • Vert.x 3 helpers for Kotlin में से एक - द्वारा Cy6erGn0m
  • Kovert, a REST framework for Vert.x 3 - मैं लेखक हूं, मेरी पुस्तकालयों में से एक
  • Vert.x nubes - कोटलिन विशिष्ट नहीं है, लेकिन JVM भाषाओं के लिए Vert.x-Web मित्रवत बनाता है।

एक full sample project of running Vert.x + Kovert (विशेष रूप से App class के साथ शुरू) नहीं है। आप कोवर्ट के कोड को वार्म.एक्स को शुरू करने और चलाने के अपने स्वयं के समान काम करने के लिए देख सकते हैं, वादे के साथ या फिर आप चाहें। कोवर्ट के दस्तावेज़ों में starting Vertx और starting a Verticle to use Vert.x-Web के लिए कोड के लिंक हैं, इसलिए आप जितना अधिक नमूना कोड पढ़ सकते हैं। लेकिन यह पूर्ण नमूना को समझने के लिए Injekt (हल्के वजन निर्भरता रजिस्ट्री), Kovenant (वादा लाइब्रेरी), और Klutter configuration injection को समझने में मदद करता है।

अन्य त्वरित नोट, Vert.x में अन्य भाषाओं के लिए कोडेजन समर्थन है, लेकिन चूंकि आप सीधे जावा संस्करण को कॉल कर सकते हैं, इसलिए इसे कोटलिन का समर्थन करने की आवश्यकता नहीं है।

+0

आप सही हैं। प्रलेखन भ्रमित करने वाला है (पुराने तरीकों को नए लोगों के साथ मिलाकर), लेकिन मुझे लगता है कि यह परिपक्व ढांचे की एक आम समस्या है। मैंने आपका जवाब स्वीकार कर लिया क्योंकि यह मेरी विशेष समस्या हल करता है। – JustACluelessNewbie

8

हां, यह संभव है। कोड के उदाहरण के लिए आप Kotlin codegen tests देख सकते हैं जो ऐसा करता है। (ध्यान दें कि यह कोटलिन के स्थिर एपीआई का हिस्सा नहीं है, और अक्सर बदलता रहता है।)

+1

उह, मैं इस एपीआई के साथ संघर्ष कर रहा हूं कि ऑब्जेक्ट का एक उदाहरण शुरू करने का प्रयास करें (मुझे लगता है) जो मुझे करने की ज़रूरत है। 'जेनरेटेड क्लासलोडर' के लिए मुझे 'क्लासफाइल फैक्टरी' की आवश्यकता है। इसे शुरू करने के लिए मैं 'क्लासबिल्डर फ़ैक्टरीज़' बिनरीज़ 'का उपयोग कर रहा हूं और मैं' जेनरेशनस्टेट 'बनाने की कोशिश कर रहा हूं, लेकिन ईमानदारी से - मैं वहां फंस गया हूं। कन्स्ट्रक्टर में 19 चर कुछ ऐसा नहीं है जो आप रोज़ाना मिलते हैं। यह बहुत अच्छा है कि यह सभी 'कोटलिन-कंपाइलर' lib में उपलब्ध है, लेकिन इसे कुछ दस्तावेज की जरुरत है। क्या आप मौजूदा एपीआई का उपयोग कर कोड जनरेशन पर्यावरण स्थापित करने का एक उदाहरण पोस्ट करना चाहते हैं? – JustACluelessNewbie

+0

@yole, कोटली कोडेजन परीक्षणों का लिंक टूटा हुआ है – bennyl

+0

मैंने लिंक अपडेट किया है। – yole

1

कोटलिन 1.1 javax.script (JSR-223) समर्थन के साथ आता है, जिसका अर्थ है कि आप इसे नैशर्न के साथ जावास्क्रिप्ट के समान स्क्रिप्टिंग इंजन के रूप में उपयोग कर सकते हैं।

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