Java 如何使gradle在编译时使用正确的JDK?
我们使用gradle构建Java项目,一些基于JDK7,一些基于JDK8。我知道org.gradle.java.home属性,但在我看来它似乎有缺陷 如果我在“~/.gradle/gradle.properties”中配置它,这将迫使我对所有gradle项目使用相同的JDK 如果我在“/my git project/gradle.properties”中配置它,这将迫使我在共享git存储库中放置对本地JDK安装的引用。JDK的路径不属于那里 我基本上希望在“~/.gradle/gradle.properties”中有类似的内容:Java 如何使gradle在编译时使用正确的JDK?,java,gradle,build.gradle,gradlew,Java,Gradle,Build.gradle,Gradlew,我们使用gradle构建Java项目,一些基于JDK7,一些基于JDK8。我知道org.gradle.java.home属性,但在我看来它似乎有缺陷 如果我在“~/.gradle/gradle.properties”中配置它,这将迫使我对所有gradle项目使用相同的JDK 如果我在“/my git project/gradle.properties”中配置它,这将迫使我在共享git存储库中放置对本地JDK安装的引用。JDK的路径不属于那里 我基本上希望在“~/.gradle/gradle.pr
systemProp.jdk8=/my/local/path/to/jdk8
systemProp.jdk7=/my/local/path/to/jdk7
org.gradle.java.home=$systemProp.jdk8
在“/my git project/gradle.properties”的源代码管理下:
systemProp.jdk8=/my/local/path/to/jdk8
systemProp.jdk7=/my/local/path/to/jdk7
org.gradle.java.home=$systemProp.jdk8
这方面的最佳解决方案/解决方法是什么?我们这样处理这个问题:
The one who starts the build is responsible for properly setting JAVA_HOME
在开发人员的机器上,这可能是脆弱的。但是,如果您从专用构建服务器构建和部署,它工作得非常好。这更多的是一个过程问题,而不是一个Gradle或Java问题。最终,您必须强制每个人指定他们的各种JAVA_主页,而不必过于繁重。您有几个选择:
这可能是你最好的选择。您有一个签入的模板文件,但每个人都必须将其复制到gradle.properties并填写其特定值。您需要设置CI以执行类似的操作,或者签入gradle.CI.properties之类的内容并让CI使用它。但是,每个人只需要做一次,而不是每次构建一次。不幸的是,他们将不得不在每次模板更改时更新他们的个人文件(除非您编写一些代码来这样做)。这实际上是一个java问题,而不是gradle问题,如果java不提供切换jdk或查询可用jdk版本的机制,我看不出gradle如何处理这个问题——事实上它也没有。任何基于java的工具都存在着完全相同的问题,一切都取决于java_HOME。我等不及要支持JDKsI正在做的工作(3),这很好。如果您是从Android的角度来看这一点的话,还可以使用sourceTarget和compileTarget枚举编译选项{}闭包。