java.lang.VerifyError: শাখা লক্ষ্য JDK 1.7 এ স্ট্যাকম্যাপ ফ্রেমের প্রত্যাশা


88

জেডিকে ১.7 এ আপগ্রেড করার পরে আমি ব্যতিক্রমের নীচে পাচ্ছি:

java.lang.VerifyError: Expecting a stackmap frame at branch target 71 in method com.abc.domain.myPackage.MyClass$JaxbAccessorM_getDescription_setDescription_java_lang_String.get(Ljava/lang/Object;)Ljava/lang/Object; at offset 20
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2413)
    at java.lang.Class.getConstructor0(Class.java:2723)
    at java.lang.Class.newInstance0(Class.java:345)
    at java.lang.Class.newInstance(Class.java:327)
    at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:184)
    at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:129)
    at com.sun.xml.internal.bind.v2.runtime.reflect.Accessor$GetterSetterReflection.optimize(Accessor.java:384)
    at com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:72)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:113)
    at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:166)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:494)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:311)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:126)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1148)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:130)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:248)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:235)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:445)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
    at com.abc.domain.myPackage.MyClass.marshalFacetsTest(MyClass.java:73)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:128)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1203)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1128)
    at org.testng.TestNG.run(TestNG.java:1036)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

উত্তর:


171

জাভা 7 কঠোর যাচাইকরণ প্রবর্তন করেছে এবং শ্রেণি বিন্যাসটি কিছুটা বদলেছে that কোডটি সঠিক তা যাচাই করতে ব্যবহৃত একটি স্ট্যাক ম্যাপ রয়েছে। আপনি যে ব্যতিক্রমটি দেখছেন তার অর্থ হ'ল কিছু পদ্ধতির বৈধ স্ট্যাক মানচিত্র নেই।

জাভা সংস্করণ বা বাইটকোড উপকরণ উভয়ই দোষ দিতে পারে। সাধারণত এর অর্থ এই যে অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি লাইব্রেরি অবৈধ বাইটকোড উত্পন্ন করে যা কঠোর যাচাইকরণ পাস করে না। সুতরাং এটি লাইব্রেরিতে বাগ হিসাবে রিপোর্ট করা ছাড়া আর কিছুই কিছুই বিকাশকারী করতে পারে না।

কার্যকারণ হিসাবে আপনি -noverifyযাচাইকরণ অক্ষম করতে JVM যুক্তি যুক্ত করতে পারেন । জাভা 7-তে -XX:-UseSplitVerifierকম কঠোর যাচাইকরণ পদ্ধতিটি ব্যবহার করাও সম্ভব ছিল , তবে জাভা 8-এ সেই বিকল্পটি সরানো হয়েছিল।


4
তবে -এক্সএক্স: -উসস্প্লিটভিটিফায়ার মানে কি ?? আমি ওরাকল এর ব্যাখ্যার দিকে নজর দিয়েছিলাম, এটিতে "স্ট্যাকম্যাপটেবল বৈশিষ্ট্যযুক্ত নতুন ধরণের পরীক্ষক ব্যবহার করুন"। আমি পেলাম না।
জন

4
সুতরাং যদি আমি এই ত্রুটিগুলি দেখি: এটি কি JVM বা আমার কোডের মধ্যে কোনও বাগ আছে?
বেন্টোলার

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

4
ইউনিট পরীক্ষার জন্য আপনাকে নিশ্চয়তা প্লাগইনে আর্গুমেন্টগুলি পাস করতে হবে। এটি জাভা 7 এবং 8 সংকলক উভয়ের জন্যই সমস্যার সমাধান করেছে: <plugin> <groupId> org.apache.maven.plugins </groupId> <artifactId> মাভেন-শিফারফায়ার-প্লাগইন </ b> << সংস্করণ 2.18.1 </ version > <কনফিগারেশন> <argLine> -নোভারিফাই-এক্সএক্স: -উসস্প্লিটভিউফায়ার </ আরগ্লাইন> </ কনফিগারেশন> </plugin>
এন্টোইন উইলস

4
আমি একই সমস্যাটির মুখোমুখি হয়েছি কিন্তু যুক্ত করার পরে - এটিকে আমার পক্ষে সত্যিই কাজ করেছে han ধন্যবাদ।
প্রবীণ কুমার মেকালা

15

যদি আপনি জাভা ১.৮ XX:-UseSplitVerifierব্যবহার -noverifyকরছেন তবে আপনার জেভিএম বৈশিষ্ট্যগুলিতে সরিয়ে ফেলুন ।


8

আমি এই সমস্যায় পড়েছি এবং পতাকাটি ব্যবহার করার চেষ্টা করব -noverifyযা সত্যই কাজ করে। এটি নতুন বাইটকোড যাচাইকারীর কারণে। সুতরাং পতাকাটি সত্যই কাজ করা উচিত। আমি JDK 1.7 ব্যবহার করছি।

