java - Gradle 使用 2 个不同的 JDK

标签 java android gradle java-8 java-10

我想在我的 PC java 应用程序中使用 Java 9 和 10 的一些功能,这些应用程序与 android 应用程序具有通用代码。 当我使用 jdk 10 或 jdk 9 时,android 应用程序正在构建,但它没有启动(它抛出了很多错误)。当我对整个项目使用 jdk 8 时,一切正常,没有任何错误。当我使用 2 个不同的 jdk 手动构建项目时,一切正常。 我尝试为 JavaVersion.Version_1_7 的 android 应用程序设置 targetCompabilitysourceCompability 但它没有帮助。我尝试对 Java 9 和 Java 10 使用不同的 jdk,但这对解决这个问题没有帮助。

我想用 jdk8 构建 android 应用程序和通用组件,用 jdk10 构建其他组件。是否可以在不使用 bash 等外部工具的情况下强制 gradle 为特定项目使用不同的 jdk?

我的项目结构如下:

build.gradle
common-component(jdk8)/build.gradle
PC(jdk 10)/build.gradle
device-Android(jdk 8)/build.gradle

最佳答案

我找到了解决方法。它适用于 gradle 4.7(此版本中添加了 Java 10 支持)。此 hack/解决方法需要使用较低的 JDK(如 Oracle JDK 8 或 OpenJDK)启动项目。我们可以使用更高版本的 JDK 构建一些组件,但是如果我们指定高于 1.8 的 targetcompablility,我们将无法使用 JDK10 构建 JDK 项目然后将其与 JDK8 一起使用。它仅适用于 java 项目,可能不适用于 android 插件和其他 JVM 语言。

PC 应用程序的 build.gradle 的一部分:

project (':pc-client') {
    dependencies {
        compile project(':net-default')
        testcompile JUNIT
    }
    compileJava {
        options.fork = true
        options.forkOptions.javaHome = file('/usr/lib/jvm/java-10-oracle')
        targetCompatibility = 1.10
        sourceCompatibility = 1.10
    }

   compileTestJava {
        options.fork = true
        options.forkOptions.javaHome = file('/usr/lib/jvm/java-10-oracle')
        targetCompatibility = 1.10
        sourceCompatibility = 1.10
    }
}

关于java - Gradle 使用 2 个不同的 JDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50349011/

相关文章:

java - 如何检查Android上的互联网访问? InetAddress 永远不会超时

android - 为什么intellij必须为我制作的每个android项目安装不同的gradle版本

java - EasyMock:未检查严格模拟的时间行为

java - javaFX中是否有等效的枚举属性类型?

android - Google Play 显示 - 您的设备与此版本不兼容,无法下载该应用程序

java - 可点击的纹理

android-studio - 在哪里使用Android Studio安装Gradle包装器插件

java - 通过注释映射实体的 Hibernate Search 的替代方案

Java 11 发送没有正文的 HTTP post 请求

java - Spring GET相同的URL但不同的参数类型