使用 Ant

获得 Ant 任务

Kotlin 提供了 Ant 三个任务:

kotlinc : Kotlin 面向 JVM 的编译器

kotlin2js: 面向 javaScript 的编译器

withKotlin: 使用标准 javac Ant 任务时编译 Kotlin 文件的任务

这些任务定义学在 kotlin-ant.jar 标准库中,位与 kotlin compiler 的 lib 文件夹下

面向 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 源文件

如果项目包含 java kotlin 代码,使用 kotlinc 是可以的,但建议使用 withKotlin 任务

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

面向 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 有前缀,后缀以及 sourcemap 选项

<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 只有一个源码文件夹并有元信息的选项

如果你想要描述 javaScript/Kotlin 库的转换结果,mateInfo 选项是很有用的。如果mateInfo 设置为 true 则编译附加 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">
        <!-- out.meta.js will be created, which contains binary descriptors -->
        <kotlin2js src="root1" output="out.js" metaInfo="true"/>
    </target>
</project>

参考

下面是所有的元素和属性

#kotlinc 属性**名字**|**描述**|**必须性**|**默认值**

src 要编译的Kotlin 文件或者文件夹 yes
output 目标文件夹或 .jar 文件名 yes
classpath 类的完整路径 no
classpathref 类的完整路径参考 no
stdlib “Kotlin-runtime.jar” 的完整路径 no ”“
includeRuntime 如果输出是 .jar 文件,是否 kotlin 运行时库是否包括在 jar 中 no true

#withKotlin 属性

名字 描述 必须性 默认值
src 要编译的Kotlin 文件或者文件夹 yes
output 目标文件夹 yes
library 库文件(kt,dir,jar) no
outputPrefix 生成 javaScript 文件的前缀 no
outputSufix 生成 javaScript 文件的后缀 no
sourcemap 是否生成 sourcemap no
metaInfo 是否生成二进制元数据文件描述 no
main 是否生成调用主函数 no