java - मुझे संकलन त्रुटि "org / codehaus / groovy / नियंत्रण / CompilationFailedException" क्यों मिलती है?




ant jasper-reports (5)

JRXML (उदा: - भाषा = "जावा") में लावा को बदलें या अपनी परियोजना के क्लासपैथ में ग्रूवी * .jar जोड़ें।

मैं एक चींटी स्क्रिप्ट और जावा का उपयोग करके अपने जैस्पररपोर्ट्स टेम्पलेट को संकलित करने की कोशिश कर रहा हूं। मुझे यह त्रुटि मिल रही है:

jasper java.lang.NoClassDefFoundError:
org/codehaus/groovy/control/CompilationFailedException

टेम्पलेट में कुछ भी जटिल नहीं है, लेकिन मैं अभी भी संकलन नहीं कर सकता।


आपको अपने टेम्पलेट में language मूल्य जावा में सेट करना होगा। ऐसा करने के दो तरीके हैं:

  1. यदि आप iReport का उपयोग कर रहे हैं , तो अपने रिपोर्ट इंस्पेक्टर में रूट ऑब्जेक्ट का चयन करें (आपकी रिपोर्ट के समान नाम वाला)। फिर गुण विंडो में, भाषा ड्रॉप-डाउन से जावा चुनें।

  2. यदि आप JRXML फ़ाइल में कच्चे मार्क-अप का संपादन कर रहे हैं, तो फ़ाइल से पूरी तरह से language="groovy" हटा दें।

फिर पुनः संयत करने की कोशिश करें - आपको सॉर्ट किया जाना चाहिए। :)


एक अन्य समाधान है कि ग्रूवी-ऑल- {संस्करण} को कॉपी करें। ग्रूवी बाइनरी वितरण से अनुप्रयोग में।


यदि आप TIBCOJaspersoftStudio का उपयोग कर रहे हैं:

  1. नवीनतम ग्रूवी 2.4 डाउनलोड करें। * जार http://groovy-lang.org/download.html
  2. अनपैक करें और इस फ़ाइल को प्राप्त करें ।/groovy-2.4.10/embeddable/groovy-all-2.4.10.jar
  3. जार को ./TIBCOJaspersoftStudio-6.3.1.final/plugins पर रखें
  4. पुराने जार को हटा दें: /TIBCOJaspersoftStudio-6.3.1.final/plugins/groovy-all_2.4.5.jar

दिए गए उत्तरों के पूरक के लिए, निम्नलिखित पर भी ध्यान दें:

public class Test { 
    public static void main(String... args) { 
        Integer a = new Integer(129);
        Integer b = new Integer(129);
        System.out.println(a == b);
    }
}

यह कोड भी प्रिंट करेगा: false

चूंकि उपयोगकर्ता Jay ने स्वीकार किए गए उत्तर के लिए एक टिप्पणी में दावा किया है, ऑब्जेक्ट्स पर ऑपरेटर == का उपयोग करते समय देखभाल की जानी चाहिए, यहां आप जांच कर रहे हैं कि दोनों संदर्भ एक जैसे हैं, जो नहीं है, क्योंकि वे अलग-अलग objets हैं, हालांकि वे प्रतिनिधित्व करते हैं एक ही मूल्य। वस्तुओं की तुलना करने के लिए, आपको इसके बजाए equals विधि का उपयोग करना चाहिए:

Integer a = new Integer(128);
Integer b = new Integer(128);
System.out.println(a.equals(b));

यह प्रिंट करेगा: true

आप पूछ सकते हैं, लेकिन फिर पहली पंक्ति क्यों true मुद्रित हुई?Integer.valueOf विधि के लिए स्रोत कोड की जांच कर, आप निम्न देख सकते हैं:

public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));
}

public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

यदि परम IntegerCache.low (डिफ़ॉल्ट रूप से -128) और IntegerCache.high (न्यूनतम मान 127 के साथ रनटाइम पर गणना) के बीच एक पूर्णांक है तो पूर्व-आवंटित (कैश) ऑब्जेक्ट वापस कर दिया जाता है। तो जब आप पैरामीटर के रूप में 127 का उपयोग करते हैं, तो आपको समान कैश किए गए ऑब्जेक्ट में दो संदर्भ मिल रहे हैं और संदर्भों की तुलना में true रहा true





java ant compilation jasper-reports