在本文中,我们将为您详细介绍[spring]启动时报错:NoSuchMethodError的相关知识,并且为您解答关于springnoclassdeffounderror的疑问,此外,我们还会提供一些
在本文中,我们将为您详细介绍[spring]启动时报错:NoSuchMethodError的相关知识,并且为您解答关于spring noclassdeffounderror的疑问,此外,我们还会提供一些关于Arthas 实践 -- 排查 Spring Boot 应用 NoSuchMethodError、Arthas实践--排查Spring Boot应用NoSuchMethodError、flutter报错:NoSuchMethodError: The method ''>'' was called on null.、idea Spring boot 启动报错:java.lang.NoSuchMethodError:的有用信息。
本文目录一览:- [spring]启动时报错:NoSuchMethodError(spring noclassdeffounderror)
- Arthas 实践 -- 排查 Spring Boot 应用 NoSuchMethodError
- Arthas实践--排查Spring Boot应用NoSuchMethodError
- flutter报错:NoSuchMethodError: The method ''>'' was called on null.
- idea Spring boot 启动报错:java.lang.NoSuchMethodError:
[spring]启动时报错:NoSuchMethodError(spring noclassdeffounderror)
Spring V4.1.0+的版本在不支持Servlet3.0的应用服务器上跑时会报以下错误:
NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
比如说:tomcat 7以下的版本、jboss 4.2.3以下的版本
解决版本有两个(任意选一个即可):
1)、退回到Spring V4.0.7
2)、升级应用服务器到支持Servlet3的应用服务器。
比如tomcat7+(最好是tomcat8+)、jboss as 7+
Arthas 实践 -- 排查 Spring Boot 应用 NoSuchMethodError
前言
有时 spring boot 应用会遇到 java.lang.NoSuchMethodError
的问题,下面以具体的 demo 来说明怎样利用 arthas 来排查。
Demo: https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-NoSuchMethodError
在应用的 main 函数里 catch 住异常,保证进程不退出
很多时候当应用抛出异常后,进程退出了,就比较难排查问题。可以先改下 main 函数,把异常 catch 住:
public static void main(String[] args) throws IOException {
try {
SpringApplication.run(DemoNoSuchMethodErrorApplication.class, args);
} catch (Throwable e) {
e.printStackTrace();
}
// block
System.in.read();
}
Demo 启动之后,抛出的异常是:
java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationAwareOrderComparator.sort(Ljava/util/List;)V
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:394)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:383)
at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:249)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:225)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at com.example.demoNoSuchMethodError.DemoNoSuchMethodErrorApplication.main(DemoNoSuchMethodErrorApplication.java:13)
显然,异常的意思是 AnnotationAwareOrderComparator
缺少 sort(Ljava/util/List;)V
这个函数。
安装 arthas
参考:https://alibaba.github.io/arthas/install-detail.html
使用 sc 命令查找类所在的 jar 包
应用需要抛出了异常,但是进程还没有退出,我们用 arthas 来 attach 上去。比如在 mac 下面:
./as.sh
然后选择 com.example.demoNoSuchMethodError.DemoNoSuchMethodErrorApplication
进程。
再执行 sc 命令来查找类:
$ sc -d org.springframework.core.annotation.AnnotationAwareOrderComparator
class-info org.springframework.core.annotation.AnnotationAwareOrderComparator
code-source /Users/hengyunabc/.m2/repository/org/springframework/spring/2.5.6.SEC03/spring-2.5.6.SEC03.jar
name org.springframework.core.annotation.AnnotationAwareOrderComparator
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name AnnotationAwareOrderComparator
modifier public
annotation
interfaces
super-class +-org.springframework.core.OrderComparator
+-java.lang.Object
class-loader +-sun.misc.Launcher$AppClassLoader@5c647e05
+-sun.misc.Launcher$ExtClassLoader@689e3d07
classLoaderHash 5c647e05
Affect(row-cnt:1) cost in 41 ms.
可以看到 AnnotationAwareOrderComparator
是从 spring-2.5.6.SEC03.jar
里加载的。
使用 jad 查看反编绎的源代码
下面使用 jad 命令来查看 AnnotationAwareOrderComparator
的源代码
$ jad org.springframework.core.annotation.AnnotationAwareOrderComparator
ClassLoader:
+-sun.misc.Launcher$AppClassLoader@5c647e05
+-sun.misc.Launcher$ExtClassLoader@689e3d07
Location:
/Users/hengyunabc/.m2/repository/org/springframework/spring/2.5.6.SEC03/spring-2.5.6.SEC03.jar
/*
* Decompiled with CFR 0_132.
*/
package org.springframework.core.annotation;
import java.lang.annotation.Annotation;
import org.springframework.core.OrderComparator;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
public class AnnotationAwareOrderComparator
extends OrderComparator {
protected int getOrder(Object obj) {
Order order;
if (obj instanceof Ordered) {
return ((Ordered)obj).getOrder();
}
if (obj != null && (order = obj.getClass().getAnnotation(Order.class)) != null) {
return order.value();
}
return Integer.MAX_VALUE;
}
}
Affect(row-cnt:1) cost in 286 ms.
可见,AnnotationAwareOrderComparator
的确没有 sort(Ljava/util/List;)V
函数。
排掉依赖,解决问题
从上面的排查里,可以确定
AnnotationAwareOrderComparator
来自spring-2.5.6.SEC03.jar
,的确没有sort(Ljava/util/List;)V
函数。
所以,可以检查 maven 依赖,把 spring 2 的 jar 包排掉,这样子就可以解决问题了。
总结
- 仔细看
NoSuchMethodError
的异常信息,了解是什么类缺少了什么函数 - 利用 arthas 来查找类,反编绎源码,确认问题
链接
-
Arthas--Alibaba 开源 Java 诊断利器
-
Arthas Github
-
Arthas Gitee
Arthas实践--排查Spring Boot应用NoSuchMethodError
前言
有时spring boot应用会遇到java.lang.NoSuchMethodError
的问题,下面以具体的demo来说明怎样利用arthas来排查。
Demo: https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-NoSuchMethodError
在应用的main函数里catch住异常,保证进程不退出
很多时候当应用抛出异常后,进程退出了,就比较难排查问题。可以先改下main函数,把异常catch住:
public static void main(String[] args) throws IOException {
try {
SpringApplication.run(DemoNoSuchMethodErrorApplication.class, args);
} catch (Throwable e) {
e.printStackTrace();
}
// block
System.in.read();
}
Demo启动之后,抛出的异常是:
java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationAwareOrderComparator.sort(Ljava/util/List;)V
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:394)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:383)
at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:249)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:225)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at com.example.demoNoSuchMethodError.DemoNoSuchMethodErrorApplication.main(DemoNoSuchMethodErrorApplication.java:13)
显然,异常的意思是AnnotationAwareOrderComparator
缺少sort(Ljava/util/List;)V
这个函数。
安装arthas
参考:https://alibaba.github.io/arthas/install-detail.html
使用sc命令查找类所在的jar包
应用需要抛出了异常,但是进程还没有退出,我们用arthas来attach上去。比如在mac下面:
./as.sh
然后选择com.example.demoNoSuchMethodError.DemoNoSuchMethodErrorApplication
进程。
再执行sc命令来查找类:
$ sc -d org.springframework.core.annotation.AnnotationAwareOrderComparator
class-info org.springframework.core.annotation.AnnotationAwareOrderComparator
code-source /Users/hengyunabc/.m2/repository/org/springframework/spring/2.5.6.SEC03/spring-2.5.6.SEC03.jar
name org.springframework.core.annotation.AnnotationAwareOrderComparator
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name AnnotationAwareOrderComparator
modifier public
annotation
interfaces
super-class +-org.springframework.core.OrderComparator
+-java.lang.Object
class-loader +-sun.misc.Launcher$AppClassLoader@5c647e05
+-sun.misc.Launcher$ExtClassLoader@689e3d07
classLoaderHash 5c647e05
Affect(row-cnt:1) cost in 41 ms.
可以看到AnnotationAwareOrderComparator
是从spring-2.5.6.SEC03.jar
里加载的。
使用jad查看反编绎的源代码
下面使用jad命令来查看AnnotationAwareOrderComparator
的源代码
$ jad org.springframework.core.annotation.AnnotationAwareOrderComparator
ClassLoader:
+-sun.misc.Launcher$AppClassLoader@5c647e05
+-sun.misc.Launcher$ExtClassLoader@689e3d07
Location:
/Users/hengyunabc/.m2/repository/org/springframework/spring/2.5.6.SEC03/spring-2.5.6.SEC03.jar
/*
* Decompiled with CFR 0_132.
*/
package org.springframework.core.annotation;
import java.lang.annotation.Annotation;
import org.springframework.core.OrderComparator;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
public class AnnotationAwareOrderComparator
extends OrderComparator {
protected int getOrder(Object obj) {
Order order;
if (obj instanceof Ordered) {
return ((Ordered)obj).getOrder();
}
if (obj != null && (order = obj.getClass().getAnnotation(Order.class)) != null) {
return order.value();
}
return Integer.MAX_VALUE;
}
}
Affect(row-cnt:1) cost in 286 ms.
可见,AnnotationAwareOrderComparator
的确没有sort(Ljava/util/List;)V
函数。
排掉依赖,解决问题
从上面的排查里,可以确定
AnnotationAwareOrderComparator
来自spring-2.5.6.SEC03.jar
,的确没有sort(Ljava/util/List;)V
函数。
所以,可以检查maven依赖,把spring 2的jar包排掉,这样子就可以解决问题了。
总结
- 仔细看
NoSuchMethodError
的异常信息,了解是什么类缺少了什么函数 - 利用arthas来查找类,反编绎源码,确认问题
链接
-
Arthas--Alibaba开源Java诊断利器
-
Arthas Github
-
Arthas Gitee
flutter报错:NoSuchMethodError: The method ''>'' was called on null.
写了个list,发现出不来,报错
flutter: Another exception was thrown: RenderBox was not laid out: _RenderScrollSemantics#81b3a relayoutBoundary=up3 NEEDS-PAINT
flutter: Another exception was thrown: ''package:flutter/src/rendering/shifted_box.dart'': Failed assertion: line 314 pos 12: ''child.hasSize'': is not true.
flutter: Another exception was thrown: NoSuchMethodError: The method ''<='' was called on null.
flutter: Another exception was thrown: NoSuchMethodError: The getter ''visible'' was called on null.
搜了搜发现是Column或Row里面要加个Flexible来包裹里面的内容: https://github.com/flutter/flutter/issues/21628
Column(
children: <Widget>[
Flexible(
child: ListView(
children: <Widget>[
ListTitle(leading:Icon(Icons.code),title:Text(''hahaha''))
],
),
)
],
)
解决了,但不知道具体是为何♀️
idea Spring boot 启动报错:java.lang.NoSuchMethodError:
错误信息如下:
关于[spring]启动时报错:NoSuchMethodError和spring noclassdeffounderror的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Arthas 实践 -- 排查 Spring Boot 应用 NoSuchMethodError、Arthas实践--排查Spring Boot应用NoSuchMethodError、flutter报错:NoSuchMethodError: The method ''>'' was called on null.、idea Spring boot 启动报错:java.lang.NoSuchMethodError:等相关知识的信息别忘了在本站进行查找喔。
本文标签: