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;