设置vert.x应用程序写入Kotlin,Gradle–Kotlin反应性编程

我决定写一个 Vert.x. 在一个简单的例子中与kotlin结合的应用,因为我真的很感兴趣 反应规划 并喜欢使用 kotlin.。在此帖子中,我将为Vert.x提供一些基本信息作为在JVM上写入无功应用的工具集,并介绍了Kotlin一点。最终,我想演示如何在Gradle中设置此应用程序。

Vert.x. - 无功编程工具套件

Vert.x.是一个“工具套件”而不是框架,用于在Java虚拟机上撰写反应应用程序。定义 “反应宣言” (于2014年9月16日发布)“反应性编程”是某种建筑软件模式,它试图解决当今对现代软件应用的要求。更精确地,反应应用预计是“更灵活,松散耦合和可扩展的”,“更容易开发”,最后是“高度” 负责任的“,这确实是理想的,不是吗?

作为一个重要的含义,这些应用程序需要 消息驱动,这意味着应用程序仅通过通信 异步, 非阻塞 消息。特别地,vert.x适用于宣言,并提供一个伟大的工具集,可以很容易地开发反应性软件。

一个重要的事情: vert.x是“polyglot”,即它可以与多种语言一起使用,包括Java,JavaScript,Groovy,Scala,Ruby和(Lucky Me)Kotlin♥.

它也是模块化的,非常快速,轻便的(〜650kb),并且完全提供了其他合理的替代品,也可以是更好的微程框架。

kotlin.

kotlin. 是一个非常新的开源JVM语言,由大家赞助 码头,目前在1.1.50版中可用。它的类型是静态的,Kotlin与Java完全互操作。 Jetbrains在创建这种语言时的想法是找到更高效的Java替代品,仍然与它兼容。我认为每个都与之合作的Java开发人员。 Groovy或Scala知道Java需要大量的样板代码进行一些简单的任务,并且有很多缺陷。 Kotlin受到Java,Scala和更多现代语言的启发,试图将所有这些的优势结合起来。

就在几天前,谷歌宣布了Kotlin今年是一个官方的Android编程语言 Google I / O会议。我认为这是kotlin的最大成就到目前为止,我想祝贺这一里程碑的码头!

现在是时候展示了Kotlin的某些语言特征在行动:

局部变量类型推断

以下代码行展示了如何在Kotlin中定义变量:

var myvar1 = 100
var myvar2 = "text"

The types of myvar1 and myvar2 (Int and String), are being inferred behind the scenes for us. This works in most cases but, of course, it's also possible to declare the variable type explicitly as in var myvar3: Double = 1.0.

数据类

Just think of a Java class Person, having attributes like name, age, job. The class is supposed to override Object 's toString(), hashCode() & equals() methods and of course provide getters and setters for each attribute.

data class Person(val name: String, val age: Int, val job: String)

这就是你需要在Kotlin写的所有 - 一个实时的节省者。

无效

We all know what NullpointerExceptions are - we all hate them. Kotlin tries to eliminate these by distinguishing between nullable and not-null references. Guess, what's the default? Absolutely, the non-null reference type, i.e. a variable of type String cannot point to null.
Just for the records, the corresponding nullable type would be String?.

单独的是不会产生很大的差异,所以使用可用类型要求我们处理所有的NPE-Prone病例,如我们可以在此处看到:

val iCanBeNull: String? = null;
//do some hard work with the string
iCanBeNull?.length

Line 3 will result in the String’s length if iCanBeNull is not null, and to null otherwise. Trying to naively call iCanBeNull.length will not compile.

字符串模板

另一个非常有用的功能,任何人都会很容易理解:

var insertMe = "Reader"
//Prints >>Hello Reader<< on Console
println("Hello $insertMe") 

更多的

上面所示的例子只是我真正喜欢kotlin和的一部小型功能 希望在Java中找到。我一直在与Kotlin一起使用几个月,成为一个巨大的粉丝。我想一开始,它可能需要一些时间才能让Java-不同的语法感到舒服,但很快你会体验很多东西,你真的很喜欢,不想再错过......

顺便一提:一些上述语言特征也在“JDK增强建议”(JPE)的长期列表中可追溯,例如, JEP 286:局部变量类型推断,Brian Goetz撰写。

Let’s finally do something! - The setup forKotlin反应性编程

在下文中,您可以看到我的Gradle文件,其中包含以下任务:

  • kotlin.为Java 1.8编译(我们不需要1.6个支持)。
  • 依赖项为Vert.x,Kotlin,Logging添加 & Testing
  • We use the application plugin for building an executable JAR (Main-Class is added to Manifest)
The Kotlin file "Starter.kt" contains the application's entry point: the main method. The compiler generates a "StarterKt" class, which has to be the Main-Class.
build.gradle.
import org.gradle.jvm.tasks.Jar
import org.jetbrains.kotlin.gradle.tasks.*

val kotlin_version = "1.1.50"
val vertx_version = "3.4.2"

plugins {
    application
    eclipse

    kotlin("jvm")
}

tasks.withType {
    kotlinOptions.jvmTarget = "1.8"
}

application {
    mainClassName = "de.swirtz.vertx.standalone.webserver.StarterKt"
    applicationName = "kotlinwithvertx"
    version = "1.0-SNAPSHOT"
    group = "example"
}


dependencies {
    compile(kotlin("stdlib", kotlin_version))
    compile(kotlin("reflect", kotlin_version))

    with("io.vertx:vertx") {
        compile("$this-core:$vertx_version")
        compile("$this-web:$vertx_version")
        compile("$this-web-templ-thymeleaf:$vertx_version")
    }

    compile("org.slf4j:slf4j-api:1.7.14")
    compile("ch.qos.logback:logback-classic:1.1.3")

    testCompile(kotlin("test-junit", kotlin_version))
    testCompile("junit:junit:4.11")
    testCompile("io.vertx:vertx-unit:$vertx_version")
}

repositories {
    mavenCentral()
    jcenter()
}

val fatJar = task("fatJar", type = Jar::class) {
    baseName = application.applicationName
    manifest {
        attributes["Main-Class"] = application.mainClassName
    }
    from(configurations.runtime.map {
        if (it.isDirectory) it else zipTree(it)
    })
    with(tasks["jar"] as CopySpec)
}

tasks {
    "build" {
        dependsOn(fatJar)
    }
}

Afterward, you can build and run your application as shown here:

  1. ./gradlew build.
  2. ./gradlew运行

您可以查看我的示例代码 GitHub.,其中包括使用HTTP路由的一些示例 vert.x web.,还展示了如何使用模板引擎。玩Kotlin反应性编程玩得开心。


 

7 thoughts on “设置vert.x应用程序写入Kotlin,Gradle–Kotlin反应性编程

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *