name.remal.gradle_plugins.dsl.extensions.org.gradle.internal.jvm.JavaInfo.kt Maven / Gradle / Ivy
package name.remal.gradle_plugins.dsl.extensions
import name.remal.version.Version
import org.gradle.internal.jvm.JavaInfo
import org.gradle.process.internal.DefaultExecActionFactory
import org.gradle.process.internal.ExecHandleFactory
import java.io.ByteArrayOutputStream
import java.nio.charset.StandardCharsets
fun JavaInfo.retrieveVersion(): Version? {
ByteArrayOutputStream().use versionGetter@{ stdOutputStream ->
ByteArrayOutputStream().use { errOutputStream ->
val execHandleFactory: ExecHandleFactory = INSTANTIATOR.newInstance(DefaultExecActionFactory::class.java)
val builder = execHandleFactory.newExec()
builder.setCommandLine(javaExecutable, "-version")
builder.standardOutput = stdOutputStream
builder.errorOutput = errOutputStream
builder.build().start().waitForFinish().assertNormalExitValue()
parseJavaVersionOutput(stdOutputStream.toByteArray())?.let { return@versionGetter it }
parseJavaVersionOutput(errOutputStream.toByteArray())?.let { return@versionGetter it }
return null
}
}
return null
}
private fun parseJavaVersionOutput(bytes: ByteArray): Version? {
val text = bytes.toString(StandardCharsets.UTF_8).replace("\r", "").trim()
val lines = text.split('\n')
for (line in lines) {
val versionStr = line.toLowerCase().substringAfter("version", "").trim('\t', ' ', '"', '\'')
if (versionStr.isNotEmpty()) {
return Version.parse(versionStr)
}
}
return null
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy