En nuestro proyecto de Android codificamos en Kotlin y apuntamos a Java 1.6. Sin embargo, nos vemos obligados a Java 1.8 en nuestra prueba, ya que algunas funciones de JUnit5 lo requieren (métodos estáticos en las interfaces).
¿Es posible compilar las pruebas de manera diferente al código de producción?
Intentamos elevar jvmTarget a 1.8 agregando esto a nuestro build.gradle:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } }Esto también eleva el jvmTarget del código de producción, pero solo lo queremos para nuestras pruebas. Los Docs indican que se puede especificar para la prueba así:
compileReleaseUnitTestKotlin{ kotlinOptions { jvmTarget = "1.8" } } Desafortunadamente, build.gradle no se compila.
Los documentos de Kotlin mencionan cómo hacerlo solo para pruebas.
ADSL maravilloso:
compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }ADSL de Kotlin:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile val compileTestKotlin: KotlinCompile by tasks compileTestKotlin.kotlinOptions.jvmTarget = "1.8"Este fragmento hace el trabajo por mí:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) { if (it.name.contains("UnitTest")) { kotlinOptions { jvmTarget = "1.8" } } }Debo decir que no es la mejor solución para filtrar las tareas de prueba en función de sus nombres, así que piense en esto como una ayuda rápida y sucia.