gpt4 book ai didi

kotlin - 如何在运行时编译和使用 Kotlin 代码?

转载 作者:IT老高 更新时间:2023-10-28 13:41:32 25 4
gpt4 key购买 nike

我正在尝试创建 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。 为此,请构建您的类并运行您自己的 main()deploys a verticle programatically .你的代码很简单:

import io.vertx.core.Vertx

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

或者,docs for running and deploying from the command-line说:

Vert.x will compile the Java source file on the fly before running it. This is really useful for quickly prototyping verticles and great for demos. No need to set-up a Maven or Gradle build first to get going!

实际上,它确实只是用于原型(prototype)设计和快速测试,它并不比让您的 IDE 做同样的事情并从已编译的类中运行更快。然后,您还拥有 IDE 的调试功能,这些功能非常有值(value)。

有关将 Kotlin 与 Vert.x 结合使用的一些帮助库,请查看以下选项:

有一个full sample project of running Vert.x + Kovert (特别是从 App class 开始)。您可以查看 Kovert 的代码来完成您自己的类似工作,以使用 Promises 或您希望的方式很好地启动和运行 Vert.x。 Kovert 的文档有 starting Vertx 的代码链接还有starting a Verticle to use Vert.x-Web ,因此您可以阅读更多示例代码。但有助于理解 Injekt (轻量级依赖注册表),Kovenant ( promise 库)和Klutter configuration injection了解完整的样本。

其他快速说明,Vert.x 有其他语言的 codegen 支持,但由于你可以直接调用所有 Java 版本,它也不需要支持 Kotlin。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com