改造 Maven 项目支持 Kotlin 语法

使用 Maven—原文地址

插件与版本

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

通过 kotlin.version 属性定义要使用的 Kotlin 版本:

<properties>
    <kotlin.version>1.1.2-4</kotlin.version>
    <!--项目编码--
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

依赖

Kotlin 有一个广泛的标准库可用于应用程序。在 pom 文件中配置以下依赖关系

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

如果你是针对 JDK 7 或 JDK 8,那么可以使用扩展版本的 Kotlin 标准库,
其中包含为新版 JDK 所增 API 而加的额外的扩展函数。使用 kotlin-stdlib-jre7
kotlin-stdlib-jre8 取代 kotlin-stdlib,这取决于你的 JDK 版本。

如果你的项目使用 Kotlin 反射 或者测试设施,那么你还需要添加相应的依赖项。
其构件 ID 对于反射库是 kotlin-reflect,对于测试库是 kotlin-testkotlin-test-junit

编译只有 Kotlin 的源代码

要编译源代码,请在 <build> 标签中指定源代码目录:

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

需要引用 Kotlin Maven 插件来编译源代码:

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

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

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

同时编译 Kotlin 与 Java 源代码(本文需要使用的地方)

要编译混合代码应用程序,必须在 Java 编译器之前调用 Kotlin 编译器。
按照 maven 的方式,这意味着应该使用以下方法在 maven-compiler-plugin 之前运行 kotlin-maven-plugin,确保 pom.xml 文件中的 kotlin 插件位于 maven-compiler-plugin 上面。

<build>
    <plugins>
        <plugin>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-plugin</artifactId>
            <version>${kotlin.version}</version>
            <executions>
                <execution>
                    <id>compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <configuration>
                      <sourceDirs>
                        <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
                        <sourceDir>${project.basedir}/src/main/java</sourceDir>
                      </sourceDirs>
                    </configuration>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>test-compile</goal>
                    </goals>
                    <configuration>
                      <sourceDirs>
                        <sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
                        <sourceDir>${project.basedir}/src/test/java</sourceDir>
                      </sourceDirs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.5.1</version>
            <executions>
                <!-- 替换会被 maven 特别处理的 default-compile -->
                <execution>
                  <id>default-compile</id>
                  <phase>none</phase>
                </execution>
                <!-- 替换会被 maven 特别处理的 default-testCompile -->
                <execution>
                  <id>default-testCompile</id>
                  <phase>none</phase>
                </execution>

                <execution>
                  <id>java-compile</id>
                  <phase>compile</phase>
                  <goals> <goal>compile</goal> </goals>
                </execution>
                <execution>
                  <id>java-test-compile</id>
                  <phase>test-compile</phase>
                  <goals> <goal>testCompile</goal> </goals>
                </execution>
            </executions>
            <configuration>
            <encoding>${project.build.sourceEncoding}</encoding>
            <source>1.8</source>
            <target>1.8</target>
          </configuration>
        </plugin>
    </plugins>
</build>

增量编译

为了使构建更快,可以为 Maven 启用增量编译(从 Kotlin 1.1.2 起支持)。
为了做到这一点,需要定义 kotlin.compiler.incremental 属性:

<properties>
    <kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>

或者,使用 -Dkotlin.compiler.incremental=true 选项运行构建。

注解处理

请参见 Kotlin 注解处理工具kapt)的描述。

Jar 文件

要创建一个仅包含模块代码的小型 Jar 文件,请在 Maven pom.xml 文件中的 build->plugins 下面包含以下内容,
其中 main.class 定义为一个属性,并指向主 Kotlin 或 Java 类。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>${main.class}</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

独立的 Jar 文件

要创建一个独立的(self-contained)Jar 文件,包含模块中的代码及其依赖项,请在 Maven pom.xml 文件中的 build->plugins 下面包含以下内容
其中 main.class 定义为一个属性,并指向主 Kotlin 或 Java 类。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals> <goal>single</goal> </goals>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>${main.class}</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </execution>
    </executions>
</plugin>

这个独立的 jar 文件可以直接传给 JRE 来运行应用程序:

java -jar target/mymodule-0.0.1-SNAPSHOT-jar-with-dependencies.jar

针对 JavaScript

为了编译 JavaScript 代码,需要使用 jstest-js 目标来执行 compile

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <executions>
        <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals>
                <goal>js</goal>
            </goals>
        </execution>
        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>test-js</goal>
            </goals>
        </execution>
    </executions>
</plugin>

你还需要更改标准库依赖:

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

对于单元测试支持,你还需要添加对 kotlin-test-js 构件的依赖。

更多信息请参阅以 Maven 入门使用 Kotlin 与 JavaScript
教程。

指定编译器选项

可以将额外的编译器选项指定为 Maven 插件节点的 <configuration> 元素下的标签

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>${kotlin.version}</version>
    <executions>……</executions>
    <configuration>
        <nowarn>true</nowarn>  <!-- 禁用警告 -->
    </configuration>
</plugin>

许多选项还可以通过属性来配置:

<project ……>
    <properties>
        <kotlin.compiler.languageVersion>1.0</kotlin.compiler.languageVersion>
    </properties>
</project>

支持以下属性:

JVM 和 JS 的公共属性

名称属性名描述可能的值默认值
nowarn不生成警告true, falsefalse
languageVersionkotlin.compiler.languageVersion提供与指定语言版本源代码兼容性“1.0”, “1.1”“1.1”
apiVersionkotlin.compiler.apiVersion只允许使用来自捆绑库的指定版本中的声明“1.0”, “1.1”“1.1”
sourceDirs包含要编译源文件的目录该项目源代码根目录
compilerPlugins启用编译器插件[]
pluginOptions编译器插件的选项[]
args额外的编译器参数[]

JVM 特有的属性

名称属性名描述可能的值默认值
jvmTargetkotlin.compiler.jvmTarget生成的 JVM 字节码的目标版本“1.6”, “1.8”“1.6”
jdkHomekotlin.compiler.jdkHome要包含到 classpath 中的 JDK 主目录路径,如果与默认 JAVA_HOME 不同的话

JS 特有的属性

名称属性名描述可能的值默认值
outputFile输出文件路径
metaInfo使用元数据生成 .meta.js 与 .kjsm 文件。用于创建库true, falsetrue
sourceMap生成源代码映射(source map)true, falsefalse
moduleKind编译器生成的模块类型“plain”, “amd”, “commonjs”, “umd”“plain”

生成文档

标准的 JavaDoc 生成插件(maven-javadoc-plugin)不支持 Kotlin 代码。
要生成 Kotlin 项目的文档,请使用 Dokka
相关配置说明请参见 Dokka README
。Dokka 支持混合语言项目,并且可以生成多种格式的输出
,包括标准 JavaDoc。

OSGi

对于 OSGi 支持,请参见 Kotlin OSGi 页

示例

一个示例 Maven 项目可以从 Github 版本库直接下载

    原文作者:赛亚人之神
    原文地址: https://www.jianshu.com/p/00d43f5a76d2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