In case you’ve not been following the progress of the next release of Java SE, Java 9, we thought we should let you know what the current status is (or at least our current understanding of it!).
As you might expect, the next version of Java will have some changes in it from the earlier versions. By far the biggest, is the introduction of Jigsaw, an API for building modular applications. Some have described this as a bigger change for Java than when generics were introduced back in Java 5.
If you’re not familiar with modular applications, then in simple terms the idea is that you can split larger applications into smaller parts (modules). Each module can depend on / use other modules, but they’re built as separate projects, and compiled into separate Jar files. There are quite a few potential benefits to this approach, but perhaps the most useful is that if you need to change a single module, you can do that without needing to amend or recompile any of the other modules. There's more to it than this, but that's a very simple high level overview.
If this sounds familiar (you may be thinking about microservices) well it’s another way of solving the same problem that microservices solves, at least in terms of building smaller, more manageable applications rather than monoliths.
Actually if you have a need for modular Java right now, then you don’t need to wait for Jigsaw – the OSGi framework (https://www.osgi.org/) provides this today, and although I've never used it personally, everyone I have met who has say it works well. Unfortunately Jigsaw isn’t compatible with OSGi… I guess there are some politics involved as to why they didn’t adopt OSGi as the standard!
So that’s the background… what’s the current status?
Well Jigsaw is having some problems. I have tried using it myself, with the current beta release of the Java 9 JDK. I thought it might be an interesting and useful exercise to take an internal Spring Boot based application that we use at Virtual Pair Programmers, and upgrade it to make it modular.
Unfortunately I ran into some problems doing this, including:
- Maven doesn’t work with Jigsaw right now. So if you want to build a set of modular Spring Boot applications, for example, well it’s possible in theory but highly frustrating in practice…. it involves writing a number of shell scripts and delving into the file system to work out where all the maven dependency jars have been put, so that you can reference them in your compilation scripts.
- Eclipse doesn’t really cope well with Modular projects right now. It can be used to edit them (although you’ll do some frustrating manual moving around of the file structure to get it to work) but you can’t currently create a modular Jar / War file from Eclipse. Again you'll end up writing shell scripts to do these. We understand that other IDEs have similar issues.
This means that today, Jigsaw is really not ready for use. We recently attended the London Java User Group’s hackday to get an introduction to Java 9, and certainly left there with a feeling that the modular approach is going to take some getting used to… and without full integration with familiar build tools and IDEs, it won’t get widely adopted.
It seems that more widely within the Java community our view that Jigsaw isn’t ready is shared… and not just for the reasons we have come across. Currently 13 of the 23 organisations that have a vote on the Java Committee have voted no to Jigsaw being ready to release (https://jcp.org/en/jsr/results?id=5959).
Currently Java 9 is scheduled for release on July 27 2017. Whether it gets delayed, it gets released without Jigsaw, or the Jigsaw issues get sufficiently fixed in time, we’ll have to wait to see!