使用JAR包中的类与JDK的rt.jar冲突的问题

项目中遇到这样一个问题:使用的第三方JAR包中有一个整包(javax.management)与JDK的javax.management包重复了,但是具体实现却是不一样的,运行的时候第三方JAR包里的类试图调用自己提供的javax.management包里的类,但是JDK也提供了javax.management包,所以虚拟机优先调用了自己的javax.management里的类,于是就出错了。请问这个问题要怎么解决?因为这个原因项目已经停滞好久了,希望看到的大侠给解答一下,不甚感激!

项目实际情况是:我要在JDK1.6环境下监控WebLogic8,需要用到weblogic.jar,但是weblogic.jar提供了javax.management包,与JDK1.6提供的javax.management包冲突了,而且内部实现还不完全一样。

这样项目也能停滞。。。
你既然用weblogic,就该知道weblogic自带jdk,你别用sun的jdk1.6,用自带的就不会冲突。
其次,jar包都是可以改的,jdk已经开源了,你不想用jdk1.6的rt.jar就改一下重新编译打一个jar包。
最不济,startWebLogic.cmd文件里可以改CLASSPATH的,把 weblogic.jar放在jdk的CLASSPATH之前就行追问

我是要监控WebLogic,我的项目跟WebLogic不在一个机器上,而是在局域网中的任何地方

追答

不管你在哪个程序下监控。jdk可以变,jar包可以重编译。classpath仍然可以改,只不过改的是你监控程序的classpath。
这跟你用哪台机器有关系吗?建议你看本书,《深入理解Java虚拟机》

追问

我不能动JDK,也不能动的JAR包,因为我的这个项目只是一个大产品线的一小分子

追答

不是说了3个方法,前2条不能用你用第三个,改classpath啊,
别以为只有weblogic能改,你监控程序只要java写的就能改
说的清清楚楚还要追问2次,回答烦了,别追问了

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-19
写自定义ClassLoader,对于javax.management包下的类,优先通过自定义的ClassLoader到指定JAR中去加载即可,其余委托给父类加载器加载

参考资料:http://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html

本回答被提问者和网友采纳
第2个回答  2011-04-18
你引用的时候使用类的全称,应该就不会冲突了!追问

看来我没有表述清楚,不是包名的问题,我是用到weblogic.jar中的类,而这个类自己会调用javax.management包里的类,但是它是想调用自己的javax.management包,却调用了JDK的javax.management包,所以出错了

追答

改变classpath顺序吧

相似回答