Are there many breaking changes between java versions? I know Microsoft tries to avoid that with .net and upgrading to a new version is often just changing a setting and recompile, but I have no experience with java.
due to the modularization effort that went into Java 9, a lot of previously accidentally exposed internals have become inaccessible.
Unfortunately, many widely used libraries depended on said exposed internals and now stopped working.
Many libraries have since been updated, but often in form of new major releases and not all libraries give the same backwards compatibility guarantees as Java itself does.
So even if you yourself were a good citizen, relied only on public interfaces and got rid of uses of deprecated API in a timely fashion, then some libraries you depend on might not have done so or might have changed a lot since you last updated them.
^ There, that could be a problem. I have a couple of anfient Java apps that I have no source code for. Some of them were written for Java 7 and no longer work with Java 9. (Fixable with a tweaked OpenJDK JRE, yes, somewhat)
It is the same with Java. The only breaking changes I have seen were when old code used things that became keywords in newer versions. That said, new version of Java means a new runtime and all the issues that can introduce. Running an application on the new version has always been pretty easy. It's recertifying it and possibly tuning things like garbage collection that make this daunting for a large organization.
Unfortunately, many widely used libraries depended on said exposed internals and now stopped working.
Many libraries have since been updated, but often in form of new major releases and not all libraries give the same backwards compatibility guarantees as Java itself does.
So even if you yourself were a good citizen, relied only on public interfaces and got rid of uses of deprecated API in a timely fashion, then some libraries you depend on might not have done so or might have changed a lot since you last updated them.