4

我想使用本地编译器编译一些示例 kotlin 项目。我从 githib 克隆 jetbrains/kotlin 项目并构建它。现在我在 /dist 文件夹中有本地编译器。我如何需要在示例项目中配置 gradle 以在其中使用此本地编译器并具有远程调试的能力?

4

1 回答 1

6

最简单的方法是构建整个工具链并在您的测试项目中使用它。为此,请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-SNAPSHOTGradle 插件的版本:

    plugins {
        id("org.jetbrains.kotlin.jvm").version("1.3-SNAPSHOT")
    }
    

为了能够调试编译器,您需要使用等待连接的调试代理运行其进程。通常,编译器在更难连接的守护进程中运行。在 Gradle 进程中运行编译器要简单得多。为此,您需要在 Gradle 进程中设置系统属性kotlin.compiler.execution.strategyin-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 进程获得足够的堆空间。

于 2019-11-21T22:04:30.850 回答