我在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并进行搜索和安装。

undefined

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

undefined

有几个屏幕会显示出来,不断地前进,最后会进入一个输入保存位置的画面,输入保存位置后按下完成按钮,项目将被创建。

现在已经准备好在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。如下图所示。

undefined

请分别在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进行部署。

undefined

按下OK按钮,尝试将此设置从Run转移到运行中。然后将进行部署到Google App Engine后的构建过程。对于第一次部署,可能需要花费相当长的时间。部署完成后,在终端上运行以下命令,以确保可以在浏览器中查看!

$ gcloud app browse

只要看到「从Spring Boot获取!」这个标志,就表示成功了。另外,查看Google App Engine的仪表板,可以确认已经启动了以下实例。

undefined

只需编辑项目中的HelloController.kt,即可在任何路径访问并写入要执行的操作。在本地确认后,可以快速部署并继续进行开发。

最后

长篇大论了,您觉得如何呢?
没有使用Maven而只用Gradle来构建环境的例子意外地很少,因为平时使用Gradle很熟悉,所以在发现这种方法之前遇到了一些问题。
开发还没有进行下去,所以我打算参考Kotlin浴盆日历的文章,继续努力开发!

请参考以下网站

    • Deploy Spring Boot Application in App Engine

 

    Gradle で GAE/J 開発
bannerAds