Kotlin使用Ant

获取 Ant 任务

Kotlin 为 Ant 提供了三个任务:

  • kotlinc: 针对 JVM 的 Kotlin 编译器
  • kotlin2js: 针对 JavaScript 的 Kotlin 编译器
  • withKotlin: 使用标准 javac Ant 任务时编译 Kotlin 文件的任务

这仨任务在 kotlin-ant.jar 库中定义,该库位于 Kotlin 编译器的 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 源代码

如果项目由 Kotlin 和 Java 源代码组成,虽然可以使用 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>
要为 <withKotlin> 指定额外的命令行参数,可以使用嵌套的 <compilerArg> 参数。当运行 kotlinc -help 时,会显示可以使用的参数的完整列表。还可以将正在编译的模块的名称指定为 moduleName 属性:
<withKotlin moduleName="myModule">
    <compilerarg value="-no-stdlib"/>
</withKotlin>

针对 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 以及 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 用单个源文件夹以及 metaInfo 选项

如果要将翻译结果作为 Kotlin/JavaScript 库分发,那么 metaInfo 选项会很有用。如果 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,其中包含二进制元数据 -->
        <kotlin2js src="root1" output="out.js" metaInfo="true"/>
    </target>
</project>

参考

元素和属性的完整列表如下

kotlinc 和 kotlin2js 的公共属性

名称 描述 必需 默认值
src 要编译的 Kotlin 源文件或目录 是
nowarn 禁止所有编译警告 否 false
noStdlib 不要将 Kotlin 标准库包含进 classpath 否 false
failOnError 在编译期间检测到错误时,会导致构建失败 否 true

kotlinc 属性

名称 描述 必需 默认值
output 目标目录或 .jar 文件名 是
classpath 编译类路径 否
classpathref 编译类路径引用 否
includeRuntime Kotlin 运行时库是否包含在 jar 中,如果 output 是 .jar 文件的话 否 true
moduleName 编译的模块的名称 否 目标(如果指定的话)或项目的名称

kotlin2js 属性

名称 描述 必需
output 目标文件 是
libraries Kotlin 库的路径 否
outputPrefix 生成的 JavaScript 文件所用前缀 否
outputSuffix 生成的 JavaScript 文件所用后缀 否
sourcemap 是否要生成 sourcemap 文件 否
metaInfo 是否要生成具有二进制描述符的元数据文件 否
main 编译器是否生成调用 main 函数的代码 否

Copyright © 2015-2026