Skip to content

Ant

從 Kotlin 2.2.0 開始,Kotlin 對 Ant 建置系統的支援已棄用。 我們計畫在 Kotlin 2.3.0 中移除對 Ant 的支援。

然而,如果您有興趣成為 Ant 的外部維護者, 請在 此 YouTrack 問題 中留下評論。

取得 Ant 任務

Kotlin 為 Ant 提供了三個任務:

  • kotlinc: 以 JVM 為目標的 Kotlin 編譯器
  • kotlin2js: 以 JavaScript 為目標的 Kotlin 編譯器
  • withKotlin: 當使用標準的 javac Ant 任務時,用於編譯 Kotlin 檔案的任務

這些任務定義在 kotlin-ant.jar 函式庫中,該函式庫位於 Kotlin 編譯器 壓縮檔的 lib 資料夾中。需要 Ant 1.8.2+ 版本。

使用純 Kotlin 原始碼以 JVM 為目標

當專案僅包含 Kotlin 原始碼時,最簡單的編譯方式是使用 kotlinc 任務:

xml
<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 獨立編譯器解壓縮後的資料夾。

使用純 Kotlin 原始碼和多個根目錄以 JVM 為目標

如果專案包含多個原始碼根目錄,請使用 src 作為元素來定義路徑:

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

使用 Kotlin 和 Java 原始碼以 JVM 為目標

如果專案同時包含 Kotlin 和 Java 原始碼,雖然可以使用 kotlinc,但為避免任務參數重複,建議使用 withKotlin 任務:

xml
<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 屬性:

xml
<withKotlin moduleName="myModule"/>

以 JavaScript 為目標(單一原始碼資料夾)

xml
<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 選項)

xml
<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 選項)

metaInfo 選項在您想將轉譯結果分發為 Kotlin/JavaScript 函式庫時很有用。如果 metaInfo 設定為 true,那麼在編譯期間將會建立一個包含二進位中繼資料的額外 JS 檔案。此檔案應與轉譯結果一同分發:

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

參考資料

以下列出了元素和屬性的完整清單:

kotlinckotlin2js 共用的屬性

名稱說明必填預設值
src要編譯的 Kotlin 原始碼檔案或目錄
nowarn抑制所有編譯警告false
noStdlib不將 Kotlin 標準函式庫包含到類別路徑中false
failOnError如果在編譯期間偵測到錯誤,則建置失敗true

kotlinc 屬性

名稱說明必填預設值
output目標目錄或 .jar 檔案名稱
classpath編譯類別路徑
classpathref編譯類別路徑參考
includeRuntime如果 output 是一個 .jar 檔案,Kotlin 執行時期函式庫是否應包含在 jar 中true
moduleName正在編譯的模組名稱目標名稱(如果指定)或專案名稱

kotlin2js 屬性

名稱說明必填
output目標檔案
librariesKotlin 函式庫路徑
outputPrefix用於產生 JavaScript 檔案的前綴
outputSuffix用於產生 JavaScript 檔案的後綴
sourcemap是否應產生 sourcemap 檔案
metaInfo是否應產生包含二進位描述符的中繼資料檔案
main編譯器產生的程式碼是否應呼叫 main 函數

傳遞原始編譯器引數

要傳遞自訂原始編譯器引數,您可以使用 <compilerarg> 元素,並帶有 valueline 屬性。這可以在 <kotlinc><kotlin2js><withKotlin> 任務元素中完成,如下所示:

xml
<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 時,會顯示所有可用引數的完整清單。