此文档页面专门针对 Scala 2 中提供的功能,这些功能已在 Scala 3 中删除或被替代功能所取代。除非另有说明,此页面中的所有代码示例均假定你使用的是 Scala 2。
简介
Scala 编译器 scalac 提供了各种编译器选项或标志,它们可以更改编译器的默认行为。一些选项只是以诊断或警告的形式生成更多编译器输出,而另一些选项则会更改编译结果。
Scala 命令 scala(用于运行脚本或已编译代码)接受与 scalac 编译器相同的选项,以及更多用于确定如何运行程序的选项。
可以在命令行中为 scalac 指定选项,或在构建工具或 IDE 的配置中指定选项。
Scala 发行版包含一个 man 页面。如果 Scala 已作为系统命令安装,则可以通过 man scalac 获得该文档。
如何使用编译器选项
使用 scalac 的编译器选项
scalac [ <options> ] <source files>
布尔标志以通常的方式指定
scalac -Werror -Xlint Hello.scala
需要参数的选项使用“冒号”语法
scalac -Vprint:parser,typer
仅接受单个参数的选项接受传统语法
scalac -d /tmp
按照惯例,如果选项显示“详细”输出,则选项具有前缀 -V;-W 用于管理警告;-X 用于修改工具行为的扩展选项;-Y 用于支持有限的私有选项,其中 Y 可能建议分叉行为。一些选项具有历史别名,例如 -Xfatal-warnings 适用于 -Werror。
在 Scala 2 中,可以通过在发行版中运行工具来列出默认路径
scala scala.tools.util.PathResolver [ <options> ]
这有助于调试选项中的错误,例如 --classpath。
使用 sbt 的编译器选项
以下是 sbt 中 scalacOptions 设置的典型配置
scalacOptions ++= Seq( // use ++= to add to existing options
"-encoding", "utf8", // if an option takes an arg, supply it on the same line
"-feature", // then put the next option on a new line for easy editing
"-language:implicitConversions",
"-language:existentials",
"-unchecked",
"-Werror",
"-Xlint", // exploit "trailing comma" syntax so you can add an option without editing this line
) // for "trailing comma", the closing paren must be on the next line
惯例是始终使用 ++= 追加到设置,并每行提供一个选项。
通常,最后一个选项将带有尾随逗号,以便在添加选项时 git diff 更简洁一些。
标准设置
当前开发环境中支持且将在未来版本中支持的一组标准选项。
-
-Dproperty=value -
将 -Dproperty=value 直接传递到运行时系统。
-
-J<flag> -
将标志直接传递到运行时系统。
-
-P PLUGIN:OPT1,PLUGIN:OPT2 -
向插件传递选项
-
-V -
打印冗余选项的概要。
-
-W -
打印警告选项的概要。
-
-Werror或-Xfatal-warnings -
如果存在任何警告,则编译失败。
-
-X -
打印高级选项的概要。
-
-Y -
打印私有选项的概要。
-
-bootclasspath PATH或--boot-class-path PATH -
覆盖引导类文件的路径。
-
-classpath PATH或-cp PATH或--class-path PATH -
指定查找用户类文件的位置。
默认值:.
-
-d DIRECTORY|JAR -
生成类文件的目标位置。
默认值:.
-
-dependencyfile FILE或--dependency-file FILE -
设置依赖项跟踪文件。
默认值:.scala_dependencies
-
-deprecation或--deprecation -
针对已弃用 API 的用法发出警告并指出位置。
-
-encoding ENCODING或--encoding ENCODING -
指定源文件使用的字符编码。
默认值:UTF-8
-
-explaintypes或--explain-types -
更详细地解释类型错误。
-
-extdirs PATH或--extension-directories PATH -
覆盖已安装扩展的位置。
-
-feature或--feature -
针对应显式导入的功能的用法发出警告并指出位置。
-
-g:LEVEL -
设置生成调试信息的级别。(none、source、line、[vars]、notailcalls)
默认值:vars
-
-g:none-g:source-g:line-g:vars-g:notailcalls
-
-help或--help -
打印标准选项的概要
-
-javabootclasspath PATH或--java-boot-class-path PATH -
覆盖 Java 引导类路径。
默认值:
-
-javaextdirs PATH或--java-extension-directories PATH -
覆盖 Java extdirs 类路径。
-
-language:FEATURE1,FEATURE2或--language:FEATURE1,FEATURE2 -
启用或禁用语言功能
-
-language:dynamics允许 scala.Dynamic 的直接或间接子类
-language:existentials可以编写和推断存在类型(除了通配符类型)
-language:higherKinds允许更高阶类型
-language:implicitConversions允许定义名为视图的隐式函数
-language:postfixOps允许后缀运算符表示法,例如
1 to 10 toList(不推荐)-language:reflectiveCalls允许对结构类型成员进行反射访问
-language:experimental.macros允许宏定义(除了实现和应用)
-
-no-specialization或--no-specialization -
忽略 @specialize 注释。
-
-nobootcp或--no-boot-class-path -
不要为 Scala jar 使用引导类路径。
-
-nowarn或--no-warnings -
不生成任何警告。
-
-opt:OPTIMIZATION1,OPTIMIZATION2 -
启用优化
-
-opt:unreachable-code消除无法到达的代码、不保护任何指令的异常处理程序、冗余元数据(调试信息、行号)。
-opt:simplify-jumps简化分支指令,消除不必要的指令。
-opt:compact-locals消除局部变量序列中的空槽。
-opt:copy-propagation消除冗余的局部变量和未使用的值(包括闭包)。启用无法到达的代码。
-opt:redundant-casts使用类型传播分析消除冗余的强制类型转换。
-opt:box-unbox消除同一方法中的装箱-拆箱对(还包括元组、xRef、值类实例)。启用无法到达的代码。
-opt:nullness-tracking跟踪局部变量的空值/非空值并应用优化。
-opt:closure-invocations将闭包调用重写为实现方法。
-opt:allow-skip-core-module-init允许消除标准库的核心模块的未使用的模块加载(例如 Predef、ClassTag)。
-opt:assume-modules-non-null假设加载模块绝不会导致空值(如果在模块的超级构造函数中访问该模块,则会发生这种情况)。
-opt:allow-skip-class-loading允许可以跳过或延迟类加载的优化。
-opt:inline根据 -Yopt-inline-heuristics 和 -opt-inline-from 内联方法调用。
-opt:l:none禁用优化。优先级:
-opt:l:none,+box-unbox/-opt:l:none -opt:box-unbox不会启用 box-unbox。-opt:l:default启用默认优化:无法到达的代码。
-opt:l:method启用方法内优化:无法到达的代码、简化跳转、紧凑局部变量、复制传播、冗余强制类型转换、装箱-拆箱、空值跟踪、闭包调用、允许跳过核心模块初始化、假设模块非空、允许跳过类加载。
-opt:l:inline启用跨方法优化(注意:内联需要 -opt-inline-from):l:method、inline。
-
-opt-inline-from PATTERNS1,PATTERNS2 -
允许内联的类文件名的模式,
help了解详情。 -
-opt-warnings:WARNING1,WARNING2 -
启用优化器警告
-
-opt-warnings:none无优化器警告。
-opt-warnings:at-inline-failed-summary如果存在无法内联的 @inline 方法调用,则提供一行摘要。
-opt-warnings:at-inline-failed对于无法内联的每个 @inline 方法调用,都会显示一条详细的警告。
-opt-warnings:any-inline-failed对于启发式算法选择内联的每个调用站点,但无法内联的,都会显示一条详细的警告。
-opt-warnings:no-inline-mixed在混合编译中,在 java 源代码中定义的方法的调用站点发出警告(无法在没有字节码的情况下做出内联决策)。
-opt-warnings:no-inline-missing-bytecode如果无法在编译类路径中找到类或成员的字节码,则发出警告,因为无法做出内联决策。
-opt-warnings:no-inline-missing-attribute如果 Scala 类文件没有 ScalaInlineInfo 属性,则发出警告,因为无法做出内联决策。
-
-optimize或-optimise -
启用优化。
-
-print或--print -
打印已移除 Scala 特定功能的程序。
-
-release RELEASE或--release RELEASE -
针对特定版本的 Java 平台进行编译。支持的目标:6、7、8、9
-
-sourcepath PATH或--source-path PATH -
指定源文件的位置。
-
-target:TARGET或--target:TARGET -
对象文件的目标平台。([8]、9、10、11、12)
默认值:8
-
-target:8-target:9-target:10-target:11-target:12
-
-toolcp PATH或--tool-class-path PATH -
添加到运行器类路径。
-
-unchecked或--unchecked -
启用附加警告,其中生成代码依赖于假设。
-
-uniqid或--unique-id -
在调试输出中唯一标记所有标识符。
-
-usejavacp或--use-java-class-path -
在类路径解析中使用 java.class.path。
-
-usemanifestcp或--use-manifest-class-path -
在类路径解析中使用清单。
-
-verbose或--verbose -
输出有关编译器正在执行的操作的消息。
-
-version或--version -
打印产品版本并退出。
-
@<file> -
包含编译器参数(选项和源文件)的文本文件
高级设置
-
-Xcheckinit -
包装字段访问器,以便在未初始化访问时抛出异常。
-
-Xdev -
表示用户是开发人员 - 对任何看起来不妥当的事项发出警告
-
-Xdisable-assertions -
不生成任何断言或假设。
-
-Xelide-below ARG -
如果方法优先级低于参数,则忽略对 @elidable 方法的调用
默认值:-2147483648
-
-Xexperimental -
语言分叉扩展的旧坟场。
-
-Xfuture -
已被 -Xsource 替换。
-
-Xgenerate-phase-graph FILE -
将阶段图(输出 .dot 文件)生成到 fileX.dot。
-
-Xlint:WARNING1,WARNING2 -
启用推荐的警告
-
-Xlint:adapted-args如果修改参数列表以匹配接收器,则发出警告。
-Xlint:nullary-unit当空元方法返回 Unit 时发出警告。
-Xlint:inaccessible对方法签名中不可访问的类型发出警告。
-Xlint:nullary-override当非空元的
def f()覆盖空元的def f时发出警告。-Xlint:infer-any当类型参数推断为
Any时发出警告。-Xlint:missing-interpolator字符串文字似乎缺少插值器 ID。
-Xlint:doc-detachedScaladoc 注释似乎与其元素分离。
-Xlint:private-shadow私有字段(或类参数)遮盖了超类的字段。
-Xlint:type-parameter-shadow局部类型参数遮盖了已在范围内的类型。
-Xlint:poly-implicit-overload参数化重载隐式方法不可作为视图边界显示。
-Xlint:option-implicitOption.apply 使用了隐式视图。
-Xlint:delayedinit-select选择 DelayedInit 的成员。
-Xlint:package-object-classes在包对象中定义的类或对象。
-Xlint:stars-align模式序列通配符必须与序列组件对齐。
-Xlint:constant常量算术表达式的求值导致错误。
-Xlint:unused启用 -Wunused:imports,privates,locals,implicits。
-Xlint:nonlocal-return返回语句将异常用于流程控制。
-Xlint:implicit-not-found检查 @implicitNotFound 和 @implicitAmbiguous 消息。
-Xlint:serial特质和不可序列化的类上的 @SerialVersionUID。
-Xlint:valpattern启用 val 定义中的模式检查。
-Xlint:eta-zero对零元方法的 eta 扩展(而不是自动应用)发出警告。
-Xlint:eta-sam对 eta 扩展发出警告,以满足未显式用 @FunctionalInterface 注释的 Java 定义的功能接口。
-Xlint:deprecation启用已弃用的 lint。
-
-Xmacro-settings OPTION1,OPTION2 -
宏的自定义设置。
-
-Xmain-class PATH -
清单的 Main-Class 条目的类(仅与 -d jar 一起使用时有用)
-
-Xmaxerrs ARG -
要打印的最大错误数
默认值:100
-
-Xmaxwarns ARG -
要打印的最大警告数
默认值:100
-
-Xmigration VERSION -
对自版本以来行为可能已更改的构造发出警告。
默认值:none
-
-Xmixin-force-forwarders:MODE -
在从特质继承具体方法的类中生成转发器方法。默认值:
默认值:true,help可列出选项。true
-
-Xmixin-force-forwarders:true始终生成 mixin 转发器。
-Xmixin-force-forwarders:junit为 JUnit 注释的方法生成 mixin 转发器(JUnit 4 不支持默认方法)。
-Xmixin-force-forwarders:false仅生成程序正确性所需的 mixin 转发器。
-
-Xno-forwarders -
在镜像类中不生成静态转发器。
-
-Xno-patmat-analysis -
不执行穷尽性/不可达性分析。此外,忽略 @switch 注释。
-
-Xno-uescape -
禁用对 \u unicode 转义的处理。
-
-Xnojline -
不使用 JLine 进行编辑。
-
-Xplugin PATHS1,PATHS2 -
从每个类路径加载插件。
-
-Xplugin-disable PLUGIN1,PLUGIN2 -
按名称禁用插件。
-
-Xplugin-list -
打印已加载插件的概要。
-
-Xplugin-require PLUGIN1,PLUGIN2 -
如果未加载命名的插件,则中止。
-
-Xpluginsdir PATH -
搜索插件存档的路径。
默认值:
-
-Xprompt -
在每个错误后显示提示(调试选项)。
-
-Xreporter CLASSNAME -
为编译器消息指定自定义报告器。
默认值:scala.tools.nsc.reporters.ConsoleReporter
-
-Xresident -
编译器保持驻留:从标准输入读取源文件名。
-
-Xscript OBJECT -
将源文件视为脚本并将其包装在 main 方法中。
-
-Xsource VERSION -
将编译器输入视为指定版本的 Scala 源,请参阅 scala/bug#8126。
默认值:2.13.0
-
-Xsource-reader CLASSNAME -
指定用于读取源文件的方法。
-
-Xverify -
验证生成的字节码中的泛型签名。
-
-Xxml:PROPERTY1,PROPERTY2 -
配置 XML 解析。
-
-Xxml:coalescing将 PCData 转换为 Text 并合并同级节点
详细设置
-
-Vbrowse ARG或-Ybrowse ARG -
在阶段后浏览抽象语法树
-
-Vclasspath或-Ylog-classpath -
输出正在应用的类路径相关信息。
-
-Vdebug或-Ydebug -
增加调试输出量。
-
-Vdoc或-Ydoc-debug -
跟踪 Scaladoc 活动。
-
-Vfree-terms或-Xlog-free-terms -
当实体化创建自由项时打印一条消息。
-
-Vfree-types或-Xlog-free-types -
当实体化诉诸于生成自由类型时打印一条消息。
-
-Vhot-statistics或-Yhot-statistics -
启用
-Vstatistics以打印热统计信息。 -
-Vide或-Yide-debug -
使用交互式编译器生成、验证和输出树。
-
-Vimplicit-conversions或-Xlog-implicit-conversions -
每当插入隐式转换时打印一条消息。
-
-Vimplicits或-Xlog-implicits -
打印依赖的缺失隐式项。
-
-Vimplicits-verbose-tree -
显示链中所有中间隐式项。
-
-Vimplicits-max-refined ARG -
用于打印精炼类型的最大字符数,缩写为
默认值:F {...}0
-
-Vtype-diffs -
将找到/需要的错误消息打印为彩色差异。
-
-Vinline PACKAGE/CLASS.METHOD或-Yopt-log-inline PACKAGE/CLASS.METHOD -
打印内联程序活动的摘要;
_打印全部,前缀匹配进行选择。 -
-Vissue或-Yissue-debug -
当上下文发出错误时打印堆栈跟踪。
-
-Vlog ARG或-Ylog ARG -
在阶段期间记录操作
-
-Vmacro或-Ymacro-debug-verbose -
跟踪宏活动:编译、生成合成、类加载、扩展、异常。
-
-Vmacro-lite或-Ymacro-debug-lite -
跟踪宏活动,输出较少。
-
-Vopt PACKAGE/CLASS.METHOD或-Yopt-trace PACKAGE/CLASS.METHOD -
跟踪方法的优化器进度;
_打印全部,前缀匹配进行选择。 -
-Vpatmat或-Ypatmat-debug -
跟踪模式匹配转换。
-
-Vphases或-Xshow-phases -
打印编译器阶段的概要。
-
-Vpos或-Ypos-debug -
跟踪位置验证。
-
-Vprint ARG或-Xprint ARG -
在阶段后打印程序
-
-Vprint-args FILE或-Xprint-args FILE -
将所有编译器参数打印到指定位置。使用 - 向报告器回显。
默认值:-
-
-Vprint-pos或-Xprint-pos -
打印树位置,作为偏移量。
-
-Vprint-types或-Xprint-types -
打印树类型(调试选项)。
-
-Vquasiquote或-Yquasiquote-debug -
跟踪准引号。
-
-Vreflective-calls或-Xlog-reflective-calls -
在生成反射方法调用时打印消息
-
-Vreify或-Yreify-debug -
跟踪具体化。
-
-Vshow ARG或-Yshow ARG -
(需要 -Xshow-class 或 -Xshow-object)在阶段后显示
-
-Vshow-class CLASS或-Xshow-class CLASS -
显示类的内部表示。
-
-Vshow-member-pos OUTPUT STYLE或-Yshow-member-pos OUTPUT STYLE -
显示成员的开始和结束位置(暗示 -Yrangepos)
-
-Vshow-object OBJECT或-Xshow-object OBJECT -
显示对象的内部表示。
-
-Vshow-symkinds或-Yshow-symkinds -
在符号名称旁边打印缩写的符号种类。
-
-Vshow-symowners或-Yshow-symowners -
在符号名称旁边打印所有者标识符。
-
-Vstatistics ARG或-Ystatistics ARG -
打印特定阶段的编译器统计信息(默认值:parser、typer、patmat、erasure、cleanup、jvm)
默认值:parser,typer,patmat,erasure,cleanup,jvm
-
-Vsymbols或-Yshow-syms -
在每个阶段后打印 AST 符号层次结构。
-
-Vtyper或-Ytyper-debug -
跟踪类型分配。
私有设置
-
-Ybackend-parallelism ARG -
后端的最大工作线程
默认值:1
最小值:1
最大值:16
-
-Ybackend-worker-queue ARG -
后端线程工作队列大小
默认值:0
最小值:0
最大值:1000
-
-Ybreak-cycles -
尝试打破在类型化过程中遇到的循环
-
-Ycache-macro-class-loader:POLICY -
动态加载的宏的类加载器缓存策略。默认值:
默认值:none,help可列出选项。none
-
-Ycache-macro-class-loader:none不缓存类加载器
-Ycache-macro-class-loader:last-modified缓存类加载器,使用文件上次修改时间来失效
-Ycache-macro-class-loader:always缓存类加载器,不失效
-
-Ycache-plugin-class-loader:POLICY -
动态加载的编译器插件的类加载器缓存策略。默认:
默认值:none,help列出选项。none
-
-Ycache-plugin-class-loader:none不缓存类加载器
-Ycache-plugin-class-loader:last-modified缓存类加载器,使用文件上次修改时间来失效
-Ycache-plugin-class-loader:always缓存类加载器,不失效
-
-Ycheck ARG -
在阶段结束时检查树
-
-Ycompact-trees -
显示树时使用紧凑型树打印机。
-
-Ydelambdafy:STRATEGY -
用于将 lambda 转换为 JVM 代码的策略。(inline、[method])
默认:method
-
-Ydelambdafy:inline-Ydelambdafy:method
-
-Ydump-classes DIR -
将生成的字节码转储到 .class 文件(对于利用内存中类加载器的反射编译很有用)。
-
-Ygen-asmp DIR -
生成 .asmp 文件的并行输出目录(即 ASM Textifier 输出)。
-
-Yimports IMPORT1,IMPORT2 -
自定义根导入,默认是
java.lang,scala,scala.Predef。 -
-Yjar-compression-level ARG -
写入 jar 文件时使用的压缩级别
默认:-1
最小:-1
最大:9
-
-Ymacro-annotations -
启用对宏注释的支持,以前在宏天堂中。
-
-Ymacro-classpath PATH -
用于反射加载宏实现的类路径,默认是编译类路径。
-
-Ymacro-expand:POLICY -
控制宏的扩展,对 scaladoc 和演示编译器很有用。([normal]、none、discard)
默认:normal
-
-Ymacro-expand:normal-Ymacro-expand:none-Ymacro-expand:discard
-
-Ymacro-global-fresh-names -
宏中的新名称是否在所有编译单元中都是唯一的
-
-Yno-completion -
在 REPL 中禁用 tab 补全。
-
-Yno-flat-classpath-cache或-YdisableFlatCpCaching -
不要跨编译器实例缓存 jar 中类路径元素的扁平类路径表示。
-
-Yno-generic-signatures -
禁止为 Java 生成泛型签名。
-
-Yno-imports -
在不导入 scala.、java.lang. 或 Predef 的情况下进行编译。
-
-Yno-predef -
在不导入 Predef 的情况下进行编译。
-
-Yopt-inline-heuristics:STRATEGY -
设置内联决策的启发式方法。(at-inline-annotated、everything、[default])
默认:default
-
-Yopt-inline-heuristics:at-inline-annotated-Yopt-inline-heuristics:everything-Yopt-inline-heuristics:default
-
-Ypatmat-exhaust-depth ARG -
关闭
默认值:20
最小值:10
最大值:2147483647
-
-Yprint-trees:STYLE -
启用 -Vprint 时打印树的方式。([text],compact,format,text+format)
默认值:text
-
-Yprint-trees:text-Yprint-trees:compact-Yprint-trees:format-Yprint-trees:text+format
-
-Yprofile-destination FILE -
分析输出 - 指定一个文件或
-表示控制台。 -
-Yprofile-enabled -
启用分析。
-
-Yprofile-external-tool ARG -
使用外部工具挂钩为某个阶段启用分析。通常仅对单个阶段有用(默认值:typer)
默认值:typer
-
-Yprofile-run-gc ARG -
在阶段之间运行 GC - 这可以让堆大小准确,但会花费更多时间。指定阶段列表或所有阶段(默认值:_)
默认值:_
-
-Yprofile-trace FILE -
以 Chrome Trace 格式捕获编译跟踪
默认值:profile.trace
-
-Yrangepos -
对语法树使用范围位置。
-
-Yrecursion ARG -
锁定符号时设置使用的递归深度。
默认值:0
最小值:0
最大值:2147483647
-
-Yreify-copypaste -
以可复制表示形式转储具体化树。
-
-Yrepl-class-based -
使用类来包装 REPL 片段,而不是对象
-
-Yrepl-outdir PATH -
将 REPL 生成的类文件写入给定的输出目录(使用 “” 生成临时目录)
-
-Yresolve-term-conflict:STRATEGY -
解决术语冲突。(package、object、[error])
默认值:error
-
-Yresolve-term-conflict:package-Yresolve-term-conflict:object-Yresolve-term-conflict:error
-
-Yscriptrunner CLASSNAME -
指定一个 scala.tools.nsc.ScriptRunner(default、resident、shutdown 或一个类名)。
默认:default
-
-Yskip ARG -
跳过阶段
-
-Ystop-after ARG或-stop ARG -
在阶段后停止
-
-Ystop-before ARG -
在阶段前停止
-
-Yvalidate-pos ARG -
在给定阶段后验证位置(暗示 -Yrangepos)阶段
警告设置
-
-Wdead-code或-Ywarn-dead-code -
识别出死代码时发出警告。
-
-Wextra-implicit或-Ywarn-extra-implicit -
定义了多个隐式参数部分时发出警告。
-
-Wmacros:MODE或-Ywarn-macros:MODE -
启用宏扩展的 lint 警告。默认值:
默认值:before,help可列出选项。before
-
-Wmacros:none生成未使用符号警告时,不要检查展开或其原始树。
-Wmacros:before仅检查未展开的用户编写代码,以查找未使用符号。
-Wmacros:after生成未使用符号警告时,仅检查展开树。
-Wmacros:both生成未使用符号警告时,检查用户编写代码和展开树。
-
-Wnumeric-widen或-Ywarn-numeric-widen -
在数字加宽时发出警告。
-
-Woctal-literal或-Ywarn-octal-literal -
对过时的八进制语法发出警告。
-
-Wself-implicit或-Ywarn-self-implicit -
当一个隐式解析为封闭的自我定义时发出警告。
-
-Wunused:WARNING1,WARNING2或-Ywarn-unused:WARNING1,WARNING2 -
启用或禁用特定的
unused警告 -
-Wunused:imports如果导入选择器未被引用,则发出警告。
-Wunused:patvars如果模式中绑定的变量未被使用,则发出警告。
-Wunused:privates如果私有成员未被使用,则发出警告。
-Wunused:locals如果本地定义未被使用,则发出警告。
-Wunused:explicits如果显式参数未被使用,则发出警告。
-Wunused:implicits如果隐式参数未被使用,则发出警告。
-Wunused:params启用 -Wunused:explicits,implicits。
-Wunused:linted-Xlint:unused。
-
-Wvalue-discard或-Ywarn-value-discard -
当非 Unit 表达式结果未被使用时发出警告。
-
-Xlint:WARNING1,WARNING2 -
启用推荐的警告
-
-Xlint:adapted-args如果修改参数列表以匹配接收器,则发出警告。
-Xlint:nullary-unit当空元方法返回 Unit 时发出警告。
-Xlint:inaccessible对方法签名中不可访问的类型发出警告。
-Xlint:nullary-override当非空元的
def f()覆盖空元的def f时发出警告。-Xlint:infer-any当类型参数推断为
Any时发出警告。-Xlint:missing-interpolator字符串文字似乎缺少插值器 ID。
-Xlint:doc-detachedScaladoc 注释似乎与其元素分离。
-Xlint:private-shadow私有字段(或类参数)遮盖了超类的字段。
-Xlint:type-parameter-shadow局部类型参数遮盖了已在范围内的类型。
-Xlint:poly-implicit-overload参数化重载隐式方法不可作为视图边界显示。
-Xlint:option-implicitOption.apply 使用了隐式视图。
-Xlint:delayedinit-select选择 DelayedInit 的成员。
-Xlint:package-object-classes在包对象中定义的类或对象。
-Xlint:stars-align模式序列通配符必须与序列组件对齐。
-Xlint:constant常量算术表达式的求值导致错误。
-Xlint:unused启用 -Wunused:imports,privates,locals,implicits。
-Xlint:nonlocal-return返回语句将异常用于流程控制。
-Xlint:implicit-not-found检查 @implicitNotFound 和 @implicitAmbiguous 消息。
-Xlint:serial特质和不可序列化的类上的 @SerialVersionUID。
-Xlint:valpattern启用 val 定义中的模式检查。
-Xlint:eta-zero对零元方法的 eta 扩展(而不是自动应用)发出警告。
-Xlint:eta-sam对 eta 扩展发出警告,以满足未显式用 @FunctionalInterface 注释的 Java 定义的功能接口。
-Xlint:deprecation启用已弃用的 lint。
特定于 IDE 的设置
-
-Ypresentation-any-thread -
允许从任何线程使用演示编译器
-
-Ypresentation-debug -
为演示编译器启用调试输出。
-
-Ypresentation-delay ARG -
在开始类型检查之前等待键入后的毫秒数
默认值:0
最小值:0
最大值:999
-
-Ypresentation-log FILE -
将演示编译器事件记录到文件中
-
-Ypresentation-replay FILE -
从文件中重播演示编译器事件
-
-Ypresentation-strict -
不报告语法错误源中的类型错误。
-
-Ypresentation-verbose -
打印有关演示编译器任务的信息。
针对 JVM 的版本
针对 JVM 的应用程序或库可能希望指定目标版本。
-release 选项指定目标版本,例如“8”或“18”。
与 javac 的选项类似,它允许针对较早版本的 JDK 构建。它将针对该版本的 API 编译,并输出该版本的类文件。
弃用的选项 -target 不针对所需的 API 进行编译,而只指定目标类文件格式。
其他资源
编译阶段
- 解析器
- 将源代码解析为 AST,执行简单的去糖
- 命名器
- 解析名称,将符号附加到命名树
- 包对象
- 加载包对象
- 类型器
- 核心内容:对树进行类型化
- 超级访问器
- 在特质和嵌套类中添加超级访问器
- 扩展方法
- 为内联类添加扩展方法
- 腌制器
- 序列化符号表
- 引用检查
- 引用/覆盖检查,转换嵌套对象
- 模式匹配
- 转换匹配表达式
- 去柯里化
- 去柯里化,将函数值转换为匿名类
- 字段
- 合成访问器和字段,为惰性值添加位图
- 尾调用
- 用跳转替换尾调用
- 特化
- @specialized 驱动的类和方法特化
- 显式外部
- 此引用指向外部指针
- 擦除
- 擦除类型,为特质添加接口
- 后擦除
- 清理擦除的内联类
- lambda 提升
- 将嵌套函数移动到顶级
- 构造函数
- 将字段定义移动到构造函数中
- 扁平化
- 消除内部类
- 混合
- 混合组合
- 清理
- 特定于平台的清理,生成反射调用
- 去 lambda 化
- 移除 lambda
- jvm
- 生成 JVM 字节码
- 终端
- 编译运行期间的最后一个阶段