Java.lang.Incomp موافقClassChangeError এর কারণ কী?


218

আমি একটি জাএআর হিসাবে একটি জাভা লাইব্রেরি প্যাকেজিং করছি, এবং java.lang.IncompatibleClassChangeErrorযখন আমি এটি থেকে পদ্ধতিগুলি চালানোর চেষ্টা করি তখন এটি অনেকগুলি নিক্ষেপ করে। এই ত্রুটিগুলি এলোমেলোভাবে উপস্থিত বলে মনে হচ্ছে। কি ধরণের সমস্যা এই ত্রুটি ঘটাতে পারে?


একটি Eclipse প্রজেক্টে যেখানে আমি অ্যাপাচি এফওপি 1.0 এবং বারকোড 4 জে পরীক্ষা করছিলাম সেখানে বারকোড 4 জে নিয়ে আসা অতিরিক্ত লাইব্রেরিগুলি স্পষ্টতই এফওপি দিয়ে আসা ওভাররাইড করছে (কারও কারও উচ্চতর সংস্করণ সংখ্যা ছিল)। আপনি আপনার বিল্ড পাথ / ক্লাসপথে কী রেখেছেন তা খুব সতর্কতার জন্য এটি একটি কেস।
উইভানি

উত্তর:


170

এর অর্থ আপনি ক্লায়েন্ট কোডটি পুনরায় সংবিধান না করে লাইব্রেরিতে কিছু বেমানান বাইনারি পরিবর্তন করেছেন। জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন §13 এ সমস্ত পরিবর্তন বিশদভাবে উল্লেখ করে , staticবেসরকারী, বেসরকারী ক্ষেত্র / পদ্ধতিগুলি staticবিপরীতে পরিবর্তন করে most

নতুন লাইব্রেরির বিপরীতে ক্লায়েন্ট কোডটি পুনরায় কম্পাইল করুন এবং আপনার ভাল হওয়া উচিত।

আপডেট: আপনি যদি কোনও পাবলিক লাইব্রেরি প্রকাশ করেন তবে "বাইনারি ব্যাকওয়ার্ড সামঞ্জস্যতা" হিসাবে পরিচিত যা সংরক্ষণ করার জন্য আপনার যতটা সম্ভব বেমানান বাইনারি পরিবর্তন করা উচিত should একাকীভাবে নির্ভরতা জারগুলি আপডেট করার ফলে অ্যাপ্লিকেশন বা বিল্ডটি ভাঙা উচিত নয়। আপনার যদি বাইনারি পশ্চাদপদ সামঞ্জস্যতা ভঙ্গ করতে হয়, তবে পরিবর্তনটি প্রকাশের আগে প্রধান সংস্করণ সংখ্যা (উদাহরণস্বরূপ 1.xy থেকে 2.0.0 এ) বাড়ানোর পরামর্শ দেওয়া হচ্ছে।


2
কিছু কারণে এখানে বিকাশকারীদের একটি সমস্যা হচ্ছে যেখানে ক্লায়েন্ট কোডটি পুনরায় কম্পাইল করার ফলে সমস্যাটি ঠিক ঠিক সমাধান করা যায় না। কোনও কারণে যদি তারা ফাইলটি যেখানে ঘটে সেখানে এটি সম্পাদনা করে এবং ত্রুটিটি পুনরায় সংকলিত হয় না তবে সেখানে আরও কিছু এলোমেলোভাবে প্রকল্পের অন্য জায়গায় পপ-আপ করবে, যেখানে গ্রন্থাগারটি উল্লেখ করা হয়েছে। আমি কৌতূহল বোধ করি এটি সম্ভবত কী হতে পারে।
জম্বিগুলি

5
আপনি কি একটি ক্লিন বিল্ড (সমস্ত *.classফাইল মুছুন ) এবং পুনরায় সংশোধন করার চেষ্টা করেছেন? সম্পাদনা ফাইলগুলির একই প্রভাব রয়েছে।
নোট করুন

কোনও গতিশীলভাবে উত্পন্ন কোড নেই .... যদি আপনি কোনও জেএসপিকে এমনটি বিবেচনা না করেন। আমরা ক্লাসের ফাইলগুলি মুছে ফেলার চেষ্টা করেছি এবং এটি সাহায্য করবে বলে মনে হচ্ছে না। জঘন্য জিনিসটি হ'ল এটি কেবল আমার জন্য ঘটবে বলে মনে হয় না তবে এটি অন্যান্য বিকাশকারীদের জন্য ঘটে।
জম্বিগুলি

2
আপনি কি নিশ্চিত করতে পারেন যে আপনি যখন ক্লিন বিল্ড করবেন তখন আপনি যে একই জারের সাথে চালাচ্ছেন তার বিপরীতে সংকলন করছেন?
নোট করুন

32 বিট বা bit৪ বিট প্ল্যাটফর্মের সাথে সম্পর্কিত কিছু আছে কি না, আমি কেবলমাত্র bit৪ বিবিট প্ল্যাটফর্মে সম্পাদন করতে একটি ত্রুটি পেয়েছি।
কাউবুয়-পেং

96

আপনার নতুন প্যাকেজড লাইব্রেরি পুরানো সংস্করণ সহ পিছনে বাইনারি সামঞ্জস্যপূর্ণ (বিসি) নয়। এই কারণে গ্রন্থাগারের কিছু ক্লায়েন্ট যা পুনরায় সংকলিত হয় না তার ব্যতিক্রম ছুঁড়ে ফেলতে পারে।

এটি জাভা লাইব্রেরি এপিআই-তে পরিবর্তনের সম্পূর্ণ তালিকা যা গ্রন্থাগারের পুরাতন সংস্করণে নির্মিত ক্লায়েন্টদের জাভা.লাং ফেলে দিতে পারে। বেমানান ক্লাস চ্যাঞ্জেরর যদি তারা কোনও নতুন (যেমন বিসি ভাঙা) চালায়:

  1. চূড়ান্ত নয় এমন ক্ষেত্র স্থির হয়ে ওঠে,
  2. অ-ধ্রুবক ক্ষেত্রটি স্থির হয় না,
  3. ক্লাস ইন্টারফেস হয়ে ওঠে,
  4. ইন্টারফেস ক্লাস হয়ে,
  5. আপনি যদি ক্লাস / ইন্টারফেসে একটি নতুন ক্ষেত্র যোগ করেন (বা নতুন সুপার-ক্লাস / সুপার ইন্টারফেস যুক্ত করেন) তবে ক্লায়েন্ট শ্রেণি সি এর একটি সুপার ইন্টারফেস থেকে একটি স্ট্যাটিক ক্ষেত্র উত্তরাধিকার সূত্রে প্রাপ্ত একটি যুক্ত ক্ষেত্র (একই নামে) আড়াল করতে পারে সি এর সুপার-ক্লাস (খুব বিরল কেস)।

নোট : অনেক আছে অন্যান্য ব্যতিক্রম : অন্যান্য বেমানান পরিবর্তন দ্বারা সৃষ্ট NoSuchFieldError , NoSuchMethodError , IllegalAccessError , InstantiationError , VerifyError , NoClassDefFoundError এবং AbstractMethodError

বিসি সম্পর্কে আরও ভাল কাগজটি হ'ল জিম ডেস রিভিয়ারস দ্বারা লিখিত "বিবর্তিত জাভা-ভিত্তিক এপিআই 2: অ্যাভিভিং এপিআই বাইনারি সামঞ্জস্যতা"

এ জাতীয় পরিবর্তনগুলি সনাক্ত করার জন্য কিছু স্বয়ংক্রিয় সরঞ্জাম রয়েছে :

আপনার লাইব্রেরির জন্য জাপি-কমপ্লায়েন্স-পরীক্ষকের ব্যবহার:

japi-compliance-checker OLD.jar NEW.jar

ক্লিরার সরঞ্জামের ব্যবহার:

java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar

শুভকামনা!


59

যদিও এই উত্তরগুলি সমস্ত সঠিক, সমস্যা সমাধান করা প্রায়শই আরও কঠিন। এটি ক্লাসপথের উপর নির্ভরশীলতার দুটি হালকা ভিন্ন সংস্করণের ফলাফল এবং প্রায়শই হয় ক্লাসপাথে থাকার বা ট্রান্সজিটিভ ক্লোজারের কিছু আমদানি আলাদা হওয়ার তুলনায় মূলত সংকলিত না হয়ে ভিন্ন সুপারক্লাসের কারণে হয় , তবে সাধারণত শ্রেণিতে ইনস্ট্যান্টেশন এবং কনস্ট্রাক্টর অনুরোধ। (সফল ক্লাস লোডিং এবং সিটার আহ্বানের পরে, আপনি পাবেন NoSuchMethodExceptionবা কী করবেন না))

যদি আচরণটি এলোমেলোভাবে উপস্থিত হয়, তবে সম্ভবত কোনও কোডটি প্রথমে আঘাত পেয়েছে তার উপর ভিত্তি করে বহুবিধ প্রোগ্রামের শ্রেণিবদ্ধ বিভিন্ন ট্রানজিটিভ নির্ভরতা।

এগুলি সমাধানের জন্য, -verboseযুক্তি হিসাবে ভিএম চালু করার চেষ্টা করুন , তারপরে ব্যতিক্রম ঘটলে ক্লাসগুলি লোড করা হচ্ছে তা দেখুন। আপনার কিছু অবাক করা তথ্য দেখা উচিত। উদাহরণস্বরূপ, একই নির্ভরতা এবং সংস্করণগুলির একাধিক অনুলিপি থাকা যা আপনি কখনই প্রত্যাশা করেন নি বা আপনি যদি জানতেন যে সেগুলি অন্তর্ভুক্ত করা হচ্ছে।

