The SonarQube v8.9.0 LTS release is a SemVer breaking change over v8.8.0 and as such these changes should have been held back until after the LTS was cut and been part of v9.0.0 with communication making it clear. This is a major issue for anyone who has upgraded to the v8 line of releases and is now stuck on a non-LTS version with no option for upgrading, tt’s not even clearly called out in the release notes.
What are the breaking change(s)?
The removal of the lib folder and the ability to modify the SonarQube behaviour is a full breaking change between v8.8.0 and v8.9.0. Firstly this is a major misuse of SemVer, if you use a Semver version then it’s assumed that you are following it; if you don’t want to use SemVer use another versioning strategy. Doing this as a SemVer major release, say v9.0.0, wouldn’t be a “problem” (it is however problematic) if it was widely communicated before the event and coincided with a planned LTS route for users who were already using this functionality before the announcement (e.g. v8.9.0 is a LTS release and the last release before lib is removed) so nobody upgraded under the expectation that they’d have a route to the next LTS.
SonarQube offers well-documented APIs for extending SonarQube via plugins – adding additional binaries to any folder outside the /extensions/plugins directory was never one of those methods, and therefore I don’t think it can really be argued that we broke some API contract. If you start to modify your SonarQube instance through unsupported means, this is the risk you run.
That’s a bit of a disingenuous argument; it might not be documented API but SonarQube is written in Java and the addition of JARs to the classpath (where used) is a standard Java API. Obviously shipping a fat JAR changes the API which is fine if you’re changing the major version but isn’t something to be expected in a minor release. You have a lot of potential customers who would be alienated by this happening at this point in the LTS lifecycle. I’d be happy to add a PR to re-enable this via a configuration property that could be removed on the v9 release line.