Maven
Maven is a build system that you can use to build and manage any Java-based project.
Configure and enable the plugin
The kotlin-maven-plugin compiles Kotlin sources and modules. Currently, only Maven v3 is supported.
In your pom.xml file, define the version of Kotlin you want to use in the kotlin.version property:
To enable kotlin-maven-plugin, update your pom.xml file:
Use JDK 17
To use JDK 17, in your .mvn/jvm.config file, add:
Declare repositories
By default, the mavenCentral repository is available for all Maven projects. To access artifacts in other repositories, specify the ID and URL of each repository in the <repositories> element:
Set dependencies
To add a dependency on a library, include it in the <dependencies> element:
Dependency on the standard library
Kotlin has an extensive standard library that you can use in your applications. To use the standard library in your project, add the following dependency to your pom.xml file:
Dependencies on test libraries
If your project uses Kotlin reflection or testing frameworks, add the relevant dependencies. Use kotlin-reflect for the reflection library, and kotlin-test and kotlin-test-junit for the testing libraries.
For example:
Dependency on a kotlinx library
Depending on the kotlinx library, you can either add the base artifact name or the name with a -jvm suffix. Refer to the library's README file on klibs.io.
For example, to add a dependency on kotlinx.coroutines:
To add a dependency on kotlinx-datetime:
Compile Kotlin-only source code
To compile source code, specify the source directories in the <build> tag:
The Kotlin Maven Plugin needs to be referenced to compile the sources:
Starting from Kotlin 1.8.20, you can replace the whole <executions> element above with <extensions>true</extensions>. Enabling extensions automatically adds the compile, test-compile, kapt, and test-kapt executions to your build, bound to their appropriate lifecycle phases. If you need to configure an execution, you need to specify its ID. You can find an example of this in the next section.
Compile Kotlin and Java sources
To compile a project with both Kotlin and Java source files, make sure the Kotlin compiler runs before the Java compiler. The Java compiler can't see Kotlin declarations until they are compiled into .class files. If your Java code uses Kotlin classes, those classes must be compiled first to avoid cannot find symbol errors.
Maven determines plugin execution order based on two main factors:
The order of plugin declarations in the
pom.xmlfile.Built-in default executions, such as
default-compileanddefault-testCompile, which always run before user-defined executions, regardless of their position in thepom.xmlfile.
To control the execution order:
Declare
kotlin-maven-pluginbeforemaven-compiler-plugin.Disable the Java compiler plugin's default executions.
Add custom executions to control the compile phases explicitly.
You can simplify the configuration of mixed Kotlin/Java compilation using extensions. It allows skipping the Maven compiler plugin configuration:
If your project previously had a Kotlin-only configuration, you also need to remove the following lines from the <build> section:
It ensures that both Kotlin code can reference Java code and vice versa with the extensions setup.
This configuration ensures that:
Kotlin code is compiled first.
Java code is compiled after Kotlin and can reference Kotlin classes.
Default Maven behavior doesn't override the plugin order.
For more details on how Maven handles plugin executions, see Guide to default plugin execution IDs in the official Maven documentation.
Configure Kotlin compiler execution strategy
The Kotlin compiler execution strategy defines where the Kotlin compiler runs. There are two available strategies:
Strategy | Where the Kotlin compiler is executed |
|---|---|
Kotlin daemon (default) | Inside its own daemon process |
In process | Inside the Maven process |
By default, the Kotlin daemon is used. You can switch to the "in process" strategy by setting the following property in your pom.xml file:
Regardless of the compiler execution strategy that you use, you still need to explicitly configure incremental compilation.
Enable incremental compilation
To make your builds faster, you can enable incremental compilation by adding the kotlin.compiler.incremental property:
Alternatively, run your build with the -Dkotlin.compiler.incremental=true option.
Configure annotation processing
Create JAR file
To create a small JAR file containing just the code from your module, include the following under build->plugins in your Maven pom.xml file, where main.class is defined as a property and points to the main Kotlin or Java class:
Create a self-contained JAR file
To create a self-contained JAR file containing the code from your module along with its dependencies, include the following under build->plugins in your Maven pom.xml file, where main.class is defined as a property and points to the main Kotlin or Java class:
This self-contained JAR file can be passed directly to a JRE to run your application:
Specify compiler options
Additional options and arguments for the compiler can be specified as tags under the <configuration> element of the Maven plugin node:
Many of the options can also be configured through properties:
The following attributes are supported:
Attributes specific to JVM
Name | Property name | Description | Possible values | Default value |
|---|---|---|---|---|
| Generate no warnings | true, false | false | |
| kotlin.compiler.languageVersion | Provide source compatibility with the specified version of Kotlin | "1.8", "1.9", "2.0", "2.1", "2.2" (EXPERIMENTAL) | |
| kotlin.compiler.apiVersion | Allow using declarations only from the specified version of bundled libraries | "1.8", "1.9", "2.0", "2.1", "2.2" (EXPERIMENTAL) | |
| The directories containing the source files to compile | The project source roots | ||
| Enabled compiler plugins | [] | ||
| Options for compiler plugins | [] | ||
| Additional compiler arguments | [] | ||
|
| Target version of the generated JVM bytecode | "1.8", "9", "10", ..., "24" | "1.8" |
|
| Include a custom JDK from the specified location into the classpath instead of the default JAVA_HOME |
Use BOM
To use a Kotlin Bill of Materials (BOM), write a dependency on kotlin-bom:
Generate documentation
The standard Javadoc generation plugin (maven-javadoc-plugin) doesn't support Kotlin code. To generate documentation for Kotlin projects, use Dokka. Dokka supports mixed-language projects and can generate output in multiple formats, including standard Javadoc. For more information about how to configure Dokka in your Maven project, see Maven.