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 函數的代碼