Challenges updating your code to work with Java 9 Jigsaw
With the introduction of the Jigsaw module system many projects are confronted with issues running their code, now throwing new Exceptions like InaccessibleObjectException because they used to work around issues in the Java API. Although many features like the famous sun.misc.Unsafe are now provided by other public APIs, there is still the problem of making your code work with previous Java versions, but also dynamically using the new Java 9 replacements. Apache Lucene, the open source fulltext search library behind Apache Solr and Elasticsearch, is also using some of those "hacks" to work around issues in the Java API, but the developers also noticed that some code in the project hit some limits introduced by the module system. This talk will show on some examples how Apache Lucene managed to allow its code to run with different java versions (without using multi-release JAR files, as this brings additional burden with the build system) and still offer backwards compatibility to earlier versions. It will show also the common pitfalls that can be easily found with running your tests in a security manager to uncover bugs.