Использование Ant

Получение задач Ant

Kotlin предлагает три задачи для Ant:

  • kotlinc: компилятор Kotlin для работы с JVM;
  • kotlin2js: компилятор Kotlin для работы с JavaScript;
  • withKotlin: компиляция файлов Kotlin при использовании стандартной задачи javac Ant.

Эти задачи определены в библиотеке kotlin-ant.jar, которая находится в папке lib для компилятора Kotlin Ant версии 1.8.2+.

Использование в JVM только с исходным кодом Kotlin

Когда проект состоит исключительно из исходного кода Kotlin, самый простой способ скомпилировать проект - использовать задачу kotlinc :

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

Где ${kotlin.lib} указывает на папку, в которую был распакован автономный компилятор Kotlin.

Использование в JVM с исходным кодом Kotlin и несколькими корневыми директориями

Если проект состоит из нескольких корневых директорий с исходным кодом, используем src как элементы для определения путей:

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

Использование в JVM с исходным кодом Kotlin и Java

Если проект состоит из исходного кода Kotlin и Java, то для избежания повторения параметров задачи рекомендуется использовать задачу withKotlin везде, где возможно использовать kotlinc:

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

Также можно указать имя модуля, скомпилированного как атрибут moduleName:

<withKotlin moduleName="myModule"/>

Использование в JavaScript с с одной исходной папкой

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

Использование в JavaScript с Prefix, PostFix и исходными параметрами

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

Использование в JavaScript с помощью папки с одним исходным кодом и метаинформацией

Параметр metaInfo окажется полезен, если требуется распространять результат перевода как библиотеку Kotlin / JavaScript. Если в metaInfo было установлено значение true, то во время компиляции будет создан дополнительный JS-файл с бинарными метаданными. Этот файл должен быть распространен вместе с результатом перевода:

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

Рекомендации

Полный список элементов и атрибутов приведен ниже:

Общие для kotlinc и kotlin2js атрибуты

Название Описание Необходимо Значение по умолчанию
src Исходный файл или каталог Kotlin для компиляции Да
nowarn Подавляет все предупреждения на этапе компиляции Нет false
noStdlib Не включает стандартную библиотеку Kotlin в путь к классам Нет false
failOnError Не дает завершить сборку, если во время компиляции обнаружены ошибки Нет true

Атрибуты kotlinc

Название Описание Необходимо Значение по умолчанию
output Каталог назначения или имя jar-файла Да
classpath Путь класса компиляции Нет
classpathref Ссылка на путь класса компиляции Нет
includeRuntime Если output является jar-файлом, то библиотека времени выполнения Kotlin будет включена в jar Нет true
moduleName Название компилируемого модуля Нет Имя цели (если указано) или проекта

Атрибуты kotlin2js

Название Описание Необходимо
output Файл назначения Да
libraries Пути к библиотекам Kotlin Нет
outputPrefix Префикс для использования сгенерированных файлов JavaScript Нет
outputSuffix Суффикс для использования сгенерированных файлов JavaScript Нет
sourcemap Должен ли быть создан файл sourcemapНет
metaInfo Должен быть создан файл метаданных с бинарными дескрипторами Нет
main Должен ли сгенерированный компилятором код вызвать основную функцию Нет

Передача исходных аргументов компилятора

Для выборочной передачи исходных аргументов компилятора используются элементы <compilerarg> с атрибутами value или line. Это может быть сделано в рамках элементов задач <kotlinc>, <kotlin2js> и <withKotlin> следующим образом :

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

Полный список используемых аргументов можно увидеть при запуске kotlinc -help.