我不知道怎么把它修好。

场景:

我有一个用gradle构建的应用程序 应用程序使用JavaFX

我想要什么

使用一个变量(每个开发人员机器定义),该变量指向JDK的安装,将用于构建整个应用程序/测试/…

我想过要有gradle。属性文件,定义变量。类似的

JAVA_HOME_FOR_MY_PROJECT=<path to my desired JDK>

我不想要什么

将JAVA_HOME指向所需的JDK

我可以接受很多建议:

一个解决方案,它定义了一个系统环境变量,我可以在我的构建中检查。gradle脚本 在gradle.properties中定义的变量 仅为构建上下文重写JAVA_HOME变量(例如使用JAVA_HOME=<我在其他地方定义的特殊JDK路径定义>) 还有一件我没有想到的事

问题:

如何连接一个变量(如何定义,作为变量在gradle。属性,系统环境变量,…)到构建过程?

我有多个可用的JDK7,需要指向一个特殊版本(最小JDK_u版本)。

任何答案我都很感激,我很感激每一个指向正确方向的提示。


当前回答

对于Windows,打开cmd并进入你的项目根目录,然后执行如下命令:

gradlew build -Dorg.gradle.java.home="jdk_path"

我的JDK位于这个路径:C:\Program Files\Java\ JDK -11.0.5。

因此,对于我的案例,它看起来如下所示:

gradlew build -Dorg.gradle.java。家= " C: \ Program Files \ Java \ jdk-11.0.5”

另外,如果你想指定一个特定的变量,你可以这样做:

gradlew assembleDebug -Dorg.gradle.java.home=“E:\AndroidStudio\jre”

这个命令将用Debug变体编译你的项目,并在2个文件夹中输出2个apks(Debug + release)。

其他回答

Android工作室

文件>项目结构> SDK位置> JDK位置>

/usr/lib/jvm/java-8-openjdk-amd64

GL

安装JDK

由于这个答案,我能够确定我的问题是gradle选择了错误的JDK,即使JAVA_HOME设置正确。

我最初的评论是:

我的操作系统是Linux,我的JAVA_HOME指向正确的路径。我甚至使用过gradle build -Dorg.gradle.java。home=$JAVA_HOME来证明我的观点。我已经在Ubuntu中使用snap安装了gradle,我猜它使用了一些捆绑的JDK。

我的解决方案:

我已经删除了gradle使用snap,然后我手动安装gradle下载他们的二进制文件,并把它放在PATH。

我的结论是,Ubuntu上的gradle snap安装与一些较老的JDK捆绑在一起。

如果你使用的是Kotlin DSL,那么在build.gradle.kts中添加:

tasks.withType<JavaCompile> {
    options.isFork = true
    options.forkOptions.javaHome = File("C:\\bin\\jdk-13.0.1\\")
}

当然,我假设你有Windows操作系统,javac编译器在路径C:\bin\jdk-13.0.1\bin\javac。对于Linux操作系统,情况类似。

如果您正在使用gradle包装器执行,您可以像下面这样使用JDK路径运行该命令

。/ gradlew -Dorg.gradle.java.home = / jdk_path_directory

有一个Gradle插件可以自动下载/引导JDK:

https://plugins.gradle.org/plugin/com.github.rmee.jdk-bootstrap

还没有IDE集成,Windows上需要一个像样的shell。