java - जावा जार में डुप्लिकेट कक्षाएं होने का क्या अर्थ है?




class ant jar duplicates (5)

एक और जवाब जो मुझे यहां पर चर्चा नहीं हुआ है, वह यह है कि यदि आप अपने जार, अर्स, अप्क्स पर हस्ताक्षर करने की योजना बनाते हैं तो यह संकेतक शिकायत करेगा कि आपके पास डुप्लिकेट प्रविष्टियां हैं

jarsigner: unable to sign jar: java.util.zip.ZipException: duplicate entry: com/foo/bar/baz.java

मैं चींटी का उपयोग कर जावा जार फ़ाइल का निर्माण कर रहा हूँ मुझे "ज़िपफाइलसेट src =" xxx.jar "" zipfileset src = "yyy.jar" का उपयोग करके अतिरिक्त जार शामिल करने की आवश्यकता है और दोनों xxx.jar और yyy.jar में समान पूर्ण-योग्य श्रेणी के नाम के साथ वर्ग हैं। इसलिए परिणामी जार फ़ाइल में डुप्लिकेट वर्ग नाम हैं। डुप्लिकेट होने के संभावित निहितार्थ क्या हैं?

धन्यवाद।


क्या मतलब डुप्लिकेट? यह स्पष्ट है कि आपके पास एक ही पैकेज में एक ही नाम के साथ 2 कक्षाएं नहीं हो सकतीं (यहां तक ​​कि आपका प्रोजेक्ट संकलित नहीं होगा), लेकिन अगर आपको लगता है कि आपके पास 2 वर्ग अलग-अलग पैकेजों में समान नाम के साथ "ठीक है" है।


मैं डेव से सहमत हूँ

क्या आप उन जगहों से अलग कर सकते हैं, जो उन्हें बताए गए नुकसान से बचने के लिए है?


सामान्य तौर पर इस स्थिति में अत्यधिक गैर अनुशंसित है और इसे टाला जाना चाहिए।

जावा में जार सिर्फ आपकी कक्षा फ़ाइलों के लिए कंटेनर हैं। जावा उन क्लासलोडर्स का उपयोग करता है जो वहां से क्लासपाथ और लोड क्लास फाइलों को देखते हैं। इसलिए यदि आपके पास 2 जार एजर और बीजर हैं जिनके पास एक ही कक्षा एक्सवाय फू है, तो कक्षा में प्रथम श्रेणी में आने वाला जार लोड किया जाएगा। इसलिए, यदि आपका क्लासपाथ एजर है, बीजर (इस ऑर्डर में) एजर से क्लास फू को रनटाइम में इस्तेमाल किया जाएगा। यह असंगतता मेरे अनुभव से बहुत कठिन टू-फिक्स कीड़े पैदा कर सकती है


I like the idea to use an almost correct method on some of the input. Here is a version with a higher "offset". The code seems to work and passes my simple test case.

Just replace your:

if(n < 410881L){...}

code with this one:

if (n < 11043908100L) {
    //John Carmack hack, converted to Java.
    // See: http://www.codemaestro.com/reviews/9
    int i;
    float x2, y;

    x2 = n * 0.5F;
    y = n;
    i = Float.floatToRawIntBits(y);
    //using the magic number from 
    //http://www.lomont.org/Math/Papers/2003/InvSqrt.pdf
    //since it more accurate
    i = 0x5f375a86 - (i >> 1);
    y = Float.intBitsToFloat(i);
    y = y * (1.5F - (x2 * y * y));
    y = y * (1.5F - (x2 * y * y)); //Newton iteration, more accurate

    sqrt = Math.round(1.0F / y);
} else {
    //Carmack hack gives incorrect answer for n >= 11043908100.
    sqrt = (long) Math.sqrt(n);
}




java class ant jar duplicates