我想使用本地编译器编译一些示例 kotlin 项目。我从 githib 克隆 jetbrains/kotlin 项目并构建它。现在我在 /dist 文件夹中有本地编译器。我如何需要在示例项目中配置 gradle 以在其中使用此本地编译器并具有远程调试的能力?
1 回答
最简单的方法是构建整个工具链并在您的测试项目中使用它。为此,请install
在 Kotlin 项目中运行 Gradle 任务:
./gradlew install
~/.m2/repository
这将使用当前的默认快照版本将项目的所有 Maven 模块发布到 Maven 本地存储库(默认情况下) 1.3-SNAPSHOT
。
然后,在您的测试 Gradle 项目中:
如果您使用
buildscript
块和apply
语句应用 Gradle 插件,请将mavenLocal()
存储库添加到buildscript { repositories { ... } }
并使用 Gradle 插件的快照版本:buildscript { repositories { mavenLocal() jcenter() } dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3-SNAPSHOT") } }
如果使用
plugins { ... }
块应用插件,请修改settings.gradle
脚本并添加以下内容:pluginManagement { repositories { mavenLocal() gradlePluginPortal() } }
再次使用
1.3-SNAPSHOT
Gradle 插件的版本:plugins { id("org.jetbrains.kotlin.jvm").version("1.3-SNAPSHOT") }
为了能够调试编译器,您需要使用等待连接的调试代理运行其进程。通常,编译器在更难连接的守护进程中运行。在 Gradle 进程中运行编译器要简单得多。为此,您需要在 Gradle 进程中设置系统属性kotlin.compiler.execution.strategy
(in-process
注意:这不应该是 Gradle 项目属性,而是可以-Dkey=value
通过System.setProperty(...)
.
然后使用命令行运行 Gradle 构建-Dorg.gradle.debug=true
以使 Gradle 等待远程调试器。我建议从终端而不是 IDE 运行测试项目构建。
这看起来像:
./gradlew compileKotlin -Dorg.gradle.debug=true -Dkotlin.compiler.execution.strategy=in-process
Starting a Gradle Daemon, 1 busy Daemon could not be reused, use --status for details
> Starting Daemon
(此时,构建似乎挂起,但它只是等待调试器,所以继续下面)
在您使用 Kotlin 项目的 IDE 中,在编译器代码中放置一些断点并将远程调试器附加到 Gradle 进程。
请注意,在 Gradle 进程中运行 Kotlin 编译器时,后者可能会更快耗尽内存。确保 Gradle 进程获得足够的堆空间。