মাভেনের সাথে সদৃশ জারগুলি সমাধান করা ম্যাভেন-এর উপর নির্ভরতা-নির্ভরতা-প্লাগইন এবং ম্যাভেন-এনফোর্সার-প্লাগইনের সংমিশ্রণে সর্বোত্তমভাবে সম্পন্ন করা হয় (বা এসবিটির ডিপেন্ডেন্সি গ্রাফ প্লাগইন এর পরে, সেই জারগুলি আপনার শীর্ষ-স্তরের পিওএমের একটি অংশে যুক্ত করা বা আমদানি করা নির্ভরতা হিসাবে এসবিটি-র উপাদানসমূহ (সেই নির্ভরতাগুলি সরিয়ে নিতে)।

শুভকামনা!


5
ক্রিয়াপদ যুক্তি আমাকে সাহায্য করতে সাহায্য করেছিল যে কোন জারগুলি সমস্যা দিচ্ছে। ধন্যবাদ
বিরাট কাদারু

6

আমি আরও জানতে পেরেছি যে, জেএনআই ব্যবহার করার সময়, সি ++ থেকে জাভা পদ্ধতি চালু করার সময়, আপনি যদি ভুল ক্রমে নিমন্ত্রিত জাভা পদ্ধতিতে প্যারামিটারগুলি পাস করেন, আপনি যখন তথাকথিত পদ্ধতির অভ্যন্তরের পরামিতিগুলি ব্যবহার করার চেষ্টা করবেন তখন আপনি এই ত্রুটিটি পেয়ে যাবেন (কারণ তারা সঠিক ধরণের হবে না)। আমাকে প্রথমে শঙ্কিত করা হয়েছিল যে আপনি পদ্ধতিটি গ্রহণ করার সময় জেএনআই আপনার জন্য বর্গের স্বাক্ষর যাচাইয়ের অংশ হিসাবে এই চেকিং করে না, তবে আমি ধরে নিয়েছি তারা এই ধরণের চেকিং করেন না কারণ আপনি পলিমারফিক প্যারামিটারগুলি পাস করতে পারেন এবং তাদের অবশ্যই ধরুন আপনি কি করছেন জানেন

সি ++ জেএনআই কোড উদাহরণ:

void invokeFooDoSomething() {
    jobject javaFred = FredFactory::getFred(); // Get a Fred jobject
    jobject javaFoo = FooFactory::getFoo(); // Get a Foo jobject
    jobject javaBar = FooFactory::getBar(); // Get a Bar jobject
    jmethodID methodID = getDoSomethingMethodId() // Get the JNI Method ID


    jniEnv->CallVoidMethod(javaFoo,
                           methodID,
                           javaFred, // Woops!  I switched the Fred and Bar parameters!
                           javaBar);

    // << Insert error handling code here to discover the JNI Exception >>
    //  ... This is where the IncompatibleClassChangeError will show up.
}

জাভা কোড উদাহরণ:

class Bar { ... }

class Fred {
    public int size() { ... }
} 

class Foo {
    public void doSomething(Fred aFred, Bar anotherObject) {
        if (name.size() > 0) { // Will throw a cryptic java.lang.IncompatibleClassChangeError
            // Do some stuff...
        }
    }
}

1
ইঙ্গিতটির জন্য ধন্যবাদ। সরবরাহকৃত ভুল উদাহরণ (এই) সরবরাহ করে জাভা পদ্ধতিতে কল করার সময় আমারও একই সমস্যা ছিল।
sstn

5

আমার একই সমস্যা ছিল এবং পরে আমি বুঝতে পেরেছিলাম যে আমি অ্যাপ্লিকেশনটি জাভা সংস্করণ ১.৪ এ চালিত করছি যখন অ্যাপ্লিকেশনটি version সংস্করণে সংকলিত হয়েছে।

প্রকৃতপক্ষে, ডুপ্লিকেট লাইব্রেরি থাকার কারণ ছিল, একটি ক্লাসপাথের মধ্যে অবস্থিত এবং অন্যটি ক্লাসপথের মধ্যে অবস্থিত একটি জার ফাইলের মধ্যে অন্তর্ভুক্ত রয়েছে।


আপনি কিভাবে এই নীচে পৌঁছেছেন? আমি নিশ্চিত যে আমারও অনুরূপ সমস্যা রয়েছে তবে কোন নির্ভরতা গ্রন্থাগারের নকল করা হচ্ছে তা কীভাবে সনাক্ত করা যায় তার কোনও চিহ্ন নেই।
beterthanLive

@ বেটারথানলাইফ এমন একটি স্ক্রিপ্ট লিখুন যা নকল করা ক্লাসগুলি অনুসন্ধান করার জন্য সমস্ত জার ফাইলের ভিতরে অনুসন্ধান করে (তাদের পূর্ণ-যোগ্য নাম, অর্থাত প্যাকেজের নাম সহ) অনুসন্ধান করুন :)
ইঞ্জিঃ ফুয়েড

ঠিক আছে, নেটবিয়ান এবং মাভেন-শেড ব্যবহার করে আমি মনে করি যে সমস্ত ক্লাসের নকল করা হচ্ছে এবং তারা যে জারের ফাইলগুলি বাস করছে সেগুলি আমি দেখতে পাচ্ছি these আমার নির্ভরতা দ্বারা অন্তর্ভুক্ত করা। প্রতিটি নির্ভরতার পম ফাইলের মধ্যে না গিয়ে কোন নির্ভরতা তাদের অন্তর্ভুক্ত করছে তা খুঁজে পাওয়ার কোনও সহজ উপায় কী? (দয়া করে আমার কৃপণতা ক্ষমা করুন, আমি জাভা কুমারী!)
beterthanLive

