All, I’ll start with yuck! I took a stab at adding module-info.java files to core and cq and it isn’t pretty. So all the work done in he second iteration, internal package refactoring, etc., also has to be done for real modules. To achieve this we basically have to compile the sources in a Java 9+ compiler using the new ‘—release X’ argument, where primary sources get ‘—release 8’ and module-info.java gets ‘—release 9’. If only it was that easy though as the compiler validates the module-info.java when compiling so all the packages and classes mention in it must exist in the source input to javac. Blah blah smoke and mirrors later it is doable, such that a jar is produced with Java 8 compatible (binary and API) classes and a Java 9+ module info file.
When all is done here is the module file for the core, cq and an application. geode-core: module org.apache.geode.core { exports org.apache.geode; exports org.apache.geode.cache; exports org.apache.geode.cache.client; exports org.apache.geode.cache.query; exports org.apache.geode.pdx; requires org.apache.geode.common; requires org.apache.geode.json; requires java.desktop; requires java.naming; requires java.management; requires java.rmi; requires java.sql; requires org.apache.logging.log4j; requires org.apache.logging.log4j.core; requires antlr; opens org.apache.geode.internal.logging.log4j to org.apache.logging.log4j.core; opens org.apache.geode.cache.query.internal.parse to antlr; uses org.apache.geode.distributed.internal.DistributedSystemService; uses org.apache.geode.cache.query.internal.cq.spi.CqServiceFactory; uses org.apache.geode.internal.cache.CacheService; // TODO Internal exports are bad exports org.apache.geode.cache.client.internal to org.apache.geode.cq; exports org.apache.geode.cache.query.internal to org.apache.geode.cq; exports org.apache.geode.cache.query.internal.cq to org.apache.geode.cq; exports org.apache.geode.cache.query.internal.cq.spi to org.apache.geode.cq; exports org.apache.geode.distributed.internal to org.apache.geode.cq; exports org.apache.geode.internal to org.apache.geode.cq; exports org.apache.geode.internal.cache to org.apache.geode.cq; exports org.apache.geode.internal.cache.tier.sockets to org.apache.geode.cq; exports org.apache.geode.internal.logging to org.apache.geode.cq; exports org.apache.geode.internal.statistics to org.apache.geode.cq; } geode-cq: module org.apache.geode.cq { requires org.apache.geode.core; provides org.apache.geode.cache.query.internal.cq.spi.CqServiceFactory with org.apache.geode.cq.internal.cache.query.CqServiceFactoryImpl; provides org.apache.geode.distributed.internal.DistributedSystemService with org.apache.geode.cq.internal.CQDistributedSystemService; requires org.apache.logging.log4j; } application: module com.example.java11example { exports com.example; // for PDX auto serialization opens com.example to org.apache.geode.core; requires org.apache.geode.core; requires org.apache.geode.cq; } Thoughts? -Jake