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>

將 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

消除同一個方法中的 box-unbox 配對(也包含 tuple、xRef、值類別實例)。啟用無法到達的程式碼。

-opt:nullness-tracking

追蹤局部變數的 nullness/non-nullness 並套用最佳化。

-opt:closure-invocations

將封閉呼叫改寫為實作方法。

-opt:allow-skip-core-module-init

允許消除標準函式庫核心模組(例如 Predef、ClassTag)的未使用的模組載入。

-opt:assume-modules-non-null

假設載入模組永遠不會導致 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

啟用預設最佳化:unreachable-code。

-opt:l:method

啟用方法內最佳化:unreachable-code、simplify-jumps、compact-locals、copy-propagation、redundant-casts、box-unbox、nullness-tracking、closure-invocations、allow-skip-core-module-init、assume-modules-non-null、allow-skip-class-loading。

-opt:l:inline

啟用跨方法最佳化(注意:內聯需要 -opt-inline-from):l:method、inline。

-opt-inline-from PATTERNS1,PATTERNS2

允許內聯的類別檔名稱範本,詳情請參閱 說明

-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

當 nullary 方法傳回 Unit 時發出警告。

-Xlint:inaccessible

針對方法簽章中無法存取的類型發出警告。

-Xlint:nullary-override

當非 nullary def f() 取代 nullary def f 時發出警告。

-Xlint:infer-any

當類型參數推論為 Any 時發出警告。

-Xlint:missing-interpolator

字串文字似乎缺少內插程式識別碼。

-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 展開以符合 Java 定義的功能介面時發出警告,該介面並未明確註解為 @FunctionalInterface。

-Xlint:deprecation

啟用已標記為過時的項目。

-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

總是產生混合轉發器。

-Xmixin-force-forwarders:junit

為 JUnit 註解方法產生混合轉發器(JUnit 4 不支援預設方法)。

-Xmixin-force-forwarders:false

僅產生程式正確性所需的混合轉發器。

-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 轉換為文字,並合併同層節點

詳細設定

-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
-Yopt-inline-heuristics:at-inline-annotated
-Yopt-inline-heuristics:everything
-Yopt-inline-heuristics:default
-Ypatmat-exhaust-depth ARG

off

預設: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

解決術語衝突。(套件、物件、[錯誤])

預設值:error
-Yresolve-term-conflict:package
-Yresolve-term-conflict:object
-Yresolve-term-conflict:error
-Yscriptrunner CLASSNAME

指定 scala.tools.nsc.ScriptRunner(預設值、常駐、關閉或類別名稱)。

預設: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

啟用巨集擴充的程式碼檢查警告。預設值: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

當未使用的非單位表達式結果時警告。

-Xlint:WARNING1,WARNING2

啟用建議的警告

-Xlint:adapted-args

如果修改參數清單以符合接收器,則發出警告。

-Xlint:nullary-unit

當 nullary 方法傳回 Unit 時發出警告。

-Xlint:inaccessible

針對方法簽章中無法存取的類型發出警告。

-Xlint:nullary-override

當非 nullary def f() 取代 nullary def f 時發出警告。

-Xlint:infer-any

當類型參數推論為 Any 時發出警告。

-Xlint:missing-interpolator

字串文字似乎缺少內插程式識別碼。

-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 展開以符合 Java 定義的功能介面時發出警告,該介面並未明確註解為 @FunctionalInterface。

-Xlint:deprecation

啟用已標記為過時的項目。

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 編譯,而僅指定目標類別檔案格式。

其他資源

編譯階段

parser
將來源程式碼解析為 AST,執行簡單的去糖
namer
解析名稱,將符號附加至已命名樹
packageobjects
載入套件物件
typer
核心部分:鍵入樹
superaccessors
在特質和巢狀類別中新增超級存取器
extmethods
為內嵌類別新增擴充方法
pickler
序列化符號表
refchecks
參考/覆寫檢查,轉譯巢狀物件
patmat
轉譯比對運算式
uncurry
解除柯里化,將函式值轉譯為匿名類別
fields
綜合存取器和欄位,為惰性值新增位元圖
tailcalls
以跳躍取代尾端呼叫
specialize
由 @specialized 驅動的類別和方法專門化
explicitouter
此參照指向外部指標
erasure
清除類型,為特質新增介面
posterasure
清除已清除的內嵌類別
lambdalift
將巢狀函式移至頂層
constructors
將欄位定義移至建構函式中
扁平化
消除內部類別
混合
混合組成
清理
特定於平台的清理,產生反射呼叫
刪除 lambda
移除 lambda
jvm
產生 JVM 位元組碼
終端
編譯執行期間的最後階段

此頁面的貢獻者