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

Reply via email to