Kotlin provides three tasks for Ant:
These tasks are defined in the kotlin-ant.jar library which is located in the lib folder for the Kotlin Compiler Ant version 1.8.2+ is required.
When the project consists of exclusively Kotlin source code, the easiest way to compile the project is to use the kotlinc task:
<project name="Ant Task Test" default="build">
<typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
<target name="build">
<kotlinc src="hello.kt" output="hello.jar"/>
</target>
</project>
where ${kotlin.lib} points to the folder where the Kotlin standalone compiler was unzipped.
If a project consists of multiple source roots, use src as elements to define paths:
<project name="Ant Task Test" default="build">
<typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
<target name="build">
<kotlinc output="hello.jar">
<src path="root1"/>
<src path="root2"/>
</kotlinc>
</target>
</project>
If a project consists of both Kotlin and Java source code, while it is possible to use kotlinc, to avoid repetition of task parameters, it is recommended to use withKotlin task:
<project name="Ant Task Test" default="build">
<typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
<target name="build">
<delete dir="classes" failonerror="false"/>
<mkdir dir="classes"/>
<javac destdir="classes" includeAntRuntime="false" srcdir="src">
<withKotlin/>
</javac>
<jar destfile="hello.jar">
<fileset dir="classes"/>
</jar>
</target>
</project>
You can also specify the name of the module being compiled as the moduleName attribute:
<withKotlin moduleName="myModule"/>
<project name="Ant Task Test" default="build">
<typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
<target name="build">
<kotlin2js src="root1" output="out.js"/>
</target>
</project>
<project name="Ant Task Test" default="build">
<taskdef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
<target name="build">
<kotlin2js src="root1" output="out.js" outputPrefix="prefix" outputPostfix="postfix" sourcemap="true"/>
</target>
</project>
The metaInfo option is useful, if you want to distribute the result of translation as a Kotlin/JavaScript library. If metaInfo was set to true, then during compilation additional JS file with binary metadata will be created. This file should be distributed together with the result of translation:
<project name="Ant Task Test" default="build">
<typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
<target name="build">
<!-- out.meta.js will be created, which contains binary metadata -->
<kotlin2js src="root1" output="out.js" metaInfo="true"/>
</target>
</project>
Complete list of elements and attributes are listed below:
| Name | Description | Required | Default Value |
|---|---|---|---|
src | Kotlin source file or directory to compile | Yes | |
nowarn | Suppresses all compilation warnings | No | false |
noStdlib | Does not include the Kotlin standard library into the classpath | No | false |
failOnError | Fails the build if errors are detected during the compilation | No | true |
| Name | Description | Required | Default Value |
|---|---|---|---|
output | Destination directory or .jar file name | Yes | |
classpath | Compilation class path | No | |
classpathref | Compilation class path reference | No | |
includeRuntime | If output is a .jar file, whether Kotlin runtime library is included in the jar | No | true |
moduleName | Name of the module being compiled | No | The name of the target (if specified) or the project |
| Name | Description | Required |
|---|---|---|
output | Destination file | Yes |
libraries | Paths to Kotlin libraries | No |
outputPrefix | Prefix to use for generated JavaScript files | No |
outputSuffix | Suffix to use for generated JavaScript files | No |
sourcemap | Whether sourcemap file should be generated | No |
metaInfo | Whether metadata file with binary descriptors should be generated | No |
main | Should compiler generated code call the main function | No |
To pass custom raw compiler arguments, you can use <compilerarg> elements with either value or line attributes. This can be done within the <kotlinc>, <kotlin2js>, and <withKotlin> task elements, as follows:
<kotlinc src="${test.data}/hello.kt" output="${temp}/hello.jar">
<compilerarg value="-Xno-inline"/>
<compilerarg line="-Xno-call-assertions -Xno-param-assertions"/>
<compilerarg value="-Xno-optimize"/>
</kotlinc>
The full list of arguments that can be used is shown when you run kotlinc -help.
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/reference/using-ant.html