type: doc layout: reference title: "Using Maven"

description: "This tutorials walks you through different scenarios when using Maven for building applications that contain Kotlin code"

使用 Maven

插件与版本

kotlin-maven-plugin 用于编译 Kotlin 源码与模块,当前只支持 Marven V3

通过 kotlin.version 指定所要使用的 Kotlin 版本,有以下值可供选择:

  • X.Y-SNAPSHOP:指定 X.Y 的值使用对应的最新开发版,当前只有一个开发版版本号 0.1-SNAPSHOT。这是非稳定的版本的只适用于测试编译器的新特性。使用开发版需要在 pom 文件中设置相应的 repository.

  • X.Y.Z:指定 X.Y.Z 值使用对应的稳定版本,这些版本发布在 Maven Central Repository 中,无需在 pom 文件中进行额外的设置。

以下是稳定版本对应的版本号 X.Y.Z 值:

Milestone Version

设置开发版的 repository

使用 Kotlin 的开发版需要在 pom 文件中定义以下的 respository:

<repositories>
  <repository>
    <id>sonatype.oss.snapshots</id>
    <name>Sonatype OSS Snapshot Repository</name>
    <url>http://oss.sonatype.org/content/repositories/snapshots</url>
    <releases>
      <enabled>false</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>

<pluginRepositories>
  <pluginRepository>
    <id>sonatype.oss.snapshots</id>
    <name>Sonatype OSS Snapshot Repository</name>
    <url>http://oss.sonatype.org/content/repositories/snapshots</url>
    <releases>
      <enabled>false</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </pluginRepository>
</pluginRepositories>

依赖

Kotlin 提供了大量的标准库以供开发使用,需要在 pom 文件中设置以下依赖:

<dependencies>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib</artifactId>
        <version>${kotlin.version}</version>
    </dependency>
</dependencies>

仅编译 Kotlin 源码

在 <build> 标签中指定所要编译的 Kotlin 源码目录:

<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>

Maven 中需要引用 Kotlin 插件用于编码源码:


<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>${kotlin.version}</version>

    <executions>
        <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals> <goal>compile</goal> </goals>
        </execution>

        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals> <goal>test-compile</goal> </goals>
        </execution>
    </executions>
</plugin>

同时编译 Kotlin 与 Java 源码

编译混合代码时 Kotlin 编译器应先于 Java 的编译器被调用。在 Maven 中这表示 kotlin-maven-plugin 先于 maven-compiler-plugin 运行。

通过指定 pom 文件中 <phase> 标签的值为 process-sources 可实现以上目的。(如果有更好的方法欢迎提出)

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>0.1-SNAPSHOT</version>

    <executions>
        <execution>
            <id>compile</id>
            <phase>process-sources</phase>
            <goals> <goal>compile</goal> </goals>
        </execution>

        <execution>
            <id>test-compile</id>
            <phase>process-test-sources</phase>
            <goals> <goal>test-compile</goal> </goals>
        </execution>
    </executions>
</plugin>

使用外部的注解

Kotlin 使用外部注解为 Java 库提供精准的类型信息,通过 <configuration> 标签中的 annotationPaths 指定这些注解。

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>0.1-SNAPSHOT</version>

    <configuration>
        <annotationPaths>
            <!--指向注解文件的根目录-->
            <annotationPath>${project.basedir}/src/main/resources/</annotationPath>
        </annotationPaths>
    </configuration>

...

例子

Maven 工程的例子可从 Github 直接下载

翻译 by DemoJameson