鍍金池/ 教程/ Android/ Kotlin使用Ant
Kotlin內(nèi)聯(lián)函數(shù)
Kotlin開發(fā)環(huán)境設(shè)置(Eclipse)
Kotlin調(diào)用Java代碼
Kotlin使用Ant
Kotlin編譯器插件
Kotlin相等性
Kotlin JavaScript模塊
編寫Kotlin代碼文檔
Kotlin返回和跳轉(zhuǎn)
Kotlin異常處理
Kotlin可見性修飾符
Kotlin委托
Kotlin委托屬性
Kotlin編碼約定/編碼風格
Kotlin基礎(chǔ)語法
使用Kotlin進行服務(wù)器端開發(fā)
Kotlin接口
Kotlin反射
Kotlin類型別名
Kotlin枚舉類
Kotlin當前版本是多少?
Kotlin注解處理工具
Kotlin類型的檢查與轉(zhuǎn)換
Kotlin屬性和字段
Kotlin類型安全的構(gòu)建器
Kotlin相比Java語言有哪些優(yōu)點?
Kotlin JavaScript反射
Kotlin 是什么?
Kotlin泛型
Kotlin慣用語法
Kotlin與OSGi
Kotlin數(shù)據(jù)類型
Kotlin是面向?qū)ο筮€是函數(shù)式語言?
Kotlin動態(tài)類型
Kotlin協(xié)程
Kotlin操作符符重載
Kotlin使用Gradle
Kotlin密封類
Kotlin兼容性
Kotlin集合
Kotlin調(diào)用JavaScript
Kotlin null值安全
Kotlin函數(shù)
Kotlin開發(fā)環(huán)境設(shè)置(IntelliJ IDEA)
Kotlin嵌套類
Kotlin控制流程
Kotlin和Java語言比較
Kotlin 與 Java 語言兼容嗎?
Kotlin教程
Kotlin類和繼承
Kotlin對象表達式和對象聲明
JavaScript中調(diào)用Kotlin
Kotlin區(qū)間/范圍
Kotlin數(shù)據(jù)類
Kotlin lambda表達式
Kotlin是免費的嗎?
Kotlin包
使用Kotlin進行Android開發(fā)
在Java中調(diào)用Kotlin代碼
Kotlin this表達式
使用Kotlin進行JavaScript開發(fā)
Kotlin擴展
Kotlin解構(gòu)聲明
Kotlin注解
Kotlin使用Maven

Kotlin使用Ant

獲取 Ant 任務(wù)

Kotlin 為 Ant 提供了三個任務(wù):

  • kotlinc: 針對 JVM 的 Kotlin 編譯器
  • kotlin2js: 針對 JavaScript 的 Kotlin 編譯器
  • withKotlin: 使用標準 javac Ant 任務(wù)時編譯 Kotlin 文件的任務(wù)

這仨任務(wù)在 kotlin-ant.jar 庫中定義,該庫位于 Kotlin 編譯器lib 文件夾中

針對 JVM 只用 Kotlin 源代碼

當項目由 Kotlin 專用源代碼組成時,編譯項目的最簡單方法是使用 kotlinc 任務(wù)

<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 來避免任務(wù)參數(shù)的重復(fù),但是
建議使用 withKotlin 任務(wù)

<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> 指定額外的命令行參數(shù),可以使用嵌套的 <compilerArg> 參數(shù)。
當運行 kotlinc -help 時,會顯示可以使用的參數(shù)的完整列表。
還可以將正在編譯的模塊的名稱指定為 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 選項

如果要將翻譯結(jié)果作為 Kotlin/JavaScript 庫分發(fā),那么 metaInfo 選項會很有用。
如果 metaInfo 設(shè)置為 true,則在編譯期間將創(chuàng)建具有
二進制元數(shù)據(jù)的額外的 JS 文件。該文件應(yīng)該與翻譯
結(jié)果一起分發(fā)。

<project name="Ant Task Test" default="build">
    <typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>

    <target name="build">
        <!-- 會創(chuàng)建 out.meta.js,其中包含二進制元數(shù)據(jù) -->
        <kotlin2js src="root1" output="out.js" metaInfo="true"/>
    </target>
</project>

參考

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

kotlinc 和 kotlin2js 的公共屬性

名稱 描述 必需 默認值
src 要編譯的 Kotlin 源文件或目錄
nowarn 禁止所有編譯警告 false
noStdlib 不要將 Kotlin 標準庫包含進 classpath false
failOnError 在編譯期間檢測到錯誤時,會導致構(gòu)建失敗 true

kotlinc 屬性

名稱 描述 必需 默認值
output 目標目錄或 .jar 文件名
classpath 編譯類路徑
classpathref 編譯類路徑引用
includeRuntime Kotlin 運行時庫是否包含在 jar 中,如果 output 是 .jar 文件的話 true
moduleName 編譯的模塊的名稱 目標(如果指定的話)或項目的名稱

kotlin2js 屬性

名稱 描述 必需
output 目標文件
libraries Kotlin 庫的路徑
outputPrefix 生成的 JavaScript 文件所用前綴
outputSuffix 生成的 JavaScript 文件所用后綴
sourcemap 是否要生成 sourcemap 文件
metaInfo 是否要生成具有二進制描述符的元數(shù)據(jù)文件
main 編譯器是否生成調(diào)用 main 函數(shù)的代碼