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