经常遇到恼人的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
分享到:
相关推荐
maven-resources-production java.lang.NegativeArraySizeException java.lang.NegativeArraySizeException 问题解决
java.lang.NoSuchFieldError: Companion 问题的解决方案
"Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...
标题中的问题“scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetException”是用户在尝试使用Scrcpy时遇到的一个常见错误。这个错误通常意味着在执行某个方法时,Java运行时环境遇到了未预期的情况。...
java.lang.OutOfMemoryError处理错误 java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,...java.lang.OutOfMemoryError是Java虚拟机中的一种常见错误,解决这种错误需要根据实际情况进行分析和解决。
### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....
idea启动项目报错 java.lang.NegativeArraySizeException解决方法
标题 "java.lang.Exception: java.lang....通过分析 `ReportGroupAction.java` 文件,可以找到具体的代码行来定位和修复问题。同时,理解Java异常处理机制和有效的调试技巧也是解决问题的关键。
Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...
Java中的`java.lang.UnsatisfiedLinkError`是一个常见的运行时异常,通常出现在Java试图加载本地(C或C++)库但找不到相应的库文件时。这个错误可能是由于多种原因引起的,如库路径设置不正确、库文件不存在或者版本...
在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...
解决 java.lang.NoSuchFieldError: STRING at org.jbpm.identity.hibernate.PermissionUserType. 不用jbpm的jbpm-identity.jar 用这个就好
在Java编程中,`java.lang.NoSuchMethodException` 是一个常见的运行时异常,它表示尝试调用一个不存在的方法。这个异常通常发生在动态方法调用或反射操作中。在给出的标题 "java.lang.NoSuchMethodException: ....
解决 java.lang.RuntimeException: Could not generate DH keypair异常处理。 bcprov-ext-jdk15on-1.60、bcprov-jdk15on-1.60两个包放到jre下的$JAVA_HOME/jre/lib/ext的路径下,然后配置$JAVA_HOME/jre/lib/...
java.lang.NoClassDefFoundError: de/javakaffee/kryoserializers/CurrencySerializer
在Java编程中,`java.lang.IllegalArgumentException` 是一个标准的运行时异常,它通常表示一个方法接收到的参数值不在预期范围内或者不合法。当尝试将一个无法转换为日期的对象格式化时,就会抛出"Cannot format ...
java.lang.OutOfMemoryError: PermGen space 解决方案
Java中的`java.lang.OutOfMemoryError`是一种常见的运行时错误,通常表示应用程序在尝试分配内存时遇到了问题。根据提供的信息,这个错误主要涉及到两个方面:`PermGen space`和`Java heap`,并且与Tomcat服务器相关...