in src/main/kotlin/org/jetbrains/teamcity/maven/sdk/AbstractTeamCityMojo.kt [120:153]
protected fun getTCVersion(teamcityDir: File): String {
var commonAPIjar = File(teamcityDir, "webapps/ROOT/WEB-INF/lib/common-api.jar")
// check for new teamcity distributions
if (!commonAPIjar.exists() || !commonAPIjar.isFile)
commonAPIjar = File(teamcityDir, "webapps/ROOT/WEB-INF/lib/build-version.jar")
if (commonAPIjar.exists() && commonAPIjar.isFile) {
var jarFile = JarFile(commonAPIjar)
val zipEntry = jarFile.getEntry("serverVersion.properties.xml")
if (zipEntry == null) {
throw MojoExecutionException("Failed to read TeamCity's version from [${commonAPIjar.absolutePath}]. Please, verify your intallation.")
} else {
// https://bugs.openjdk.org/browse/JDK-8214820 has to replace inline DOCTYPE to proper reference to a dtd
val versionPropertiesStream = jarFile.getInputStream(zipEntry)
var serverVersionProperties = IOUtils.toString(versionPropertiesStream)
if (!serverVersionProperties.contains("<!DOCTYPE properties SYSTEM \"http://java.sun.com/dtd/properties.dtd\">")) {
if (serverVersionProperties.contains("<!DOCTYPE properties [")) {
val p: Pattern = Pattern.compile("\\<\\!DOCTYPE properties [\\w\\W]+\\]>", Pattern.MULTILINE)
val m = p.matcher(serverVersionProperties)
serverVersionProperties = m.replaceFirst("<!DOCTYPE properties SYSTEM \"http://java.sun.com/dtd/properties.dtd\">");
}
}
try {
val props = Properties()
props.loadFromXML(ByteArrayInputStream(serverVersionProperties.toByteArray()))
return props["Display_Version"] as String
} finally {
versionPropertiesStream?.close()
}
}
} else {
throw MojoExecutionException("Can not read TeamCity version. Can not access [${commonAPIjar.absolutePath}]."
+ "Check that [$teamcityDir] points to valid TeamCity installation")
}
}