我正在尝试创建Kotlin Vert.x语言支持模块,并且需要一种编译Kotlin文件并使用ClassLoader加载结果的方法。我尝试使用kotlin-compiler库并找到K2JVMCompiler类,但是它的exec方法似乎仅支持命令行样式的参数。有没有一种方法可以在运行时编译Kotlin文件(可能不必保存和读取.class文件)并立即加载生成的类? (有点像Groovy一样。)如果没有,您是否有任何有用的编译器参数建议或几乎所有建议?

最佳答案

感觉就像XY Problem。您想知道如何即时编译Kotlin,以便通过从Kotlin源文件而不是已编译的代码运行,可以更轻松地使用Vert.x。但是,实际上,建议使用Vert.x的路径是创建一些简单的代码,以便在编译的代码内部署您的Verticle。

在问题中,您的语言支持链接在路径“vertx.io/ vertx2 /language_support.html”中显示Vert.x 2;这与现在在Vert.x 3中的处理方式不同。我认为您正在将两种想法融合为一体。首先,Vert.x 3希望您从源代码运行Java/Kotlin文件(这不是真的;那是他们从编译语言中移走的Vert.x 2东西),其次,您需要自定义语言支持(您需要别)。

您应该通过运行编译后的代码来尝试使用Vert.x 3。 为此,请构建您的类并运行自己的deploys a verticle programatically,即docs for running and deploying from the command-line。您的代码将很简单,例如:

import io.vertx.core.Vertx

fun main(args: Array<String>) {
    val vertx = Vertx.vertx()
    vertx.deployVerticle(SomeVerticleOfMine())
}

或者,Vert.x 3 module for Klutter说:



实际上,它确实仅是用于原型(prototype)设计和快速测试,并且没有比让您的IDE进行同样的操作并从编译的类运行更快的速度。然后,您还将拥有IDE的调试功能,这些功能是无价的。

有关将Kotlin与Vert.x 一起使用的一些帮助程序库,请查看以下选项:
  • Vert.x 3 helpers for Kotlin-我是作者,我的图书馆之一
  • Kovert, a REST framework for Vert.x 3-由Cy6erGn0m
  • Vert.x nubes-我是作者,我的图书馆之一
  • full sample project of running Vert.x + Kovert-不是Kotlin特定的,但是使Vert.x-Web对JVM语言更加友好。

  • 有一个App class (特别是从starting Vertx开头)。您可以查看Kovert的代码来完成自己的类似工作,即使用Promises很好地启动和运行Vert.x。 Kovert的文档包含指向starting a Verticle to use Vert.x-WebInjekt的代码的链接,因此您可以阅读更多示例代码。但这有助于理解Kovenant(轻量级依赖关系注册表),Klutter configuration injection( promise 库)和ojit_a,以了解完整的示例。

    其他快速注释,Vert.x具有对其他语言的代码生成支持,但是由于您可以直接调用所有Java版本,因此也不需要支持Kotlin。

    关于kotlin - 如何在运行时编译和使用Kotlin代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34829592/

    10-10 14:25