Affected versions: 2026.1.3
Problem
Builds stay queued with Build settings have not been finalized, or the Finalize build settings stage takes a long time. This affects projects that use versioned settings in the Kotlin DSL format with custom dependencies in .teamcity/pom.xml.
Server thread dumps taken during the stall show "Queued builds settings freezer" threads inside AbstractHttpClientWagon.backoff. In the wire-level Maven logging, HTTP 429 responses are recorded from repo.maven.apache.org for maven-metadata.xml requests for -SNAPSHOT versions of packages, potentially including org.jetbrains.teamcity:configs-dsl-kotlin-*:1.0-SNAPSHOT that are provided by the TeamCity server itself.
Note: This problem is distinct from Builds fail with '429 Too Many Requests' when resolving dependencies via Maven Central, which addresses HTTP 429 from Maven Central in build steps (not in Kotlin DSL dependency resolution).
Cause
Whenever a DSL project has custom dependencies, TeamCity appends Maven Central to the resolution repository list under the ID DefaultMavenRepository, even though .teamcity/pom.xml does not declare it.
For SNAPHOT versions of dependencies, Maven asks every repository on that list which build is newest, regardless of repository order. TeamCity generates its own configs-dsl-kotlin-* artifacts per server at version 1.0-SNAPSHOT, so those metadata lookups repeat on every settings finalization. Maven Central never hosts -SNAPSHOT artifacts, but the request volume trips its rate limit. Each 429 response makes Maven wait and retry, which occupies the settings freezer thread pool and blocks finalization for unrelated projects.
Resolution
The unnecessary snapshot lookups are tracked as TW-102805. When fixed, the workaround should not be required.
Workaround:
Redirect the implicitly added repository to an internal Maven repository that proxies Maven Central.
-
In the internal repository manager, identify a repository that proxies Maven Central, for example
https://repo.example.com/maven-central-proxy. -
Create a file named
mavenSettingsDsl.xml:<settings> <mirrors> <mirror> <id>central-rpoxy</id> <url>https://repo.example.com/maven-central-proxy</url> <mirrorOf>central,DefaultMavenRepository</mirrorOf> </mirror> </mirrors> </settings>WARNING: The
DefaultMavenRepositoryID in the<mirrorOf>block is crucial. Do not change it, otherwise the repo implicitly added by TeamCity will not be proxied/mirrored. -
Upload it on the Maven Settings page of the Root project. Subproject copies are ignored for DSL resolution.
Note: If there is no internal proxy or mirror of Maven Central, use Google's Maven Central mirror, but keep DefaultMavenRepository as the ID in the <mirrorOf> block.
The mirror applies to every project on the server, requires no per-project changes or server restarts, and affects only the Kotlin DSL Versioned Settings resolution on the server. Maven build steps are unaffected.
Comments
0 comments
Please sign in to leave a comment.