经常遇到恼人的java.lang.NoSuchMethod,分析分析都是在什么情况下发生的。
a)用JAVA 命令运行某个Class的时候,由于Class没有提供 JAVA命令期待的main方法,这个错误经常发生在java初学者身上,呵呵。
* 必须提供一个像下面的main函数,(除了args那个参数名称可以变之外)
public static void main(String[] args)
是不是碰到了下面的错误,看看你的main写对了没有。
Exception in thread "main" java.lang.NoSuchMethodError: main
b)在写代码的IDE中写的ClassA引用了其他Jar中的ClassB,调用了ClassB的methodB,运行环境里的那个Jar里面的ClassB没有methodB。
Exception in thread "main" java.lang.NoSuchMethodError: com.bt.temp.XClass.main1
([Ljava/lang/String;)V
at com.bt.temp.Temp.main(Temp.java:14)
c)多个jar之间版本冲突,尤其是容易发生在用了一大堆opensource的jar包,然后发布在在一个APP container里面。
产生冲突的原因有可能是
1)开源JarA里有一个XXClass,开源JarB里也有一个XXClass,这两个XXClass的版本不一致,jarA先被classloader 加载,然后jarB里用到XXClass的地方就有可能抛java.lang.NoSuchMethodError。
2)App Container里的jar包有一个XXClass,而项目用的jar包里也有一个XXClass,两个版本不一致。比如把CXF 实现的web service发布到weblogic 9.2的时候,就会有java.lang.NoSuchMethodError: javax.jws.WebService.portNam,
原因是weblogic.jar里也有一个javax.jws.WebService这个类,它比cxf里的geronimo-ws-metadata_2.0_spec-1.1.1.jar先加载。
解决方法:
1,在weblogic的启动脚本里加上:
set CLASSPATH_CXF=X:/xyz/geronimo-ws-metadata_2.0_spec-1.1.1.jar
set CLASSPATH=%CLASSPATH_CXF%;%CLASSPATH%;%MEDREC_WebLogic _CLASSPATH%
2,将程序打成EAR包而不是WAR包,weblogic9.2后提供classloader filter可以优先加载指定的Class。
在EAR的META-INF里加上weblogic-application.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
<prefer-application-packages>
<package-name>javax.jws.*</package-name>
</prefer-application-packages>
</weblogic-application>
参考:http://docs.codehaus.org/display/XFIRE/XFire+on+WebLogic+9.2
分享到:
相关推荐
报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m ...
java.lang.NumberFormatException For inputstring 4294967295处理方法
java解决nested exception is java.lang.OutOfMemoryError Java heap space 解决OOM
java.lang.runtimeexception unexpected subelement
解决java.lang.StackOverflowError
java.lang.OutOfMemoryError: Java heap space 解决方法
idea启动项目报错 java.lang.NegativeArraySizeException解决方法
搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space 资料整理
解决 java.lang.NoSuchFieldError: STRING at org.jbpm.identity.hibernate.PermissionUserType. 不用jbpm的jbpm-identity.jar 用这个就好
java.lang.UnsupportedOperationException异常(csdn)————程序
scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetException 安装这个版本的scrcpy即可。
记录java.lang.OutOfMemoryError:Java heap space的情况 文章内容: 一.问题描述+原因分析+解决方案 二.JVM调优说明 三.Tomcat添加到jvisualvm监控
java.lang.OutOfMemoryError: PermGen space 解决方案
java.lang.OutOfMemoryError处理错误
java.lang.NoClassDefFoundError: de/javakaffee/kryoserializers/CurrencySerializer
java解决Handler processing failed; nested exception is java.lang.NoClassDefFoundError
NULL 博文链接:https://hw1287789687.iteye.com/blog/2034439
java 9 中引入了模块的概念,默认情况下,Java SE中将不再包含java EE 的Jar包 而在 java 6/7 / 8 时关于这个API 都是捆绑在