Как включить "--enable-preview" для тестов?

Как включить "--enable-preview" для тестов в скрипте Gradle на основе Kotlin? Я пробовал буквально все, что мог найти в Интернете, причем /questions/50679895/kak-ustanovit-ispolzovanie-enable-preview-kompilyatsiya-i-zapusk-flagov-iz-gradl/50679909#50679909 был наиболее близким к правильному ответу.

Я все еще получаю следующую ошибку :test задача

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 'com.blabla.playground.AppTest'.
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
Caused by: java.lang.UnsupportedClassVersionError: Preview features are not enabled for com/blabla/playground/AppTest (class file version 58.65535). Try running with '--enable-preview'
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)

по сценарию

plugins {
    java
    application
}

repositories {
    jcenter()
}

dependencies {
    implementation("com.google.guava:guava:28.2-jre")
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.0")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.6.0")
}

application {
    mainClassName = "com.blabla.playground.App"
}

java {
    sourceCompatibility = JavaVersion.VERSION_14
    targetCompatibility = JavaVersion.VERSION_14
}

tasks {
    withType<Test>().all {
        allJvmArgs.add("--enable-preview")
        testLogging.showStandardStreams = true
        testLogging.showExceptions = true
        useJUnitPlatform {
        }
    }

    withType<JavaExec>().all {
        jvmArgs!!.add("--enable-preview")
    }

    withType<Wrapper>().all {
        gradleVersion = "6.4.1"
        distributionType = Wrapper.DistributionType.BIN
    }

    withType(JavaCompile::class.java).all {
        options.compilerArgs.addAll(listOf("--enable-preview", "-Xlint:preview"))
    }

    jar {
        manifest {
            attributes("Main-Class" to "com.blabla.playground.App")
        }
    }
}

Что мне не хватает?

1 ответ

Решение

Оказалось, что то, как вы настраиваете флаг для Test задачи на самом деле не добавляют флаг к allJvmArgs.

Мне удалось заставить его работать, настроив Test такие задачи:

withType<Test>().all {
    jvmArgs("--enable-preview")
}

или

withType<Test>().all {
    allJvmArgs = listOf("--enable-preview")
}

Однако второй вариант может быть не предпочтительным, поскольку он заменяет все аргументы JVM для разветвленного процесса (включая аргументы для определения свойств системы, минимальный / максимальный размер кучи и путь к классам начальной загрузки). Первый вариант предпочтительнее.

Другие вопросы по тегам