我在Google App Engine上尝试运行Kotlin
这篇帖子是在Kotlin Advent Calendar的第14天发表的。
首先
通常我用Kotlin开发Android应用程序,但最近我想尝试用Kotlin进行服务器端开发,因此我准备了环境。我希望这篇文章能对那些同样想用Kotlin进行服务器端开发的人有所帮助,所以我决定写一篇关于在Google App Engine上运行Kotlin的环境设置方法的文章。
我们将使用IntelliJ IDEA作为编辑器,并使用Spring Boot框架进行构建。
-
- Kotlin 1.0.5
-
- IntelliJ IDEA Community Edition
-
- Spring Boot
- Google App Engine
我們已在GitHub上公開了源代碼,希望想立即開始開發或想查看已完成的項目的人可以參考。 以下是GitHub連結:https://github.com/t-kashima/kotlin_on_gae
那么,我们立即一步步地建立一个环境吧。
使用IntelliJ IDEA创建项目。
首先,使用IntelliJ IDEA作为编写Kotlin的编辑器。请从IntelliJ IDEA的网页上下载并安装。
https://www.jetbrains.com/idea/
下一步是在IntelliJ IDEA中安装Kotlin插件。请在IntelliJ IDEA的Preferences→Plugins→Install JetBrains Plugin中选择Kotlin并进行搜索和安装。

接下来我们将创建一个即将进行开发的项目。选择IntelliJ IDEA的File→New→Project,然后选择Gradle的Kotlin并继续进行。在下一个页面中,如果显示了以下屏幕,请在Version中输入当前发布的最新Kotlin版本 1.0.5 并继续。

有几个屏幕会显示出来,不断地前进,最后会进入一个输入保存位置的画面,输入保存位置后按下完成按钮,项目将被创建。
现在已经准备好在IntelliJ IDEA上进行开发了。
使用Spring Boot来搭建本地环境。
接下来将使用Spring Boot框架来构建本地环境。
首先,我們使用IntelliJ IDEA打開之前的項目,並使用Spring Boot和Kotlin進行開發。接下來,將build.gradle文件修改如下:
buildscript {
ext.kotlin_version = '1.0.5'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE"
}
}
apply plugin: "kotlin"
apply plugin: "org.springframework.boot"
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.springframework.boot:spring-boot-starter-web"
}
接下来,在src/main/kotlin目录下创建一个包(本例中命名为hello),然后在其中创建Application.kt和HelloController.kt。如下图所示。

请分别在Application.kt和HelloController.kt中按照以下方式编写:
在HelloController中,指定了当请求通过哪个路径访问时调用该方法。在本例中,当有访问路径为/时,将调用index方法并显示 “Greetings from Spring Boot!”。
package hello
import java.util.Arrays
import org.springframework.boot.CommandLineRunner
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.context.ApplicationContext
import org.springframework.context.annotation.Bean
@SpringBootApplication
open class Application {
companion object {
@JvmStatic
fun main(args: Array<String>) {
SpringApplication.run(Application::class.java, *args)
}
}
}
package hello
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class HelloController {
@RequestMapping("/")
fun index(): String {
return "Greetings from Spring Boot!"
}
}
现在Kotlin和Spring Boot已经准备好了,我们可以尝试在本地环境启动应用程序。请右键点击Application.kt,然后选择“Run〜”。这样一来,构建过程就会开始,并且可能需要一些时间来完成构建。完成构建后,本地环境就会启动起来。
如果在浏览器中输入http://localhost:8080,然后显示“来自Spring Boot的问候!”,那么本地环境已经成功启动了。
使用Google App Engine运行Spring Boot
最终将项目部署到Google App Engine上,并确保能够从外部访问。
需要首先创建Google App Engine帐户,为此请访问以下网站创建帐户,然后创建部署目标项目。
https://cloud.google.com/appengine/
如果能创建Google App Engine项目,您可以通过安装gcloud命令来从本地进行各种设置,并进行部署配置。请从以下网站下载并安装:
https://cloud.google.com/sdk/gcloud/
如果安装成功,请在终端中运行以下命令,设置Google App Engine的账户和项目。请将此处替换为您在Google App Engine创建的项目的ID。
$ gcloud auth login
$ gcloud config set project <PROJECT_ID>
接下来,我们将为Gradle添加插件,以便可以将代码部署到Google App Engine。请修改build.gradle如下。
buildscript {
ext.kotlin_version = '1.0.5'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE"
classpath "com.google.cloud.tools:appengine-gradle-plugin:+"
}
}
apply plugin: "kotlin"
apply plugin: "com.google.cloud.tools.appengine"
apply plugin: "org.springframework.boot"
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "com.google.appengine:appengine:+"
compile "org.springframework.boot:spring-boot-starter-web"
}
由于Google App Engine在标准环境下不支持Java8,因此需要使用弹性环境。请创建”src/main/appengine”文件夹,并在其中添加以下内容的app.yaml文件。
runtime: java
env: flex
可以选择IntelliJ IDEA中的Run→Edit Configures,在Gradle的Tasks中添加一个任务,并将任务设置为「appengineDeploy」,从而实现从IntelliJ IDEA进行部署。

按下OK按钮,尝试将此设置从Run转移到运行中。然后将进行部署到Google App Engine后的构建过程。对于第一次部署,可能需要花费相当长的时间。部署完成后,在终端上运行以下命令,以确保可以在浏览器中查看!
$ gcloud app browse
只要看到「从Spring Boot获取!」这个标志,就表示成功了。另外,查看Google App Engine的仪表板,可以确认已经启动了以下实例。

只需编辑项目中的HelloController.kt,即可在任何路径访问并写入要执行的操作。在本地确认后,可以快速部署并继续进行开发。
最后
长篇大论了,您觉得如何呢?
没有使用Maven而只用Gradle来构建环境的例子意外地很少,因为平时使用Gradle很熟悉,所以在发现这种方法之前遇到了一些问题。
开发还没有进行下去,所以我打算参考Kotlin浴盆日历的文章,继续努力开发!
请参考以下网站
-
- Deploy Spring Boot Application in App Engine
- Gradle で GAE/J 開発