Компиляция проекта Android с kotlin на TeamCity не удается

Мой шаг построения использует построение градации в шаблоне из TeamCity, но, к сожалению, я получаю:

[16:29:22][:presentation:compileLocalDebugKotlin] Using kotlin incremental compilation [16:29:48][:presentation:compileLocalDebugKotlin] Compilation with Kotlin compile daemon was not successful [16:29:48][:presentation:compileLocalDebugKotlin] java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: [16:29:48][:presentation:compileLocalDebugKotlin] java.io.EOFException [16:29:48][:presentation:compileLocalDebugKotlin] at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:229) [16:29:48][:presentation:compileLocalDebugKotlin] at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162) 

Любые идеи о том, почему я могу это получить?

Solutions Collecting From Web of "Компиляция проекта Android с kotlin на TeamCity не удается"

Я столкнулся с тем же вопросом. Однако он не был связан с Котлином.

Мне пришлось отключить дегустацию градиента (в любом случае это не рекомендуется на серверах CI).

В teamcity вы можете, например, сделать это, добавив -Dorg.gradle.daemon=false в переменную среды GRADLE_OPTS .

См. https://docs.gradle.org/current/userguide/gradle_daemon.html.

По умолчанию компилятор Kotlin выполняет свой собственный демон процесса. Передайте эту конфигурацию Gradle при запуске на CI для компиляции Kotlin в том же процессе сборки:

 -Dkotlin.compiler.execution.strategy="in-process" 

Отключение демона Gradle также является распространенной практикой в ​​средах CI:

 -Dorg.gradle.daemon=false 

Можно было бы ожидать, что свойство демона Gradle также отключит демон прототипа компилятора Kotlin, но это не то, что в настоящее время происходит. GradleKotlinCompilerRunner.kt учитывает свойство org.gradle.daemon после свойства kotlin.compiler.execution.strategy . Если стратегия исполнения не определена, бегун по умолчанию использует стратегию "daemon" :

 val executionStrategy = System.getProperty(KOTLIN_COMPILER_EXECUTION_STRATEGY_PROPERTY) ?: DAEMON_EXECUTION_STRATEGY if (executionStrategy == DAEMON_EXECUTION_STRATEGY) { val daemonExitCode = compileWithDaemon(compilerClassName, compilerArgs, environment) if (daemonExitCode != null) { return daemonExitCode } else { log.warn("Could not connect to kotlin daemon. Using fallback strategy.") } } val isGradleDaemonUsed = System.getProperty("org.gradle.daemon")?.let(String::toBoolean) return if (executionStrategy == IN_PROCESS_EXECUTION_STRATEGY || isGradleDaemonUsed == false) { compileInProcess(argsArray, compilerClassName, environment) } else { compileOutOfProcess(argsArray, compilerClassName, environment) } 

Явное определение стратегии выполнения для "in-process" приведет вас к compileInProcess() независимо от конфигурации демона Gradle, однако вам может потребоваться отключить оба этих демона на серверах CI.