@ বেটারথ্যানলাইফ বেটার সে সম্পর্কে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন :)
ইঞ্জিঃফুড

গ্রেড নির্ভরতা গ্রাফ (./gradlew: <নাম>: নির্ভরতা) দেখে আমি একটি সদৃশ জার পেয়েছি। সুতরাং আমি অপরাধীর সন্ধান পেয়েছি যা এই প্রকল্পের মধ্যে পুরানো সংস্করণটি আকর্ষণ করেছিল।
nyx

1

অন্য একটি পরিস্থিতি যেখানে এই ত্রুটিটি উপস্থিত হতে পারে তা হ'ল এমা কোড কভারেজ।

ইন্টারফেসে কোনও অবজেক্ট বরাদ্দ করার সময় এটি ঘটে। আমি অনুমান করি যে এটির সাথে অবজেক্টটি চালিত হওয়ার সাথে বাইনারি সামঞ্জস্যপূর্ণ নয় to

http://sourceforge.net/tracker/?func=detail&aid=3178921&group_id=177969&atid=883351

ভাগ্যক্রমে কোবার্টুরার সাথে এই সমস্যাটি ঘটে না, তাই আমি আমার pom.xML এর রিপোর্টিং প্লাগইনগুলিতে কোবার্টুরা-মাভেন-প্লাগইন যুক্ত করেছি


1

গ্লাস ফিশের সাথে যুদ্ধকে অপ্রকাশিত ও পুনরায় প্রচার করার সময় আমি এই সমস্যার মুখোমুখি হয়েছি। আমার ক্লাস কাঠামোটি এরকম ছিল,

public interface A{
}

public class AImpl implements A{
}

এবং এটিতে পরিবর্তন করা হয়েছিল

public abstract class A{
}

public class AImpl extends A{
}

ডোমেনটি থামানো এবং পুনরায় চালু করার পরে, এটি দুর্দান্ত কাজ করেছে। আমি গ্লাস ফিশ ব্যবহার করছিলাম 3.1.43


1

আমার কাছে একটি ওয়েব অ্যাপ্লিকেশন রয়েছে যা আমার স্থানীয় মেশিনের টমক্যাট (8.0.20) এ পুরোপুরি সূক্ষ্ম করে। যাইহোক, আমি যখন এটিকে qa পরিবেশে রাখি (টমক্যাট - 8.0.20), এটি আমাকে ইনপোসিটিভ ক্লাসচেনজির দিতে থাকে এবং এটি অভিযোগ করে যে আমি একটি ইন্টারফেসে প্রসারিত করছি। এই ইন্টারফেসটি একটি বিমূর্ত শ্রেণিতে পরিবর্তন করা হয়েছিল। এবং আমি পিতামাতা এবং শিশুদের ক্লাসগুলি সংকলন করেছি এবং এখনও আমি একই সমস্যাটি পেতে থাকি। অবশেষে, আমি ডিবাগ করতে চেয়েছিলাম, তাই, আমি পিতামাতার সংস্করণটি x.0.1-SNAPSHOT এ পরিবর্তন করেছি এবং তারপরে সবকিছু সংকলন করেছি এবং এখন এটি কাজ করছে। এখানে প্রদত্ত উত্তরগুলি অনুসরণ করার পরে যদি কেউ এখনও সমস্যাটি দেখছে তবে অনুগ্রহ করে আপনার pom.xML এর সংস্করণগুলি সঠিক কিনা তা নিশ্চিত হন। এটি কাজ করে কিনা তা দেখতে সংস্করণগুলি পরিবর্তন করুন। যদি তা হয় তবে সংস্করণ সমস্যাটি ঠিক করুন।


1

আমার উত্তর, আমি বিশ্বাস করি, ইন্টেলিজ সুনির্দিষ্ট হবে।

