Ant
获取 Ant 任务
Kotlin 为 Ant 提供了三个任务:
kotlinc: 面向 JVM 的 Kotlin 编译器kotlin2js: 面向 JavaScript 的 Kotlin 编译器withKotlin: 使用标准 javac Ant 任务时编译 Kotlin 文件的任务
这仨任务在 kotlin-ant.jar 库中定义,该库位于 Kotlin 编译器包中的 lib 文件夹中。 需要 Ant 1.8.2+ 版本。
面向 JVM 只用 Kotlin 源代码
当项目由 Kotlin 专用源代码组成时,编译项目的最简单方法是使用 kotlinc 任务:
1. <project name="Ant Task Test" default="build">
2. <typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
4. <target name="build">
5. <kotlinc src="hello.kt" output="hello.jar"/>
6. </target>
7. </project>
其中 ${kotlin.lib} 指向解压缩 Kotlin 独立编译器所在文件夹。
面向 JVM 只用 Kotlin 源代码且多根
如果项目由多个源代码根组成,那么使用 src 作为元素来定义路径:
1. <project name="Ant Task Test" default="build">
2. <typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
4. <target name="build">
5. <kotlinc output="hello.jar">
6. <src path="root1"/>
7. <src path="root2"/>
8. </kotlinc>
9. </target>
10. </project>
面向 JVM 使用 Kotlin 和 Java 源代码
如果项目由 Kotlin 和 Java 源代码组成,虽然可以使用 kotlinc 来避免任务参数的重复,但是建议使用 withKotlin 任务:
1. <project name="Ant Task Test" default="build">
2. <typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
4. <target name="build">
5. <delete dir="classes" failonerror="false"/>
6. <mkdir dir="classes"/>
7. <javac destdir="classes" includeAntRuntime="false" srcdir="src">
8. <withKotlin/>
9. </javac>
10. <jar destfile="hello.jar">
11. <fileset dir="classes"/>
12. </jar>
13. </target>
14. </project>
还可以将正在编译的模块的名称指定为 moduleName 属性:
1. <withKotlin moduleName="myModule"/>
面向 JavaScript 用单个源文件夹
1. <project name="Ant Task Test" default="build">
2. <typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
4. <target name="build">
5. <kotlin2js src="root1" output="out.js"/>
6. </target>
7. </project>
面向 JavaScript 用 Prefix、 PostFix 以及 sourcemap 选项
1. <project name="Ant Task Test" default="build">
2. <taskdef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
4. <target name="build">
5. <kotlin2js src="root1" output="out.js" outputPrefix="prefix" outputPostfix="postfix" sourcemap="true"/>
6. </target>
7. </project>
面向 JavaScript 用单个源文件夹以及 metaInfo 选项
如果要将翻译结果作为 Kotlin/JavaScript 库分发,那么 metaInfo 选项会很有用。 如果 metaInfo 设置为 true,则在编译期间将创建具有二进制元数据的额外的 JS 文件。该文件应该与翻译结果一起分发:
1. <project name="Ant Task Test" default="build">
2. <typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
4. <target name="build">
5. <!-- 会创建 out.meta.js,其中包含二进制元数据 -->
6. <kotlin2js src="root1" output="out.js" metaInfo="true"/>
7. </target>
8. </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 函数的代码 | 否 |
传递原始编译器参数
如需传递原始编译器参数,可以使用带 value 或 line 属性的 <compilerarg> 元素。 可以放在 <kotlinc>、 <kotlin2js> 与 <withKotlin> 任务元素内,如下所示:
1. <kotlinc src="${test.data}/hello.kt" output="${temp}/hello.jar">
2. <compilerarg value="-Xno-inline"/>
3. <compilerarg line="-Xno-call-assertions -Xno-param-assertions"/>
4. <compilerarg value="-Xno-optimize"/>
5. </kotlinc>
当运行 kotlinc -help 时,会显示可以使用的参数的完整列表。
