The SQL code is all related to JDBC and related appenders which could go in their own module. The naming is primarily used for EE stuff which could all be split out (plus, I don’t think it’s in the default Android variant of Java). The RMI thing can probably be replaced as you suggested. JMX/management might have some overlap there? As for the beans package, that can also be replaced with code instead of linking in that module.
The interesting ones look to be XML and scripting as those are fairly useful core features, but they could be in their own modules. That would likely leave core such that it only supports programmatic configuration and properties files since every other format requires additional modules besides base. As for exports, that would likely depend on what’s left in core after splitting out the above mentioned things. On Tue, Apr 13, 2021 at 10:43 Ralph Goers <ralph.go...@dslextreme.com> wrote: > I started doing the work to modularize log4j-core last night. We have a > blocker in that the disruptor has not had a release in 3 years. They > committed the change to make it an automatic module over a year ago and > since have fully modularized it. They simply haven’t performed a release. > > As I was going through the module descriptor (see below) it seems to me > that we have far more dependencies in core than I would really like. For > example, despite moving the Jackson Layouts to their own modules we still > have a dependency on Jackson. We also have dependencies on things like > java.rmi, java.naming, java.sql. I am also not clear on whether they are > all really optional or not. Ideally, the only required dependency we should > have is for java.base. For example, we need java.rmi because Log4jLogEvent > uses MarshalledObject. I have no idea why we need that particular class to > wrap a log event. Couldn’t we have created our own class for that? We need > java.desktop because java.beans now lives there. Perhaps we could look at > what those are and if it is really just one or two utility methods > implement them locally. > > In the meantime I have created an issue with the Disruptor asking for a > release. I can’t do much more with core until that is available. I can move > on to other modules. > > We also need to look at the list of exports below and the classes in them > and determine what is really public and what should be private. > > > Thoughts? > > Ralph > > > module org.apache.logging.log4j.core { > exports org.apache.logging.log4j.core; > exports org.apache.logging.log4j.core.appender; > exports org.apache.logging.log4j.core.appender.db; > exports org.apache.logging.log4j.core.appender.nosql; > exports org.apache.logging.log4j.core.appender.rewrite; > exports org.apache.logging.log4j.core.appender.rolling; > exports org.apache.logging.log4j.core.appender.rolling.action; > exports org.apache.logging.log4j.core.appender.routing; > exports org.apache.logging.log4j.core.async; > exports org.apache.logging.log4j.core.config; > exports org.apache.logging.log4j.core.config.arbiters; > exports org.apache.logging.log4j.core.config.builder.api; > exports org.apache.logging.log4j.core.config.builder.impl; > exports org.apache.logging.log4j.core.config.composite; > exports org.apache.logging.log4j.core.config.json; > exports org.apache.logging.log4j.core.config.plugins; > exports org.apache.logging.log4j.core.config.plugins.convert; > exports org.apache.logging.log4j.core.config.plugins.inject; > exports org.apache.logging.log4j.core.config.plugins.util; > exports org.apache.logging.log4j.core.config.plugins.visitors; > exports org.apache.logging.log4j.core.config.properties; > exports org.apache.logging.log4j.core.config.status; > exports org.apache.logging.log4j.core.config.xml; > exports org.apache.logging.log4j.core.config.yaml; > exports org.apache.logging.log4j.core.filter; > exports org.apache.logging.log4j.core.impl; > exports org.apache.logging.log4j.core.jmx; > exports org.apache.logging.log4j.core.layout; > exports org.apache.logging.log4j.core.lookup; > exports org.apache.logging.log4j.core.message; > exports org.apache.logging.log4j.core.net; > exports org.apache.logging.log4j.core.net.ssl; > exports org.apache.logging.log4j.core.osgi; > exports org.apache.logging.log4j.core.parser; > exports org.apache.logging.log4j.core.pattern; > exports org.apache.logging.log4j.core.script; > exports org.apache.logging.log4j.core.selector; > exports org.apache.logging.log4j.core.time; > exports org.apache.logging.log4j.core.tools; > exports org.apache.logging.log4j.core.tools.picocli; > exports org.apache.logging.log4j.core.util; > exports org.apache.logging.log4j.core.util.datetime; > > requires transitive java.desktop; > requires transitive java.management; > requires java.naming; > requires transitive java.sql; > requires java.rmi; > requires transitive java.scripting; > requires java.xml; > requires org.apache.logging.log4j; > requires org.apache.logging.log4j.plugins; > //requires transitive com.lmax.distruptor; > requires transitive org.osgi.core; > requires transitive com.conversantmedia.disruptor; > requires transitive com.fasterxml.jackson.core; > requires transitive com.fasterxml.jackson.databind; > requires transitive com.fasterxml.jackson.dataformat.xml; > requires transitive com.fasterxml.jackson.dataformat.yaml; > requires transitive org.apache.commons.compress; > requires transitive org.fusesource.jansi; > uses org.apache.logging.log4j.core.util.ContextDataProvider; > provides > org.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory with > org.apache.logging.log4j.core.message.ExtendedThreadInfoFactory; > provides org.apache.logging.log4j.core.util.ContextDataProvider with > org.apache.logging.log4j.core.impl.ThreadContextDataProvider; > provides org.apache.logging.log4j.spi.Provider with > org.apache.logging.log4j.core.impl.Log4jProvider; > provides org.apache.logging.log4j.plugins.processor.PluginService with > org.apache.logging.log4j.core.plugins.Log4jPlugins; > >