আমি পরিষ্কার পুনর্নির্মাণ করেছি, এমনকি "আউট" এবং "টার্গেট" ডায়ারগুলিকে ম্যানুয়ালি মুছে ফেলতে পারি। ইন্টেলিজের একটি "অবৈধ ক্যাশে এবং পুনরায় চালু" রয়েছে, যা কখনও কখনও বিজোড় ত্রুটিগুলি পরিষ্কার করে। এবার কাজ হয়নি। নির্ভরতা সংস্করণগুলি প্রকল্পের সেটিংস-> মডিউল মেনুতে সমস্ত সঠিক দেখাচ্ছে।

চূড়ান্ত উত্তরটি ছিল আমার স্থানীয় মেভেন রেপো থেকে আমার সমস্যার নির্ভরতা ম্যানুয়ালি মুছে ফেলা। বাউন্সিস্টলের পুরানো সংস্করণটি ছিল অপরাধী (আমি জানতাম যে আমি সবেমাত্র সংস্করণ বদলেছি এবং এটিই সমস্যা হবে) এবং যদিও পুরানো সংস্করণটি তৈরি করা হচ্ছে না যেখানে এটি প্রদর্শিত হয়নি, এটি আমার সমস্যার সমাধান করে। আমি ইন্টেলিজ সংস্করণ 14 ব্যবহার করছি এবং তারপরে এই প্রক্রিয়া চলাকালীন 15 এ আপগ্রেড করেছি।


1

আমার ক্ষেত্রে, আমি এইভাবে এই ত্রুটির মধ্যে দৌড়েছি। pom.xmlআমার প্রকল্পের দুটি নির্ভরতা সংজ্ঞায়িত Aএবং B। এবং উভয় Aএবং Bএকই শৈল্পিকের উপর নির্ধারিত নির্ভরতা (এটি কল করুন C) তবে এর বিভিন্ন সংস্করণ ( C.1এবং C.2)। যখন এটি ঘটে, তখন Cমাভেনের প্রতিটি শ্রেণির জন্য দুটি সংস্করণ (কেবল একটি উবার-জার তৈরি করার সময় ) থেকে ক্লাসের একটি সংস্করণ নির্বাচন করা যেতে পারে । এটি তার নির্ভরতা মধ্যস্থতার নিয়মের ভিত্তিতে "নিকটতম" সংস্করণটি নির্বাচন করবে এবং একটি সতর্কতা আউটপুট দেবে "আমাদের একটি সদৃশ শ্রেণি আছে ..." সংস্করণগুলির মধ্যে কোনও পদ্ধতি / শ্রেণি স্বাক্ষর পরিবর্তিত হয়, তবে এটির java.lang.IncompatibleClassChangeErrorব্যতিক্রম হতে পারে যদি ভুল সংস্করণ হয় রানটাইমে ব্যবহৃত হয়

উন্নত: যদি Aএর v1 এ ব্যবহার করা আবশ্যক Cএবং Bএর v2 ব্যবহার করা আবশ্যক C, তাহলে আমরা অবশ্যই নূতন স্থান C মধ্যে Aএবং Bএড়ানোর বর্গ সংঘাতের এর poms (আমরা সদৃশ বর্গ সতর্কবার্তা আছে) যখন চূড়ান্ত প্রকল্প উভয় উপর নির্ভর করে গড়ে তোলার Aএবং B


1

আমার ক্ষেত্রে সমস্যা হয়েছে যখন আমি যোগ com.nimbusdsবিতরিত আমার অ্যাপ্লিকেশনে গ্রন্থাগার Websphere 8.5
নীচের ব্যতিক্রম ঘটেছে:

এর দ্বারা তৈরি: java.lang.Incomp موافقClassChangeError: org.objectweb.asm.AnnotationVisitor

সমাধানটি ছিল লাইব্রেরি থেকে asm jar বাদ দেওয়া:

