Do you want to stay on Java 8 while taking advantage of the latest Java syntax and features? A tool called Jabel enables this because, as its GitHub page states, “life is too short to wait for your users to upgrade their Java.”
Jabel is an “annotation processor” that instruments Java compiler classes and treats some Java 9 and later language features as if they were supported in Java 8. The result is valid Java 8 bytecode for switch expressions, var
declarations, and other features not supported in Java 8. Basically, Jabel tricks the compiler into thinking that certain features were developed for Java 8 by removing the checks that report them as invalid for the Java 8 target.
Jabel is in a proof of concept stage at this point, with developer Sergei Egorov even referring to it as a “hack.” The Jabel page stresses that the majority of open source libraries are still using Java 8 as their target. But since most new language features introduced after Java 8 did not require a change in bytecode, the javac
compiler could emit Java 8 bytecode even when compiling sources from Java 12.
Jabel also allows developers to use Java 13 syntax in the GraalVM virtual machine. Java 13 is due for a production release on September 17. Jabel is similar to Project Lombok, a Java library intended to reduce boilerplate code, but does not contain any business logic, Egorov said. In explaining his motivation behind developing Jabel, Egorov said other languages have adopted source transformation pipelines, particularly JavaScript, and this inspired him to try the same for Java. Java 8 was introduced in March 2014. The current release of Java is version 12.
Instructions on using Jabel can be found on GitHub. A plug-in for Jabel is distributed with the JitPack package repo.