问题

我像往常一样重新编译了我的类,突然收到以下错误消息。为什么?我该如何解决?

java.lang.SecurityException: class "Chinese_English_Dictionary"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)

#1 热门回答(110 赞)

当属于同一个包的类从不同的JAR文件加载时会发生这种情况,并且这些JAR文件具有使用不同证书签名的签名 - 或者更常见的是,至少有一个签​​名,一个或多个其他未签名(包括加载的类)来自目录,因为那些AFAIK无法签名)。

因此,要么确保所有JAR(或至少包含来自相同软件包的类的JAR)使用相同的证书进行签名,要么使用重叠的包从JAR文件清单中删除签名。


#2 热门回答(38 赞)

一个简单的方法是尝试更改导入的jar文件的顺序,这可以从(Eclipse)完成。右键单击你的包 - >构建路径 - >配置构建路径 - >引用和库 - >订单和导出。尝试更改包含签名文件的jar的顺序。


#3 热门回答(34 赞)

答:如果你使用maven,调试冲突罐的有用方法是:

mvn dependency:tree

例如,对于例外:

java.lang.SecurityException: class "javax.servlet.HttpConstraintElement"'s signer information does not match signer information of other classes in the same package

我们的确是:

mvn dependency:tree|grep servlet

它的输出:

[INFO] +- javax.servlet:servlet-api:jar:2.5:compile
[INFO] +- javax.servlet:jstl:jar:1.2:compile
[INFO] |  +- org.eclipse.jetty.orbit:javax.servlet.jsp:jar:2.2.0.v201112011158:compile
[INFO] |  +- org.eclipse.jetty.orbit:javax.servlet.jsp.jstl:jar:1.2.0.v201105211821:compile
[INFO] |  +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:compile
[INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.0.0.RC2:compile

显示冲突的servlet-api 2.5和javax.servlet 3.0.0.x.

B.其他有用的提示(如何调试安全例外以及如何排除maven deps)的问题是Signer information does not match


原文链接