<dependency>
    <groupId>com.nimbusds</groupId>
    <artifactId>nimbus-jose-jwt</artifactId>
    <version>5.1</version>
    <exclusions>
        <exclusion>
            <artifactId>asm</artifactId>
            <groupId>org.ow2.asm</groupId>
        </exclusion>
    </exclusions>
</dependency>

0

আপনার কোডটিতে দুটি মডিউল প্রকল্প নেই যা একই শ্রেণীর নাম এবং প্যাকেজ সংজ্ঞা রয়েছে কিনা তা দয়া করে পরীক্ষা করে দেখুন। উদাহরণস্বরূপ, যদি কেউ পূর্ববর্তী প্রয়োগের ভিত্তিতে ইন্টারফেসের নতুন বাস্তবায়ন তৈরি করতে অনুলিপি-পেস্ট ব্যবহার করে।


0

এটি যদি এই ত্রুটির সম্ভাব্য ঘটনাগুলির রেকর্ড হয় তবে:

আমি এই ত্রুটিটি কেবল WAS (8.5.0.1) এ পেয়েছি, বসন্তের লোডিংয়ের সময় (3.6.1_ রিরিজ) কনফিগারেশনের একটি বিয়ান ইনস্ট্যান্টেশন এক্সেক্সশন একটি সিএক্সএফ এক্সটেনশান এক্সসেপশন রোল করেছে, একটি বেমানান ক্লাসচেনজ এরর আপ করছে। নিম্নলিখিত স্নিপেট স্ট্যাক ট্রেসের সংক্ষিপ্তসার দেখায়:

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:76)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:990)
            ... 116 more
Caused by: org.apache.cxf.bus.extension.ExtensionException
            at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:167)
            at org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:179)
            at org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:138)
            at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:131)
            [etc...]
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
            ... 118 more

Caused by: java.lang.IncompatibleClassChangeError: 
org.apache.neethi.AssertionBuilderFactory
            at java.lang.ClassLoader.defineClassImpl(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:284)
            [etc...]
            at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:586)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:658)
            at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:163)
            ... 128 more

এই ক্ষেত্রে, সমাধানটি ছিল আমার যুদ্ধের ফাইলে মডিউলটির শ্রেণিপথ ক্রম পরিবর্তন করা। এটি, ডাব্লুএএস কনসোলে যুদ্ধের অ্যাপ্লিকেশনটি খুলুন এবং ক্লায়েন্ট মডিউলটি নির্বাচন করুন s মডিউল কনফিগারেশনে ক্লাস-লোডিংটিকে "পিতামাতার শেষ" হতে সেট করুন।

এটি ডাব্লুএএস কনসোলে পাওয়া গেছে:

  • অ্যাপ্লিকেশনগুলি -> অ্যাপ্লিকেশন প্রকার -> ওয়েবস্পিয়ার এন্টারপ্রাইজ অ্যাপ্লিকেশন
  • আপনার অ্যাপ্লিকেশন প্রতিনিধিত্ব লিঙ্ক ক্লিক করুন (যুদ্ধ)
  • "মডিউল" বিভাগের অধীনে "মডিউলগুলি পরিচালনা করুন" এ ক্লিক করুন
  • অন্তর্নিহিত মডিউলগুলির জন্য লিঙ্কে ক্লিক করুন
  • "শ্রেণীর লোডার অর্ডার" হতে "(পিতামহিত শেষ)" পরিবর্তন করুন।

0

অনেক বেশি সময় জ্বালিয়ে যাওয়ার পরে অন্য দৃশ্যের ডকুমেন্টিং।

আপনার ইজেবি টীকা সহ ক্লাস রয়েছে এমন কোনও নির্ভরতা জার নেই তা নিশ্চিত করুন।

