Within my project I need to assign the JVM version as different types:
org.jetbrains.kotlin.gradle.dsl.JvmTarget
org.gradle.api.JavaVersion
In order to keep the project maintainable I like to define the JVM version in a single place. Hence, I would like to either (1) convert between the different types or (2) to create both a JvmTarget
instance and a JavaVersion
instance from an integer.
JvmTarget.fromInteger(11) // JvmTarget.JVM_11
JavaVersion.fromInteger(11) // JavaVersion.VERSION_11
In the JvmTarget
class fromTarget(String)
already exists.
JvmTarget.ofJavaVersion(JavaVersion.VERSION_11) // JvmTarget.JVM_11
JavaVersion.ofJvmTarget(JvmTarget.JVM_11) // JavaVersion.VERSION_11
As well as having JvmTarget.fromTarget()
which accepts a string, we have JavaVersion.toVersion()
which accepts a Java Object
, which can be either an integer or a string1.
So to define both from an integer you can do:
val javaVersionSetting = 21
val jvmTarget = JvmTarget.fromTarget(javaVersionSetting.toString())
val javaVersion = JavaVersion.toVersion(javaVersionSetting)
Or from a string, which doesn't involve any conversion of basic types:
val javaVersionSetting = "21"
val jvmTarget = JvmTarget.fromTarget(javaVersionSetting)
val javaVersion = JavaVersion.toVersion(javaVersionSetting)
1And if you want three for a party someday, there is also JavaLanguageVersion.of()
from Gradle's Java toolchains which has overloads accepting an integer or a string.