Log4j-API is not an automatic module. It has a module-info.java file.

Log4j-API does not “require” log4j-core. It’s module-info specification is

exports org.apache.logging.log4j;
exports org.apache.logging.log4j.message;
exports org.apache.logging.log4j.simple;
exports org.apache.logging.log4j.spi;
exports org.apache.logging.log4j.status;
exports org.apache.logging.log4j.util;

uses org.apache.logging.log4j.spi.Provider;
uses org.apache.logging.log4j.util.PropertySource;
uses org.apache.logging.log4j.message.ThreadDumpMessage.ThreadInfoFactory;

Log4j-core IS an automatic module with a name of org.apache.logging.log4j.core. 
It cannot be a “real” module because it has dependencies on libraries that have 
not declared themselves to be Java 9 modules, automatic or otherwise. 
Therefore, it cannot declare that it provides the three items log4j-api says it 
needs for an implementation to provide.

That said, we do have tests that pass and other users have pointed out problems 
in the module-info.java that, once fixed, seemed to have made things work for 
them.

Ralph


> On Jun 23, 2018, at 5:00 AM, Sverre Moe <sverre....@gmail.com> wrote:
> 
> Apache Log4j may have a wrong Automatic-Module-Name
> requires org.apache.logging.log4j.core;
> 
> I cannot use the Logger and LogManager classes because they are not
> accessible to my module.
> 
> import org.apache.logging.log4j.LogManager;
> import org.apache.logging.log4j.Logger;
> private Logger logger = LogManager.getLogger(this.getClass());
> 
> The type org.apache.logging.log4j.LogManager is not accessible
> The type org.apache.logging.log4j.Logger is not accessible
> 
>> "This is the central interface in the log4j package. Most logging 
>> operations, except configuration, are done through this interface. The 
>> canonical way to obtain a Logger for a class is through {@link 
>> LogManager#getLogger()}."
> 
> The Logger implementation is accessible:
> import org.apache.logging.log4j.core.Logger;
> 
> It seems to me that the classes in core package is not to be accessed
> directly by those using Log4j.
> 
> This leads me to believe no one has actually begun to use Log4j in a
> modular project. Because how can they when they cannot access the API.
> 
> The Automatic-Module-Name should be instead "org.apache.logging.log4j".
> If the classes under the core package should not be used then it
> should not be exported.
> Perhaps then the Automatic-Module-Name needs to be
> "org.apache.logging.log4j.api".
> 
> But this is just the automatic module name that log4j has set. What is
> actually exported is also wrong. The Export-Package in JAR MANIFEST.MF
> exports not the API, but the implementation.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
> For additional commands, e-mail: log4j-user-h...@logging.apache.org
> 
> 

Reply via email to