আমাদের কাছে একটি সাধারণ জার ফাইল ছিল যা @localএন্টোটেশন করেছিল। সেই শ্রেণিটি পরে সেই সাধারণ প্রকল্পের বাইরে চলে যায় এবং আমাদের মূল ইজবি জার প্রকল্পে চলে আসে। আমাদের ইজবি জার এবং আমাদের সাধারণ জার দুটিই একটি কানের মধ্যে আবদ্ধ। আমাদের সাধারণ জার নির্ভরতার সংস্করণ আপডেট করা হয়নি। এইভাবে 2 টি শ্রেণি বেমানান পরিবর্তনগুলির সাথে কিছু হওয়ার চেষ্টা করছে।


0

উপরের সবগুলি - যে কোনও কারণেই আমি কিছু বড় চুল্লী করছি এবং এটি পেতে শুরু করি starting আমার ইন্টারফেসটি যে প্যাকেজটিতে ছিল সেটির নাম দিয়েছি এবং এটি এটিকে সাফ করেছে। আশা করি এইটি কাজ করবে.


0

কোনও কারণে জেএনআই ব্যবহার করার সময় এবং জিকজেক্টের পরিবর্তে জিক্লাস আর্গুমেন্ট পাস করার সময় একটি কল করার সময় একই ব্যতিক্রমও ছুঁড়ে দেওয়া হয় Call*Method()

এটি ওগ্রে গীতসংহিতা 33 এর উত্তরের অনুরূপ।

void example(JNIEnv *env, jobject inJavaList) {
    jclass class_List = env->FindClass("java/util/List");

    jmethodID method_size = env->GetMethodID(class_List, "size", "()I");
    long size = env->CallIntMethod(class_List, method_size); // should be passing 'inJavaList' instead of 'class_List'

    std::cout << "LIST SIZE " << size << std::endl;
}

আমি জানি 5 বছর পরে এই প্রশ্নের উত্তর দিতে কিছুটা দেরি হয়েছে তবে অনুসন্ধান করার সময় এটি অন্যতম শীর্ষ হিট java.lang.IncompatibleClassChangeErrorতাই আমি এই বিশেষ মামলার নথিটি চেয়েছিলাম wanted


0

আমার 2 সেন্ট যোগ করা .যদি আপনি স্কেল এবং এসবিটি এবং স্কেলা-লগিংকে নির্ভরতা হিসাবে ব্যবহার করছেন; তবে এটি ঘটতে পারে কারণ স্কালা-লগিংয়ের পূর্ববর্তী সংস্করণটির নাম ছিল স্কালা-লগিং- এপি.সো; মূলত নির্ভরতার রেজোলিউশনগুলি ভিন্ন কারণে ঘটে না স্কেল অ্যাপ্লিকেশন চালু করার সময় রানটাইম ত্রুটির দিকে পরিচালিত করে এমন নাম names


0

এই সমস্যাটির অতিরিক্ত কারণ হ'ল আপনি যদি Instant Runঅ্যান্ড্রয়েড স্টুডিওর জন্য সক্ষম করে থাকেন।

ঠিক করা

আপনি যদি এই ত্রুটিটি পেতে শুরু করেন তবে বন্ধ করুন Instant Run

  1. অ্যান্ড্রয়েড স্টুডিওর প্রধান সেটিংস
  2. বিল্ড, এক্সিকিউশন, মোতায়েন
  3. তাত্ক্ষণিক চালান
  4. আনটিক "তাত্ক্ষণিক রান সক্ষম করুন ..."

কেন

Instant Runআপনার চলমান অ্যাপ্লিকেশনটির আপডেটগুলি দ্রুত সরবরাহ করার জন্য বিকাশের সময় বিপুল সংখ্যক জিনিসকে পরিবর্তন করে। অতএব তাত্ক্ষণিক রান। যখন এটি কাজ করে, এটি সত্যিই দরকারী। তবে, যখন এই সমস্যাগুলির মতো কোনও সমস্যা হয় তখন Instant Runঅ্যান্ড্রয়েড স্টুডিওর পরবর্তী সংস্করণ প্রকাশ না হওয়া অবধি বন্ধ করে দেওয়া।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.