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;