8

我正在尝试使用 JDK 9 构建一个项目,因为使用--releasejavac 的参数意味着它可以为旧版本构建,而无需安装相应的 JDK/JRE。我需要支持 Java 6,所以我预先存在的设置需要 Java 6 用于 bootstrapClasspath,另外需要 JDK 8 或 9 用于 gradle 和 IDE。我想取消 JDK 6,而只使用 9,并稍微整理一下构建。

我的新 build.gradle 具有以下配置:

tasks.withType(JavaCompile) {
    options.compilerArgs.addAll(['--release', '6', "-Xlint"])
}

,和选项没有设置,因为我知道sourceCompatibility参数现在处理这个。targetCompatibilitybootstrapClasspath--release

我收到以下警告:

warning: [options] source value 1.6 is obsolete and will be removed in a future release
warning: [options] target value 1.6 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.

我知道这些可以被压制(它在那里说),但我没想到会看到它们。使用--release [7-9]这些警告构建时不存在。

对于上下文,这是旧的(现在未使用)“2x JDK”配置:

sourceCompatibility = "1.6"
targetCompatibility = "1.6"

tasks.withType(JavaCompile) {
    options.bootstrapClasspath = new SimpleFileCollection(Arrays.asList(new File("$JDK6_HOME/jre/lib/rt.jar")))
}

我是否错误地设置了编译器参数?有没有办法不设置/取消设置sourcetarget

4

1 回答 1

6

尽管这不是来自官方来源,但警告似乎与JEP182#Policy for Retiring javac -source and -target Options中所述的“一加三退”条款 一致

JDK 9 将实施“一加三退”支持政策,这意味着 1.9/9、1.8/8、1.7/7 和 1.6/6 将在该版本中得到认可。该策略将在 JDK 10 中继续。

因此,理想情况下,1.6 应该与 JDK10 一起删除,警告对客户了解该策略有很好的效果。

编辑:然而,正如Alan 在评论中指出的那样, JDK 10 将继续支持--release 6此邮件列表中 的说明

于 2017-12-14T14:17:40.463 回答