Scala 编译器选项

语言
此文档页面专门针对 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 的编译器选项

以下是 sbtscalacOptions 设置的典型配置

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-detached

Scaladoc 注释似乎与其元素分离。

-Xlint:private-shadow

私有字段(或类参数)遮盖了超类的字段。

-Xlint:type-parameter-shadow

局部类型参数遮盖了已在范围内的类型。

-Xlint:poly-implicit-overload

参数化重载隐式方法不可作为视图边界显示。

-Xlint:option-implicit

Option.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

在从特质继承具体方法的类中生成转发器方法。默认值:truehelp 可列出选项。

默认值: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

动态加载的宏的类加载器缓存策略。默认值:nonehelp 可列出选项。

默认值:none
-Ycache-macro-class-loader:none

不缓存类加载器

-Ycache-macro-class-loader:last-modified

缓存类加载器,使用文件上次修改时间来失效

-Ycache-macro-class-loader:always

缓存类加载器,不失效

-Ycache-plugin-class-loader:POLICY

动态加载的编译器插件的类加载器缓存策略。默认:nonehelp 列出选项。

默认值: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 警告。默认值:beforehelp 可列出选项。

默认值: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-detached

Scaladoc 注释似乎与其元素分离。

-Xlint:private-shadow

私有字段(或类参数)遮盖了超类的字段。

-Xlint:type-parameter-shadow

局部类型参数遮盖了已在范围内的类型。

-Xlint:poly-implicit-overload

参数化重载隐式方法不可作为视图边界显示。

-Xlint:option-implicit

Option.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 字节码
终端
编译运行期间的最后一个阶段

此页面的贡献者