我的项目的库模块中运行时的ClassNotFoundException

时间:2017-12-10 12:45:10

标签: java android gradle module

  1. 我在Android Studio中有一个Android项目;
    1. 我创建了一个java-library模块(步骤为:File -> New -> New Module -> Java library);
    2. 我通过gradle添加第三个库,例如:“compile'c​​om.squareup.okhttp3:okhttp:3.9.1'”;
    3. 然后,我在Main类的main方法中使用OkHttpClient,好的,编译成功。
    4. 但我运行Main方法,控制台打印错误:
  2. ```

    Exception in thread "main" java.lang.NoClassDefFoundError: okhttp3/OkHttpClient
            at com.zhang.anan.mylib.myClass.main(myClass.java:12)
        Caused by: java.lang.ClassNotFoundException: okhttp3.OkHttpClient
            at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
            ... 1 more
    

    ```

1 个答案:

答案 0 :(得分:0)

根据Oracle文档,在类加载调用失败后,使用其字符串名称抛出ClassNotFoundException,如下所示:

  • Class.forName方法
  • ClassLoader.findSystemClass方法
  • ClassLoader.loadClass方法 换句话说,这意味着在应用程序当前上下文类加载器中找不到或无法在运行时加载一个特定的Java类。

如何解决

  • 识别调用者:从Class.forName()或ClassLoader.loadClass()调用之前的堆栈跟踪。这将帮助您了解您的应用程序代码是否与第三方API有关。

  • 确定您的应用程序代码是否未正确打包,例如从类路径中丢失JAR文件。

  • 如果缺少的Java类不是来自您的应用程序代码,那么请确定它是否属于您根据Java应用程序使用的第三方API。一旦识别出来,就需要将缺少的JAR文件添加到运行时类路径或Web应用程序WAR / EAR文件中。