Class 通常是从 .jar 文件中加载的, 遇到 ClassNotFoundException 时我们可能需要定位这个类是哪个模块提供的
Class#getProtectionDomain() 可以帮到我们

fun main(args: Array<String>) {
        val c = Class.forName(args[0])
        println("${ c.getProtectionDomain() }")
}

比如 javax.activation.DataHandler 在 JDK 11 中被弃用删除, 但是 JavaMail 需要这些类, 在 Maven 库 https://mvnrepository.com/artifact/javax.activation/activation/1.1.1 下载 jar 文件之后

$ jk -cp activation-1.1.1.jar MainKt javax.activation.DataHandler
ProtectionDomain  (file:/home/xxx/kt/FindClass/activation-1.1.1.jar <no signer certificates>)
 jdk.internal.loader.ClassLoaders$AppClassLoader@1affbebc
 <no principals>
 java.security.Permissions@4a574795 (
 ("java.io.FilePermission" "/home/xxx/kt/FindClass/activation-1.1.1.jar" "read")
 ("java.lang.RuntimePermission" "exitVM")
)

由此我们就可以知道 生产环境 和 开发环境 之前究竟是缺少了哪些 jar 文件, 从而解决异常了


相关文章:

  • 2021-04-11
  • 2021-10-13
  • 2021-10-31
  • 2021-11-29
  • 2021-09-15
  • 2022-01-08
  • 2021-08-30
猜你喜欢
  • 2021-09-06
  • 2021-05-17
  • 2021-05-12
  • 2021-07-11
  • 2021-09-28
  • 2022-12-23
  • 2021-07-11
相关资源
相似解决方案