Scala 2.13 community build radically simplified

Because Scala 2.13 was the final breaking change to the binary compatibility of Scala 2, the old design of the build became overkill. Thus, we have replaced it with a simpler design, similar to how the Scala 3 community build works.

In the old design, everything was built monorepo style, using few or no binary dependencies, and dependencies between repos rewired so that only freshly built artifacts were used.

In the new design, binary dependencies are used for everything, with the exception of compiler plugins. Those must still be handled the old way, since they depend on compiler internals which can change in binary incompatible and/or source incompatible ways at any time, even in a minor release.

But then for the rest of the build, the only dependencies that are rewired are the dependencies on those plugins. Everything else is fetched from Maven Central (and other repositories).

The main advantage of the new setup is that it is far easier to maintain, since we can build practically any project with any set of dependencies, without having to coordinate their versions.

Note that we didn’t change how the 2.12 community build works. The 2.12 build is pretty much frozen these days (except for pointing it at new Scala nightly builds), so there isn’t any need to mess with its structure.

If you’re interested in reading more about this, see radically simplify the build · Issue #1456 · scala/community-build · GitHub, where the change was proposed, and 2.13: radically simplify the build by SethTisue · Pull Request #1472 · scala/community-build · GitHub, where it was implemented.

9 Likes