No se puede comstackr Android Project con Kotlin en TeamCity

Mi paso de compilation usa la plantilla gradle en TeamCity, pero desafortunadamente me sale:

[16:29:22][:presentation:compileLocalDebugKotlin] Using kotlin incremental comstacktion [16:29:48][:presentation:compileLocalDebugKotlin] Comstacktion 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) 

Alguna idea sobre por qué podría get esto?

Me encontré con el mismo problema. Sin embargo, no estaba conectado con Kotlin.

Tuve que desactivar el gradle deamon (no se recomienda en los serveres de CI de todos modos).

En teamcity puede, por ejemplo, hacerlo agregando -Dorg.gradle.daemon=false a la variable de entorno GRADLE_OPTS .

Ver https://docs.gradle.org/current/userguide/gradle_daemon.html

De forma pnetworkingeterminada, el comstackdor de Kotlin se ejecuta en su propio daemon de process. Pase esta configuration a Gradle cuando se ejecuta en CI para comstackr Kotlin en el mismo process de compilation:

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

Deshabilitar el daemon de Gradle también es una práctica común en entornos de CI:

 -Dorg.gradle.daemon=false 

Uno podría esperar que la propiedad del daemon de Gradle también desactivara el daemon del comstackdor de Kotlin, pero eso no es lo que ocurre actualmente. GradleKotlinCompilerRunner.kt solo considera la propiedad org.gradle.daemon después de la propiedad kotlin.compiler.execution.strategy . Si la estrategia de ejecución no está definida, el cornetworkingor usa la estrategia "daemon" por defecto:

 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) } 

Establecer explícitamente la estrategia de ejecución como "in-process" llevará a compileInProcess() independientemente de la configuration del daemon de Gradle, sin embargo, es posible que necesite deshabilitar ambos daemons en los serveres de CI.