购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 在Java构建中添加对Kotlin的支持

如果我们想把Java项目重构为Kotlin项目,第一个必须做出的改变就是让自己有能力在代码库中编写Kotlin代码。令人高兴的是,Kotlin的构建工具和IDE让这一切变得非常简单。在我们的Gradle构建配置中,只需增加几行,就可以让Kotlin和Java一样进行编译。当我们重新同步构建文件时,IntelliJ就会接收该配置,让我们几乎能够无缝地在两种语言之间进行导航、自动完成代码和重构。

要将Kotlin添加到Gradle构建中,需要添加Kotlin插件。Kotlin所支持的每一类编译目标(JVM、JavaScript和本地代码)都有不同的插件以及用于构建多平台项目的插件。因为我们要完成的是Java项目,所以先忽略其他平台,使用Kotlin的JVM插件。

我们还需要将Kotlin标准库添加到依赖项中,并指定输出字节码所支持的最小JVM版本。我们的项目以JDK 11为目标(在撰写本书时,它是最新的LTS版本)。在撰写本书时,Kotlin编译器可以生成与JDK 1.6或JDK 1.8兼容的字节码。JDK 1.8的字节码效率更高,在JDK 11上运行良好,所以我们将选择它。

Kotlin版本

Kotlin语言和标准库仍在不断完善,但JetBrains的策略是提供一个清晰的迁移路径。我们开始撰写本书时,Kotlin的版本是1.3;我们完成本书的时候,1.5版本刚刚发布,示例代码中使用的一些标准API已经被废除了,我们没有将它们迁移到其替代品上,这样代码就能在Kotlin 1.4和Kotlin 1.5上运行了。

以下是修改前的build.gradle的相关部分:

在添加了Kotlin插件后,构建文件看起来像下面这样:

鉴于这些变化,我们重新运行构建文件,可以看到构建仍然有效!

如果在IntelliJ中重新同步Gradle项目(这可能在保存时自动发生),我们可以在IDE中运行测试和程序。

测试仍然可以通过,所以我们没有破坏任何东西,但也无法证明我们可以在项目中使用Kotlin。我们通过编写一个“hello world”程序来测试一下。在Java源代码树的根级包 src/main/java 中创建一个文件 HelloWorld.kt

在何处放置Kotlin代码

Kotlin构建插件增加了额外的源代码根目录,即 src/main/kotlin src/test/kotlin ,并编译其所有子目录中发现的Kotlin源代码文件。

它也会编译在Java源代码树中发现的Kotlin源代码,特别是 src/main/java src/test/java 。虽然你可以按语言来分离源文件,把Java文件放在 java 目录下,把Kotlin文件放在 kotlin 目录下,但实际上我们并不反感将Java文件和Kotlin文件放在一起。能够在一个目录中看到相应包的所有源代码也挺好,不用在文件系统中四处寻找。不过,为了做到这一点,我们把Kotlin的源代码放在反映包结构的目录中,而不是利用Kotlin的能力,将映射到不同包的多个文件放在单个目录下。

同样,虽然Kotlin允许在一个类中定义多个公共类,但当我们在一个项目中混用Java和Kotlin时,为了保持一致性,我们倾向于坚持每个Kotlin文件只包含一个类。

可以通过在IDE中单击fun main()函数左边的绿色箭头来启动程序。

我们也可以通过java命令行来执行构建文件并启动程序。编译名为 HelloWorld.kt 的源文件会创建一个名为HelloWorldKt的Java类文件。我们将在后面详细研究Kotlin源代码如何被翻译成Java类文件,但现在,我们可以用java命令来运行程序,就像下面这样:

成功了!

我们删除 HelloWorld.kt ——它的使命已经完成了——提交并推送。

现在,我们可以选择在项目中使用Kotlin了,本章前面已经给出了一些关于从哪里起步的指南。

其他构建系统

我们已经展示了在Gradle构建中添加Kotlin支持所需的改动,但你也可以按照Kotlin文档( https://oreil.ly/bWi9n )工具部分提供的说明,使用Maven或Ant。文档中也给出了如何使用命令行编译器kotlinc的说明。

如果你用的是Gradle,也可以选择使用Kotlin作为构建定义语言,而不是传统的Groovy。这样做的好处是借助强类型提供更好的工具支持,但代价是必须将StackOverflow中的历史回答翻译成一种新的语言。

由于我们是Java和Kotlin开发者,而不是Java和Groovy开发者,因此选择用Kotlin DSL来启动新项目,但我们觉得没有必要将现有的Groovy构建转换为Kotlin,至少不需要立即转换。就像生产代码中的Java和Kotlin一样,我们可以在构建中混合使用Kotlin和Groovy,所以这是一个可以慢慢进行的转换。我们不建议你把构建文件从Groovy转换为Kotlin作为第一步,当然也不要指望我们写一本关于如何从Groovy到Kotlin Gradle的书籍。 kT+Dr+XWY5D/IDEfRJNczegL2UUUYatB5Eumz07iLUvBsyKi+j56vSbtJeImwRJi

点击中间区域
呼出菜单
上一章
目录
下一章
×