Compiler options in the Kotlin Gradle plugin
Each release of Kotlin includes compilers for the supported targets: JVM, JavaScript, and native binaries for supported platforms.
These compilers are used by:
The IDE, when you click the Compile or Run button for your Kotlin project.
Gradle, when you call
gradle build
in a console or in the IDE.Maven, when you call
mvn compile
ormvn test-compile
in a console or in the IDE.
You can also run Kotlin compilers manually from the command line as described in the Working with command-line compiler tutorial.
How to define options
Kotlin compilers have a number of options for tailoring the compiling process.
Using a build script, you can specify additional compilation options. Use the compilerOptions
property of a Kotlin compilation task for it. For example:
Target the JVM
JVM compilation tasks are called compileKotlin
for production code and compileTestKotlin
for test code. The tasks for custom source sets are named according to their compile<Name>Kotlin
patterns.
The names of the tasks in Android Projects contain build variant names and follow the compile<BuildVariant>Kotlin
pattern, for example, compileDebugKotlin
or compileReleaseUnitTestKotlin
.
For both the JVM and Android projects, it's possible to define options using the project Kotlin extension DSL:
Some important details to be aware of:
The
android.kotlinOptions
andkotlin.compilerOptions
configuration blocks override each other. The last (lowest) block takes effect.kotlin.compilerOptions
configures every Kotlin compilation task in the project.You can override the configuration applied by
kotlin.compilerOptions
DSL using thetasks.named<KotlinJvmCompile>("compileKotlin") { }
(ortasks.withType<KotlinJvmCompile>().configureEach { }
) approach.
Target JavaScript
JavaScript compilation tasks are called compileKotlinJs
for production code, compileTestKotlinJs
for test code, and compile<Name>KotlinJs
for custom source sets.
To configure a single task, use its name:
Note that with the Gradle Kotlin DSL, you should get the task from the project's tasks
first.
Use the Kotlin2JsCompile
and KotlinCompileCommon
types for JS and common targets, respectively.
For all Kotlin compilation tasks
It is also possible to configure all of the Kotlin compilation tasks in the project:
All compiler options
Here is a complete list of options for Gradle tasks:
Common attributes
Name | Description | Possible values | Default value |
---|---|---|---|
| A property for configuring a list of opt-in compiler arguments |
|
|
| Enables the progressive compiler mode |
|
|
Attributes specific to JVM
Name | Description | Possible values | Default value |
---|---|---|---|
| Generate metadata for Java 1.8 reflection on method parameters | false | |
| Target version of the generated JVM bytecode | "1.8", "9", "10", ..., "21", "22". Also, see Types for compiler options | "1.8" |
| Don't automatically include the Java runtime into the classpath | false | |
|
|
|
|
Attributes common to JVM and JS
Name | Description | Possible values | Default value |
---|---|---|---|
| Report an error if there are any warnings | false | |
| Don't generate warnings | false | |
| Enable verbose logging output. Works only when the Gradle debug log level enabled | false | |
| A list of additional compiler arguments. You can use experimental | [] | |
| Restrict the use of declarations to those from the specified version of bundled libraries | "1.6", "1.7", "1.8", "1.9", "2.0", "2.1" (EXPERIMENTAL) | |
| Provide source compatibility with the specified version of Kotlin | "1.6", "1.7", "1.8", "1.9", "2.0", "2.1" (EXPERIMENTAL) |
Example of additional arguments usage via freeCompilerArgs
Use the attribute freeCompilerArgs
to supply additional (including experimental) compiler arguments. You can add a single argument to this attribute or a list of arguments:
Example of setting a languageVersion
To set a language version, use the following syntax:
Also, see Types for compiler options.
Attributes specific to JS
Name | Description | Possible values | Default value |
---|---|---|---|
| Disable internal declaration export | false | |
| Define whether the | "call", "noCall". Also, see Types for compiler options | "call" |
| Generate .meta.js and .kjsm files with metadata. Use to create a library | true | |
| The kind of JS module generated by the compiler | "umd", "commonjs", "amd", "plain", "es". Also, see Types for compiler options | "umd" |
| Destination *.js file for the compilation result | "<buildDir>/js/packages/<project.name>/kotlin/<project.name>.js" | |
| Generate source map | true | |
| Embed source files into the source map | "never", "always", "inlining". Also, see Types for compiler options | |
| Add variable and function names that you declared in Kotlin code into the source map. For more information on the behavior, see our compiler reference. | "simple-names", "fully-qualified-names", "no". Also, see Types for compiler options | "simple-names" |
| Add the specified prefix to paths in the source map | ||
| Generate JS files for specific ECMA version | "v5" | "v5" |
| Translate primitive arrays to JS typed arrays | true |
Types for compiler options
Some of the compilerOptions
use the new types instead of the String
type:
Option | Type | Example |
---|---|---|
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
What's next?
Learn more about: