如何获取Gradle使用的Java编译-encoding选项默认值?
-encoding选项的默认值查询方法 问题描述
我想了解Gradle/javac使用的-encoding选项的默认值。我尝试了以下代码:
tasks.withType(JavaCompile) { println 'Compiler args: ' + options.compilerArgs println 'encoding args: ' + options.encoding }
对应的输出为:
Compiler args: []
encoding args: null
我希望在显式设置该选项前,知晓当前平台的默认值。我已了解如何通过Gradle显式设置java compile -encoding选项的值:
compileJava { //uncomment the value you want to use. options.encoding = "windows-1252" //options.encoding = "UTF-8" //options.encoding = "US-ASCII" }
但我的目的是找到默认值,有什么建议吗?
注意:本问题并非关于运行时选项-Dfile.encoding,而是编译时选项-encoding。
查询建议
直接查看javac原生默认逻辑:Gradle的JavaCompile任务底层调用标准javac工具,当未显式指定
-encoding时,javac默认采用当前平台的默认字符集。你可以通过终端执行以下命令快速验证:javac -encoding命令会因参数错误报错,但在输出的用法提示中,会明确说明默认编码为平台字符集;或者执行
java -Dfile.encoding查看当前JVM的平台字符集值,javac编译时的默认编码与该值一致(注意:这只是取值同源,并非运行时选项本身)。查看Gradle任务的实际执行日志:添加
--info参数运行Gradle编译任务,比如:./gradlew compileJava --info在日志中找到JavaCompile任务调用javac的完整命令行,若未显式携带
-encoding参数,说明此时使用的是javac的默认编码,结合javac文档即可确认该默认值为平台字符集。通过测试代码反推:创建包含非ASCII字符(如中文、特殊符号)的Java源文件,不指定编码执行编译,再反编译生成的class文件查看字符是否正常显示,对比不同编码的编译结果,即可验证当前默认编码。
内容的提问来源于stack exchange,提问作者CodeBot

