web-dev-qa-db-fra.com

Kotlin prend-il en charge Java 11?

J'essaie d'utiliser Kotlin V1.2.70, Gradle V4.10.1 et Java 11. Lors de la compilation du projet à l'aide de gradle, une erreur indiquant "Version cible JVM inconnue: 11. Versions prises en charge: 1.6, 1,8 ".

Est-ce que le compilateur Kotlin supporte Java 11 (produit du code compatible avec Java 11 JVM)??)? Si oui, comment configurer cela avec gradle?

19
dharanikesav

Le bytecode généré par le compilateur Kotlin, lorsque la version cible est définie sur 1.6 ou 1.8, est entièrement compatible avec JVM 11.

22
yole

Le compilateur Kotlin prend en charge les versions de bytecode JVM 9, 10, 11 et 12 en tant que cibles depuis Kotlin 1.3.30 ( changelog ).

Avant la version 1.3.30, seules les versions de bytecode JVM 1.6 et 1.8 étaient prises en charge en tant que cibles. Depuis que vous avez utilisé 1.2.70, la spécification du bytecode de JVM 11 comme cible a entraîné l'erreur que vous avez mentionnée.

Il y a deux solutions:

  • Spécifiez 1.8 comme version de bytecode cible de la JVM. Comme @yole l'a dit dans sa réponse, cela est entièrement compatible avec JVM 11. En fait, comme indiqué dans le journal des modifications de Kotlin 1.3. , les versions de bytecode cible de la JVM plus récentes n'apportent actuellement aucune optimisation de bytecode. au-delà de celles prises en charge dans la version 1.8, cela ne fait donc vraiment aucune différence pour le moment.

  • Mettez à niveau vers Kotlin 1.3.30 (ou une version plus récente). Vous pouvez alors conserver 11 comme valeur cible du bytecode de la JVM. L'avantage est que vous bénéficierez automatiquement d'optimisations de bytecode supplémentaires dans les futures versions du compilateur Kotlin.

6
Malte Skoruppa