protected fun getTCVersion()

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")
        }
    }