您的位置:首页 > 编程语言 > Java开发

signer information does not match问题解决

2017-02-10 10:17 357 查看
    这两天调试程序,碰到了一个问题。程序在调用log4j打印日志的时候碰到了如下的错误:

java.lang.ExceptionInInitializerError

 at com.company.pub.util.config.ConfigFileHelper.getConfigProperties(ConfigFileHelper.java:60)

 at com.company.team.bean.pub.common.Env.<clinit>(Env.java:375)

 at com.company.team.bean.pub.common.DBean.<init>(DBean.java:114)

 at com.company.team.bean.pub.common.DBean.main(DBean.java:565)

Caused by: java.lang.SecurityException: class "org.apache.log4j.PropertyConfigurator"'s signer information does not match signer information of other classes in the same package

 at java.lang.ClassLoader.checkCerts(ClassLoader.java:611)

 at java.lang.ClassLoader.defineClass(ClassLoader.java:532)

 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)

 at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)

 at java.net.URLClassLoader.access$100(URLClassLoader.java:55)

 at java.net.URLClassLoader$1.run(URLClassLoader.java:194)

 at java.security.AccessController.doPrivileged(Native Method)

 at java.net.URLClassLoader.findClass(URLClassLoader.java:187)

 at java.lang.ClassLoader.loadClass(ClassLoader.java:289)

 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)

 at java.lang.ClassLoader.loadClass(ClassLoader.java:235)

 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)

 at com.company.team.bean.pub.common.Log.<clinit>(Log.java:37)

 ... 4 more

 

 一、网络搜索解决办法

   在网上搜了两天,问题结论很多:

     1、是JAR包冲突所致,也就是说引了两个相同的包(我的理解)。

     2、LOG4J的jar包坏掉了,换一个新的,

     3、MyEclipse6.0的BUG

     4、JDK1.3的 BUG

    虽然很多类似的帖子,但是没有一个是在这个类上报错的。我的问题很小众。

    

 二、分析并解决

     我用的是MyEclipse5.0,JDK1.4所以下面两项排除。

     1、首先找个简单的做,重新找了一个log4j-1.2.8.jar覆盖,问题依旧。

        再找一个试下log4j-1.2.5.jar,重新引入,恐怖的事情来了,重新引入eclipse要全部重新编译一遍,

        每次都耗费我近一个小时,CPU100%,什么都做不了,郁闷死我了。 更郁闷的是问题还是没有解决。

    

     2、我的LIB里面只引入了一个log4j-1.2.8.jar,不存在冲突的问题啊。搜索org.apache.log4j.PropertyConfigurator

        一样只在log4j-1.2.8.jar包出现过一次。       

        已经不知道怎么回事了,找出原来版本工程,经过几个版本的尝试,终于一个版本可以正确调试。查看引入的包,一

        样只有log4j-1.2.8.jar一个包,拷到有问题的工程里,错误没有解决。前几天心血来潮把工程的JDK指向了1.4,难道

        是JDK有问题?

    

     3、切换问题工程的JDK,又是全编译,唉。可问题还是依旧,FUCK。

    

     4、所有的都排除了,问题就是出现在所引入的jar包上了,可以怎么搜索也之能找到一个PropertyConfigurator类。

        好吧,本人还有笨方法,原谅我吧,我是不称职的开发人员。将两个工程的JAR包比对,发现问题工程里面少了一些,

        尝试补充上去,全编译-_-||,问题依旧。将原来的包备份,将所有的包覆盖。哦,我的上帝,终于可以正常运行了。

        问题到这里并没有完全结束,到底是哪个包导致的呢?

        还是笨方法逐个包覆盖,终于定位到问题的包。但是这个包的名字让我很费解jftp.jar,没什么关系么。看看里面吧,

        谁这么没人性,竟然里面有org.apache.log4j完整的类目录,谁放进去的啊,变态。更变态的是里面的类不是全部的

        类而只有部分,这也就是报org.apache.log4j.PropertyConfigurator而只能搜索到一个的原因。

        冲突可能是因为log4j首先调用了jftp.jar包中log4j用到的文件,到调用PropertyConfigurator时候确实调用log4j-1.2.8.jar

        中的类导致签名冲突。

       

      问题总算解决了,问题很小众,也许对其他人没有什么帮助,因为很少有项目的前辈把jftp.jar变成这样,无语。
      遂写此文,纪念我不放弃但是放弃时间的两天。

原文地址:http://blog.csdn.net/strawbingo/article/details/2474790
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  log4j myeclipse jdk jar eclipse
相关文章推荐