Coming from #270, below is the table of different approaches we identified to initially support Java 9.
| Reflection |
Freeze 8, Continue 9 |
"Boilerplate" directories/modules |
| Continuous Java 8 support |
Frozen Java 8 support (or developer forks) |
Continuous Java 8 support |
| Java 9 support |
Java 9 support |
Java 9 support |
| --- |
module-info.java included |
module-info.java included |
| may require executable jar flags |
--- |
--- |
| --- |
--- |
requires "boilerplate" directories / modules |
| --- |
--- |
requires modifying build.gradle's compileJava step to account for which JDK is compiling it |
| --- |
--- |
requires java8/java9 to be included in version string OR requires a multi-release jar |
| --- |
--- |
requires modifying how releases are built and released via Gradle |
This issue focuses on how we should continue our migration to full Java 9 support. Currently, we are using the reflection approach to make a jar that works on both Java 8 and 9. However, this does not fully utilize the advantages of modularization.
The talk in the aforementioned issue was to migrate to a multi-release jar (MRJars). In melix/mrjar-gradle#1, it is noted that MRJars are a bad solution to a real problem, but I still have yet to hear an explanation why. Also, Gradle does not yet have a fully supported plugin to handle these things correctly, although the experimental Chainsaw plugin does exist.
Coming from #270, below is the table of different approaches we identified to initially support Java 9.
module-info.javaincludedmodule-info.javaincludedbuild.gradle's compileJava step to account for which JDK is compiling itjava8/java9to be included in version string OR requires a multi-release jarThis issue focuses on how we should continue our migration to full Java 9 support. Currently, we are using the reflection approach to make a jar that works on both Java 8 and 9. However, this does not fully utilize the advantages of modularization.
The talk in the aforementioned issue was to migrate to a multi-release jar (MRJars). In melix/mrjar-gradle#1, it is noted that MRJars are a bad solution to a real problem, but I still have yet to hear an explanation why. Also, Gradle does not yet have a fully supported plugin to handle these things correctly, although the experimental Chainsaw plugin does exist.