2012-11-01 15 views
30

मैं जावा और ग्रेडल के साथ एक कंसोल एप्लिकेशन लिख रहा हूं। मैं application plugin का उपयोग कर रहा हूं और आवश्यक फ़ील्ड build.gradle में सही तरीके से कॉन्फ़िगर किया गया है।जावा के साथ कंसोल अनुप्रयोग और

मेरी मुख्य कक्षा में मेरे पास System.in से जुड़ा हुआ है। यहां समस्या है: जब मैं प्रोजेक्ट निर्देशिका में gradle run चलाता हूं, तो पाठक मेरे कंसोल इनपुट की प्रतीक्षा नहीं करता है। BufferedReader#readLine इसके बजाय पहले कॉल पर null लौटाता है। यह व्यवहार मैं क्या कर रहा हूं इसके लिए वांछनीय नहीं है।

समाधान क्या है? क्या ग्रेडल के लिए एक अलग कंसोल एप्लिकेशन प्लगइन है या क्या मुझे अपनी जरूरतों के अनुरूप किसी भी तरह application प्लगइन को ट्विक करने की आवश्यकता है?

+0

4 साल बाद! यदि आप एक विंडोज ओएस चला रहे हैं, तो मैंने पाया है कि सिग्विन टर्मिनल से कार्य को चलाकर यह कष्टप्रद "> बिल्डिंग ..." सामान प्रकट नहीं होता है। लेकिन मुझे यह भी पता चला है कि 'standardInput = System.in' डालने के लिए केवल मेरे लिए काम करता है अगर मैं इसे विशेष रूप से परिभाषित 'टास्क' के अंदर रखता हूं, न कि 'रन' के अंदर। –

उत्तर

54

डिफ़ॉल्ट रूप से आपके ग्रेडल बिल्ड के system.in को रन (JavaExec) कार्य के system.in के साथ तारित नहीं किया जाता है। ,

run{ 
    standardInput = System.in 
} 
+2

धन्यवाद! वह एक बड़ी मदद थी। प्रिंटिंग '> बिल्डिंग>: रन' से बचने के लिए अब कोई तरीका है जब यह अगले इनपुट के लिए उपयोगकर्ता को संकेत देता है? दुर्भाग्य से इस समय नहीं – missingfaktor

+3

। मैंने कुछ समय पहले इसके लिए कोई मुद्दा उठाया है: http://issues.gradle.org/browse/GRADLE-1147 आप इसके लिए वोट दे सकते हैं। –

+0

फिर से धन्यवाद। यह भी करेगा। अपना उत्तर स्वीकार कर रहा है। :) – missingfaktor

-3

संभावना है, समस्या आपके जावा कोड में निहित है। सभी एप्लिकेशन प्लगइन जावा कोड संकलित करता है, और आपके द्वारा निर्दिष्ट मुख्य श्रेणी चलाता है। क्या आप अपने मुख्य वर्ग में कोड पोस्ट कर सकते हैं जिसे आपने एप्लिकेशन प्लगइन (mainClassName) के लिए निर्दिष्ट किया है?

+0

मैंने इंटेलिजे आईडीईए के भीतर भी कोड चलाया। (फ़ाइल पर राइट-क्लिक करके और '। मेन' चलाएं।) यह ठीक काम करता है। – missingfaktor

4

जैसा कि ऊपर कहा

run { 
    standardInput = System.in 
} 

जोड़ सकते हैं और "शांत" मोड में चलाने के लिए -q जोड़ने (> Building > :run होने से बचाने के)

gradle console:run -q 

स्रोत: आप निम्न कर सकते हैं: https://docs.gradle.org/current/userguide/gradle_command_line.html

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