当我执行我的代码时,我收到以下错误。 这是在我从JDK 1.6升级到1.8
之后发生的java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "javax.security.auth.kerberos.JavaxSecurityAuthKerberosAccessImpl.keyTabTakeSnapshot(Ljavax/security/auth/kerberos/KeyTab;)Lsun/security/krb5/internal/ktab/KeyTab;" the class loader (instance of org/powermock/core/classloader/MockClassLoader) of the current class, javax/security/auth/kerberos/JavaxSecurityAuthKerberosAccessImpl, and the class loader (instance of <bootloader>) for interface sun/security/krb5/JavaxSecurityAuthKerberosAccess have different Class objects for the type javax/security/auth/kerberos/KeyTab used in the signature
at javax.security.auth.kerberos.KeyTab.<clinit>(KeyTab.java:100)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.hadoop.security.UserGroupInformation.<clinit>(UserGroupInformation.java:609)
答案 0 :(得分:4)
在测试用例中使用注释@PowerMockIgnore(&#34; javax.security。*&#34;)解决了我的测试用例的失败。
答案 1 :(得分:3)
Java 8在允许的字节代码方面更为严格。一些模拟工具使用了一些不寻常的字节码检测。
最有可能的解决方法是升级你的powermock,因为它很可能已被修复以使用Java 8。