ClassNotFoundException/TypeNotPresentException错误解决办法

本文探讨了在Dubbo项目中遇到的ClassNotFoundException问题,详细解释了在多模块项目环境下,如何通过更新子项目的jar包来解决新增类未被编译的问题。
1 背景

第一次接触dubbo项目,一个项目划分为多个子项目,我在其中一个模块新增了一个类,运行dubbo server时,报错:ClassNotFoundException/TypeNotPresentException。很明显就是新增的类没有被编译,于是maven update+project clean双管齐下,还是不行。

2 解决

问了项目组的大牛,知道多个子项目的情况下,有一个负责启动的项目,这个项目会在maven dependencies下引入其它子项目生成的jar包,这样有个好处是:其他子项目close project的时候,这个项目会直接使用jar包。当子项目打开时,项目会优先使用子项目中的代码。
这就造成了,当我在子项目新增java文件,同时又关闭了子项目,那么就会导致找不到class文件,因为项目用的jar包还是旧的jar包。必须更新一下,找到子项目的路径,打开命令行,mvn install。

`java.lang.TypeNotPresentException: Type com.huawei.his.idaas.sso.filter.SsoFilter not present` 异常通常表示 Java 虚拟机(JVM)在尝试加载指定的类 `com.huawei.his.idaas.sso.filter.SsoFilter` 时,未能在类路径中找到该类。以下是一些可能的解决方法: ### 检查依赖 确保项目的依赖中包含了 `com.huawei.his.idaas.sso.filter.SsoFilter` 类所在的库。如果是 Maven 项目,可以检查 `pom.xml` 文件;如果是 Gradle 项目,则检查 `build.gradle` 文件。 #### Maven 示例 ```xml <dependency> <groupId>com.huawei.his.idaas</groupId> <artifactId>sso-library</artifactId> <version>x.x.x</version> </dependency> ``` #### Gradle 示例 ```groovy implementation 'com.huawei.his.idaas:sso-library:x.x.x' ``` ### 检查类路径 确认类文件 `SsoFilter.class` 是否确实存在于项目的类路径中。如果使用 IDE(如 IntelliJ IDEA 或 Eclipse),可以检查项目的输出目录(通常是 `target` 或 `build`)。 ### 检查版本兼容性 确保使用的库版本与项目的其他部分兼容。版本不匹配可能导致类加载失败。 ### 重新构建项目 有时候,构建过程中可能会出现问题,导致类文件没有正确生成或复制。可以尝试清理并重新构建项目。 #### Maven 清理和构建 ```bash mvn clean install ``` #### Gradle 清理和构建 ```bash gradle clean build ``` ### 检查运行环境 确保运行项目的 JVM 版本与开发环境一致。不同的 JVM 版本可能会导致类加载问题。 ### 检查包名和类名 确认类名 `SsoFilter` 和包名 `com.huawei.his.idaas.sso.filter` 是否正确,大小写是否一致。 ### 检查资源过滤 如果项目使用了资源过滤,确保类文件没有被错误地过滤掉。 ### 示例代码检查依赖 以下是一个简单的 Java 代码示例,用于检查类是否可以被加载: ```java import java.lang.Class; import java.lang.ClassNotFoundException; public class ClassLoaderCheck { public static void main(String[] args) { try { Class<?> clazz = Class.forName("com.huawei.his.idaas.sso.filter.SsoFilter"); System.out.println("Class found: " + clazz.getName()); } catch (ClassNotFoundException e) { System.err.println("Class not found: " + e.getMessage()); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值