使用Java 9 JDK定位Java 6会发出警告

Sam*_*Sam 8 java release-management gradle java-9 java-10

我正在尝试使用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"])
}
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

我知道这些可以被抑制(它说就在那里),但我没想到会看到它们.当使用--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")))
}
Run Code Online (Sandbox Code Playgroud)

我是否错误地设置了编译器参数?有没有不设置方式/复位sourcetarget

Nam*_*man 6

虽然这不是来自官方消息来源,但警告似乎与JEP182 #Regring javac -source和-target选项政策中所述的"一加三后"条款 一致

JDK 9将实施"一加三后"支持策略,这意味着该版本将识别1.9/9,1.8/8,1.7/7和1.6/6.该政策将在JDK 10中继续实施.

因此理想情况下,应该使用JDK10删除1.6,警告对于客户了解策略有良好的效果.

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

  • JDK 10将继续支持`--release 6`.更多相关信息:http://mail.openjdk.java.net/pipermail/jdk-dev/2017-December/000321.html (6认同)