দ্রষ্টব্য: আপনি JDK 1.8 ব্যবহার করে থাকলে এটি কাজ করবে না


4
আমার জন্য পতাকাটি স্থির করে আমাদের অ্যান্ড্রয়েড ইউনিট টেস্টগুলি কার্যকর করতে জেআরই 8 রানটাইম হিসাবে ব্যবহার করে।
ubuntudroid

4
-noverify এছাড়াও জাভা 8. আমি Android এর জন্য তাই আমি gradle ব্যবহার করছি উপর আমার জন্য কাজ -noverify পতাকা যেখানে stackoverflow.com/a/37593189/2848676 উল্লেখিত রাখা ছিল
মাইকেল Osofsky

আপনি কোথায় স্থাপন করেন? আমি এটিকে MAVEN_OPTS হিসাবে সেট করেছি তবে এটি আমার পক্ষে কাজ করছে না
দেব

@ সারা অ্যান্টুনেজ, আপনার অ্যাপ্লিকেশন মডিউলগুলিতে অ্যান্ড্রয়েড বন্ধের ক্ষেত্রে বিল্ড.gradle ফাইলটিতে এটি যুক্ত করুন। অ্যানড্রয়েড {.... টেস্টঅপশনস {ইউনিটটেষ্টস.ল {জেভিএমআর্গস '-নোভারাইফ করুন'}}}
গ্রুকিংড্রয়েড

2

ফাইলগুলির মধ্যে কেবলমাত্র পার্থক্য যা সমস্যা সৃষ্টি করে তা ফাইলের 8 ম বাইট

সি এ এফ এ বি এ বি 00 00 00 33 - জাভা 7

বনাম

সিএ ফে বিএ বি 00 00 00 32 32 - জাভা 6 6

সেটিং -XX:-UseSplitVerifierবিষয়টি সমাধান করে। তবে এই সমস্যার কারণ https://bugs.eclipse.org/bugs/show_bug.cgi?id=339388


2

-noverifyআপনার পরীক্ষার কাজে JVM যুক্তিটি পাস করুন । আপনি যদি গ্রেডেল ব্যবহার করছেন তবে এতে build.gradleআপনার মতো কিছু থাকতে পারে:

test {
  jvmArgs "-noverify"
}

0

আপনি যখন চূড়ান্ত ক্লাসগুলিকে মকিতো ব্যবহার করেন তখন এই ERROR ঘটতে পারে ।

পরিবর্তে মকিতো ইনলাইন বা পাওয়ারমক ব্যবহার বিবেচনা করুন।


-2

খননের জন্য দুঃখিত, তবে আমি একই সমস্যার মুখোমুখি হয়েছি এবং এর সহজ সমাধান খুঁজে পেয়েছি।

জাভা সংকলক বিকল্পগুলিতে আপনাকে "স্থানীয় ব্যবহারযোগ্য ভেরিয়েবল সংরক্ষণ করুন (কখনই পড়ুন না) সংরক্ষণ করুন" যাতে আপনার লক্ষ্য লক্ষ্য করে জেভিএম সংস্করণ পরিবর্তন করার দরকার নেই তা অন্বেষণ করা দরকার।

এটি পুরানো এক্লিপ সংস্করণে একটি বাগ বলে মনে হচ্ছে।


এটা আমার জন্য কাজ করে না। এখানে আমার ত্রুটির একটি বক্তব্য
ZiglioUK

4
ওপি গ্রহণের কথা উল্লেখ করে না। তিনি এটি ব্যবহার নাও করতে পারেন।
ডন ব্র্যানসন

-4

আপনি যদি কোডটি নিজেই তৈরি করে চলেছেন তবে জাভা সংকলককে "-তারগেট 1.5" প্রদান করে (বা আপনার আইডিই বা আপনার বিল্ড কনফিগারেশনে সংশ্লিষ্ট বিকল্পটি সেট করে) এই সমস্যাটি কাটিয়ে উঠতে পারে।


-11

এই লিঙ্কটি সহায়ক। java.lang.VerifyError: স্ট্যাকম্যাপ ফ্রেমের প্রত্যাশা

সবচেয়ে সহজ উপায়টি JRE কে 6 এ পরিবর্তন করছে 6


7
ডাউনগ্রেডিং যখন একটি সাধারণ জেভিএম আরগ ঠিক করতে পারে? আমি আপনার সহজ সংজ্ঞা সন্দেহ।
ভিশনারি সফ্টওয়্যার সলিউশন

4
যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
জোয়াচিম সৌর

এটি প্রায় একটি কাজ। জোয়াকিম যেমন বলেছিলেন, এটি কাজ করতে পারে - তবে এটি জাভা 7 ব্যবহার করতে হবে এমন দল বা কোড ঘাঁটিগুলির জন্য সমস্যাটি বা সহায়তা বা সহায়তা দেয় না
ক্রোয়ে

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