Jake, This is awesome! I do have a question, though: would releasing such a module info make it hard to improve upon later by giving the expectation of one set of modules?
Thanks, Galen On Mon, Dec 3, 2018 at 4:44 PM Jacob Barrett <jbarr...@pivotal.io> wrote: > Yeah that would fix one of a dozen “leaked” internal packages. Baby steps! > > -Jake > > > > On Dec 3, 2018, at 4:32 PM, Kirk Lund <kl...@apache.org> wrote: > > > > Moving internal.logging to geode-logging would involve moving some > > internal.logging classes to org.apache.geode.logging. I think that would > > help with the logging portion of what you're doing. > > > >> On Mon, Dec 3, 2018 at 4:30 PM Kirk Lund <kl...@apache.org> wrote: > >> > >> I'm iteratively cleaning up geode's internal logging (specifically our > >> dependency on log4j core) so that log4j core can be optional and a user > >> could switch it out for logback or do further customization of our > logging. > >> > >> Even without the modules work you're doing, moving our logging internals > >> to a new geode-logging module would make my work easier so that I could > >> hide the Geode log4j2 appenders behind a ServiceLoader -- would that > make > >> your work easier or more difficult? > >> > >>> On Mon, Dec 3, 2018 at 1:31 PM Jacob Barrett <jbarr...@pivotal.io> > wrote: > >>> > >>> 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 > >>> > >>> >