【问题标题】:Retrofit & RxJava running on JDK 7在 JDK 7 上运行的改造和 RxJava
【发布时间】:2020-08-27 09:51:54
【问题描述】:

我正在使用 java 开发 API 我正在使用 Retrofit2 和 RxJava,首先我为 JDK 8 编程,现在我必须将其更改为 JDK 7,当它运行时它不断抛出此异常:

Exception in thread "main" java.lang.UnsupportedClassVersionError: retrofit2/CallAdapter$Factory : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at networking.client.RetrofitClient.newInstance(RetrofitClient.java:14)
at tetimer.TeCampChecker.<init>(TeCampChecker.java:19)
at tetimer.TeServerTimer.scheduleTime(TeServerTimer.java:26)
at main.Main.main(Main.java:54)

我认为因为 RxJava 适配器正在使用 JDK 8 和我正在使用的转换器工厂,所以这是我的代码:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(getBaseUrl())
            .client(okHttpClient)
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(TikXmlConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();

----------GRADLE-------------

def tikVersion = "0.8.13"
def retrofitVersion = "2.9.0"

compile "com.squareup.retrofit2:retrofit:${retrofitVersion}"
compile "com.squareup.retrofit2:converter-gson:${retrofitVersion}"
compile "com.squareup.retrofit2:adapter-rxjava2:${retrofitVersion}"
compile 'com.squareup.okhttp3:logging-interceptor:4.8.1'

compileOnly("com.tickaroo.tikxml:annotation:${tikVersion}")
compile "com.tickaroo.tikxml:core:${tikVersion}"
compile "com.tickaroo.tikxml:retrofit-converter:${tikVersion}"

annotationProcessor "com.tickaroo.tikxml:auto-value-tikxml:${tikVersion}"
annotationProcessor "com.tickaroo.tikxml:processor:${tikVersion}"

compile 'io.reactivex.rxjava3:rxjava:3.0.0'

谁能告诉我发生了什么以及如何解决它。

【问题讨论】:

    标签: java api retrofit2 rx-java java-7


    【解决方案1】:

    问题是因为 Java 版本不匹配。参考WikipediaJava class file:

    Java SE 10 = 54

    Java SE 9 = 53

    Java SE 8 = 52

    Java SE 7 = 51

    Java SE 6.0 = 50

    因为在编译时您使用的是更高的 JDK,而在运行时使用的是更低的 JDK。

    【讨论】:

    • 是的,我知道 RxJava 改造适配器、TikXmlConverterFactory 和 GsonConverterFactory 使用 java 8。
    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2016-11-24
    相关资源
    最近更新 更多