如何在编译时使gradle使用正确的JDK?

时间:2016-01-29 10:03:23

标签: 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.properties':

systemProp.jdk8=/my/local/path/to/jdk8
systemProp.jdk7=/my/local/path/to/jdk7

在源代码管理下' /my-git-project/gradle.properties':

org.gradle.java.home=$systemProp.jdk8

最佳解决方案/解决方法是什么?

2 个答案:

答案 0 :(得分:1)

这更像是一个过程问题,而不是Gradle或Java问题。最终,你必须强迫每个人指定他们的各种JAVA_HOME而不会繁重。您有几种选择:

  1. 命令行:./ gradlew -Dorg.gradle.java.home = / path_to_jdk_directory
  2. 但是,当然,现在每个人每次运行构建时都必须在命令行中键入一些可怕的垃圾。

    1. gradle.properties并签入路径。然后,让每个人都使用相同的路径。
    2. 不是每个人都想要使用相同的路径,特别是如果你有Mac / Unix和PC用户。

      2B。每个人都可以使用自定义值修改本地gradle.properties,而不是使用相同的路径,然后永远不会签入修改。

      主要问题:某人完全会检查他们的本地价值并搞砸CI和其他所有人。

      1. gradle.properties.template签到,每个人都创建自己的gradle.properties;把gradle.properties放在.gitignore
      2. 这可能是你最好的选择。您有一个签入的模板文件,但每个人都必须将其复制到gradle.properties并填写其特定值。您需要设置CI以执行类似的操作,或者签入类似gradle.ci.properties的内容并让CI使用它。但是,每个人只需要执行一次而不是每次构建一次。不幸的是,每次模板更改时,他们都必须更新他们的个人文件(除非你写一些代码来做到这一点)。

答案 1 :(得分:0)

我们应对这样的问题:

The one who starts the build is responsible for properly setting JAVA_HOME

在开发者机器上可能很脆弱。但是,如果您从专用的构建服务器构建和部署,它可以完美地运行。