JDK-8265826 : [macos] javac generates a duplicate class error if a module-info.java file is present
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 11
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: os_x
  • CPU: x86_64
  • Submitted: 2021-04-17
  • Updated: 2024-12-03
  • Resolved: 2021-06-04
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 17
17Resolved
Related Reports
Duplicate :  
Description
ADDITIONAL SYSTEM INFORMATION :
openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment Corretto-11.0.10.9.1 (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.10.9.1 (build 11.0.10+9-LTS, mixed mode)

MacOS 10.15.7

A DESCRIPTION OF THE PROBLEM :
I am one of the maintainers of Apache Log4j 2. I am trying to convert it to fully support JPMS modules. However, when I simply add a module-info.java in the source I am getting duplicate class errors. The error message is showing one of the packages with an upper case first letter when, in fact, all the package names and directories are lower case such as:
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/TimeFilter.java:46: error: duplicate class: org.apache.logging.log4j.core.filter.TimeFilter
Notice that the "Filter" package is shown in upper case. The actually directory on my MacBook is in lower case.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
git clone https://github.com/apache/logging-log4j2.git
git checkout module-compile-fails
mvn clean install
This will fail in log4j-core with the above messages as well as an error in Activator.java I am also investigating.
cd to log4j-core
run mvn -X clean install
After it fails copy the command portion and past it into a file. precede the command with javac and then save the file. Run the file as a script from the command line and you will see the errors related to just javac. 
Move module-info.java out of src/main/java and run mvn clean install and everything will compile correctly.
Changing to java 12 and newer and most of these errors go away but I am still left with these 3 errors.
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/package-info.java:24: warning: a package-info.java file has already been seen for package org.apache.logging.log4j.core.filter
package org.apache.logging.log4j.core.filter;
                                     ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/package-info.java:20: warning: a package-info.java file has already been seen for package org.apache.logging.log4j.core.appender
package org.apache.logging.log4j.core.appender;
                                     ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/package-info.java:24: warning: a package-info.java file has already been seen for package org.apache.logging.log4j.core.layout
package org.apache.logging.log4j.core.layout;
Again, it is showing directories with capital letters that don't exist.

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The compile should succeed even if a module-info.java file is present
ACTUAL -
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/package-info.java:24: warning: a package-info.java file has already been seen for package org.apache.logging.log4j.core.filter
package org.apache.logging.log4j.core.filter;
                                     ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/package-info.java:20: warning: a package-info.java file has already been seen for package org.apache.logging.log4j.core.appender
package org.apache.logging.log4j.core.appender;
                                     ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/package-info.java:24: warning: a package-info.java file has already been seen for package org.apache.logging.log4j.core.layout
package org.apache.logging.log4j.core.layout;
                                     ^
Note: Processing Log4j annotations
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/StructuredDataFilter.java:46: error: duplicate class: org.apache.logging.log4j.core.filter.StructuredDataFilter
public final class StructuredDataFilter extends MapFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/ThresholdFilter.java:41: error: duplicate class: org.apache.logging.log4j.core.filter.ThresholdFilter
public final class ThresholdFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/MarkerFilter.java:37: error: duplicate class: org.apache.logging.log4j.core.filter.MarkerFilter
public final class MarkerFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/DenyAllFilter.java:36: error: duplicate class: org.apache.logging.log4j.core.filter.DenyAllFilter
public final class DenyAllFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/LevelRangeFilter.java:43: error: duplicate class: org.apache.logging.log4j.core.filter.LevelRangeFilter
public final class LevelRangeFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/AbstractFilterable.java:33: error: duplicate class: org.apache.logging.log4j.core.filter.AbstractFilterable
public abstract class AbstractFilterable extends AbstractLifeCycle implements Filterable {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/AbstractFilter.java:39: error: duplicate class: org.apache.logging.log4j.core.filter.AbstractFilter
public abstract class AbstractFilter extends AbstractLifeCycle implements Filter {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/BurstFilter.java:57: error: duplicate class: org.apache.logging.log4j.core.filter.BurstFilter
public final class BurstFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/ThreadContextMapFilter.java:50: error: duplicate class: org.apache.logging.log4j.core.filter.ThreadContextMapFilter
public class ThreadContextMapFilter extends MapFilter {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/NeutralFilter.java:29: error: duplicate class: org.apache.logging.log4j.core.filter.NeutralFilter
public class NeutralFilter extends AbstractFilter {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/CompositeFilter.java:46: error: duplicate class: org.apache.logging.log4j.core.filter.CompositeFilter
public final class CompositeFilter extends AbstractLifeCycle implements Iterable<Filter>, Filter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/TimeFilter.java:46: error: duplicate class: org.apache.logging.log4j.core.filter.TimeFilter
public final class TimeFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/DynamicThresholdFilter.java:48: error: duplicate class: org.apache.logging.log4j.core.filter.DynamicThresholdFilter
public final class DynamicThresholdFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/StringMatchFilter.java:37: error: duplicate class: org.apache.logging.log4j.core.filter.StringMatchFilter
public final class StringMatchFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/LevelMatchFilter.java:37: error: duplicate class: org.apache.logging.log4j.core.filter.LevelMatchFilter
public final class LevelMatchFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/Filterable.java:30: error: duplicate class: org.apache.logging.log4j.core.filter.Filterable
public interface Filterable extends LifeCycle {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/MapFilter.java:50: error: duplicate class: org.apache.logging.log4j.core.filter.MapFilter
public class MapFilter extends AbstractFilter {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/ScriptFilter.java:44: error: duplicate class: org.apache.logging.log4j.core.filter.ScriptFilter
public final class ScriptFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/RegexFilter.java:45: error: duplicate class: org.apache.logging.log4j.core.filter.RegexFilter
public final class RegexFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter/NoMarkerFilter.java:35: error: duplicate class: org.apache.logging.log4j.core.filter.NoMarkerFilter
public final class NoMarkerFilter extends AbstractFilter {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/CountingNoOpAppender.java:35: error: duplicate class: org.apache.logging.log4j.core.appender.CountingNoOpAppender
public class CountingNoOpAppender extends AbstractAppender  {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/HttpAppender.java:43: error: duplicate class: org.apache.logging.log4j.core.appender.HttpAppender
public final class HttpAppender extends AbstractAppender {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/RandomAccessFileManager.java:39: error: duplicate class: org.apache.logging.log4j.core.appender.RandomAccessFileManager
public class RandomAccessFileManager extends OutputStreamManager {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/SocketAppender.java:50: error: duplicate class: org.apache.logging.log4j.core.appender.SocketAppender
public class SocketAppender extends AbstractOutputStreamAppender<AbstractSocketManager> {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/RollingFileAppender.java:47: error: duplicate class: org.apache.logging.log4j.core.appender.RollingFileAppender
public final class RollingFileAppender extends AbstractOutputStreamAppender<RollingFileManager> {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/FailoverAppender.java:48: error: duplicate class: org.apache.logging.log4j.core.appender.FailoverAppender
public final class FailoverAppender extends AbstractAppender {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/FileManager.java:52: error: duplicate class: org.apache.logging.log4j.core.appender.FileManager
public class FileManager extends OutputStreamManager {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/TlsSyslogFrame.java:28: error: duplicate class: org.apache.logging.log4j.core.appender.TlsSyslogFrame
public class TlsSyslogFrame {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AppenderLoggingException.java:33: error: duplicate class: org.apache.logging.log4j.core.appender.AppenderLoggingException
public class AppenderLoggingException extends LoggingException {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AbstractWriterAppender.java:35: error: duplicate class: org.apache.logging.log4j.core.appender.AbstractWriterAppender
public abstract class AbstractWriterAppender<M extends WriterManager> extends AbstractAppender {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/SyslogAppender.java:46: error: duplicate class: org.apache.logging.log4j.core.appender.SyslogAppender
public class SyslogAppender extends SocketAppender {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/RandomAccessFileAppender.java:38: error: duplicate class: org.apache.logging.log4j.core.appender.RandomAccessFileAppender
public final class RandomAccessFileAppender extends AbstractOutputStreamAppender<RandomAccessFileManager> {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AsyncAppender.java:61: error: duplicate class: org.apache.logging.log4j.core.appender.AsyncAppender
public final class AsyncAppender extends AbstractAppender {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/MemoryMappedFileManager.java:60: error: duplicate class: org.apache.logging.log4j.core.appender.MemoryMappedFileManager
public class MemoryMappedFileManager extends OutputStreamManager {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/FileAppender.java:39: error: duplicate class: org.apache.logging.log4j.core.appender.FileAppender
public final class FileAppender extends AbstractOutputStreamAppender<FileManager> {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/DefaultErrorHandler.java:30: error: duplicate class: org.apache.logging.log4j.core.appender.DefaultErrorHandler
public class DefaultErrorHandler implements ErrorHandler {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/MemoryMappedFileAppender.java:42: error: duplicate class: org.apache.logging.log4j.core.appender.MemoryMappedFileAppender
public final class MemoryMappedFileAppender extends AbstractOutputStreamAppender<MemoryMappedFileManager> {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AbstractAppender.java:42: error: duplicate class: org.apache.logging.log4j.core.appender.AbstractAppender
public abstract class AbstractAppender extends AbstractFilterable implements Appender {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/HttpURLConnectionManager.java:40: error: duplicate class: org.apache.logging.log4j.core.appender.HttpURLConnectionManager
public class HttpURLConnectionManager extends HttpManager {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/ScriptAppenderSelector.java:40: error: duplicate class: org.apache.logging.log4j.core.appender.ScriptAppenderSelector
public class ScriptAppenderSelector extends AbstractAppender {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AppenderSet.java:38: error: duplicate class: org.apache.logging.log4j.core.appender.AppenderSet
public class AppenderSet {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/ManagerFactory.java:24: error: duplicate class: org.apache.logging.log4j.core.appender.ManagerFactory
public interface ManagerFactory<M, T> {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AsyncAppenderEventDispatcher.java:31: error: duplicate class: org.apache.logging.log4j.core.appender.AsyncAppenderEventDispatcher
class AsyncAppenderEventDispatcher extends Log4jThread {
^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AbstractOutputStreamAppender.java:34: error: duplicate class: org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender
public abstract class AbstractOutputStreamAppender<M extends OutputStreamManager> extends AbstractAppender {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/RollingRandomAccessFileAppender.java:47: error: duplicate class: org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender
public final class RollingRandomAccessFileAppender extends AbstractOutputStreamAppender<RollingRandomAccessFileManager> {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/ConfigurationFactoryData.java:25: error: duplicate class: org.apache.logging.log4j.core.appender.ConfigurationFactoryData
public class ConfigurationFactoryData {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/FailoversPlugin.java:31: error: duplicate class: org.apache.logging.log4j.core.appender.FailoversPlugin
public final class FailoversPlugin {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/OutputStreamManager.java:38: error: duplicate class: org.apache.logging.log4j.core.appender.OutputStreamManager
public class OutputStreamManager extends AbstractManager implements ByteBufferDestination {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AbstractFileAppender.java:34: error: duplicate class: org.apache.logging.log4j.core.appender.AbstractFileAppender
public abstract class AbstractFileAppender<M extends OutputStreamManager> extends AbstractOutputStreamAppender<M> {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/ConsoleAppender.java:56: error: duplicate class: org.apache.logging.log4j.core.appender.ConsoleAppender
public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputStreamManager> {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/HttpManager.java:27: error: duplicate class: org.apache.logging.log4j.core.appender.HttpManager
public abstract class HttpManager extends AbstractManager {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/WriterAppender.java:35: error: duplicate class: org.apache.logging.log4j.core.appender.WriterAppender
public final class WriterAppender extends AbstractWriterAppender<WriterManager> {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/WriterManager.java:29: error: duplicate class: org.apache.logging.log4j.core.appender.WriterManager
public class WriterManager extends AbstractManager {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/OutputStreamAppender.java:40: error: duplicate class: org.apache.logging.log4j.core.appender.OutputStreamAppender
public final class OutputStreamAppender extends AbstractOutputStreamAppender<OutputStreamManager> {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/NullAppender.java:32: error: duplicate class: org.apache.logging.log4j.core.appender.NullAppender
public class NullAppender extends AbstractAppender {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender/AbstractManager.java:42: error: duplicate class: org.apache.logging.log4j.core.appender.AbstractManager
public abstract class AbstractManager implements AutoCloseable {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/HtmlLayout.java:51: error: duplicate class: org.apache.logging.log4j.core.layout.HtmlLayout
public final class HtmlLayout extends AbstractStringLayout {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/ByteBufferDestination.java:31: error: duplicate class: org.apache.logging.log4j.core.layout.ByteBufferDestination
public interface ByteBufferDestination {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/AbstractStringLayout.java:48: error: duplicate class: org.apache.logging.log4j.core.layout.AbstractStringLayout
public abstract class AbstractStringLayout extends AbstractLayout<String> implements StringLayout {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/Encoder.java:26: error: duplicate class: org.apache.logging.log4j.core.layout.Encoder
public interface Encoder<T> {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/LoggerFields.java:35: error: duplicate class: org.apache.logging.log4j.core.layout.LoggerFields
public final class LoggerFields {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/StringBuilderEncoder.java:32: error: duplicate class: org.apache.logging.log4j.core.layout.StringBuilderEncoder
public class StringBuilderEncoder implements Encoder<StringBuilder> {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/ScriptPatternSelector.java:45: error: duplicate class: org.apache.logging.log4j.core.layout.ScriptPatternSelector
public class ScriptPatternSelector implements PatternSelector {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/Rfc5424Layout.java:71: error: duplicate class: org.apache.logging.log4j.core.layout.Rfc5424Layout
public final class Rfc5424Layout extends AbstractStringLayout {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/LockingStringBuilderEncoder.java:31: error: duplicate class: org.apache.logging.log4j.core.layout.LockingStringBuilderEncoder
public class LockingStringBuilderEncoder implements Encoder<StringBuilder> {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/MarkerPatternSelector.java:41: error: duplicate class: org.apache.logging.log4j.core.layout.MarkerPatternSelector
public class MarkerPatternSelector implements PatternSelector {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/TextEncoderHelper.java:31: error: duplicate class: org.apache.logging.log4j.core.layout.TextEncoderHelper
public class TextEncoderHelper {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/SyslogLayout.java:44: error: duplicate class: org.apache.logging.log4j.core.layout.SyslogLayout
public final class SyslogLayout extends AbstractStringLayout {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/PatternMatch.java:34: error: duplicate class: org.apache.logging.log4j.core.layout.PatternMatch
public final class PatternMatch {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/MessageLayout.java:36: error: duplicate class: org.apache.logging.log4j.core.layout.MessageLayout
public class MessageLayout extends AbstractLayout<Message> {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/LevelPatternSelector.java:41: error: duplicate class: org.apache.logging.log4j.core.layout.LevelPatternSelector
public class LevelPatternSelector implements PatternSelector{
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/PatternSelector.java:25: error: duplicate class: org.apache.logging.log4j.core.layout.PatternSelector
public interface PatternSelector {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/PatternLayout.java:57: error: duplicate class: org.apache.logging.log4j.core.layout.PatternLayout
public final class PatternLayout extends AbstractStringLayout {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/AbstractLayout.java:37: error: duplicate class: org.apache.logging.log4j.core.layout.AbstractLayout
public abstract class AbstractLayout<T extends Serializable> implements Layout<T> {
                ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/ByteBufferDestinationHelper.java:26: error: duplicate class: org.apache.logging.log4j.core.layout.ByteBufferDestinationHelper
public final class ByteBufferDestinationHelper {
             ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout/GelfLayout.java:69: error: duplicate class: org.apache.logging.log4j.core.layout.GelfLayout
public final class GelfLayout extends AbstractStringLayout {
             ^
warning: A file for type 'org.apache.logging.log4j.core.plugins.Log4jPlugins' already exists on the sourcepath or classpath
Note: Annotations processed
warning: No processor claimed any of these annotations: java.base/java.lang.Deprecated,java.base/java.lang.SafeVarargs,org.apache.logging.log4j.core/org.apache.logging.log4j.core.config.Order,java.base/java.lang.annotation.Documented,java.base/java.lang.annotation.Retention,org.apache.logging.log4j.core/org.apache.logging.log4j.core.tools.picocli.CommandLine.Option,org.apache.logging.log4j.core/org.apache.logging.log4j.core.pattern.ConverterKeys,java.base/java.lang.annotation.Target,org.apache.logging.log4j/org.apache.logging.log4j.util.PerformanceSensitive,org.apache.logging.log4j.core/org.apache.logging.log4j.core.config.Scheduled,java.base/java.lang.Override,java.base/java.lang.SuppressWarnings
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java:33: error: interface Filter clashes with package of same name
public interface Filter extends LifeCycle {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender.java:37: error: interface Appender clashes with package of same name
public interface Appender extends LifeCycle {
       ^
/Users/rgoers/projects/apache/logging/log4j/logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout.java:47: error: interface Layout clashes with package of same name
public interface Layout<T extends Serializable> extends Encoder<LogEvent> {
       ^
Note: Processing Log4j annotations
Note: No elements to process
79 errors
5 warnings


FREQUENCY : always



Comments
Duplicate of JDK-8263432.
04-06-2021

Additional Information from submitter: =========================== I have verified that the sample project I created now compiles correctly with openjdk version "17-ea" 2021-09-14 OpenJDK Runtime Environment (build 17-ea+24-2164) OpenJDK 64-Bit Server VM (build 17-ea+24-2164, mixed mode, sharing) Is there any chance this can be backported to Java 11? Log4j doesn't plan on upgrading to Java 17 for a few years.
04-06-2021

This is most likely fixed by JDK-8263432 - could someone please verify? Thanks!
21-05-2021

raised priority to P3 to at least investigate the problem in javac. I note this as significant: >> Because log4j has a package named org.apache.logging.log4j.core.appender and a class named org.apache.logging.log4j.core.Appender the scanner thinks there is a package with an upper case name. It also has the same problem with the Layout and Filter classes.
15-05-2021

Additional Information from submitter: ============================== I have created https://github.com/rgoers/jpms-compile-fails to more easily demonstrate the problem. I have verified that it fails on MacOS but succeeds on Linux.
28-04-2021

Additional Information from submitter: =========================== I have been debugging my annotation processor to determine what is causing this. I see that my processor calls roundEnv.getElementsAnnotatedWith(Plugin.class). I set a breakpoint in the Log class where the errors are being generated. Once one hit I looked back up the call stack and I can see that Symbol.java has a ModuleSymbol inner class that has a member named enclosing elements. This seems to contain all the package and class names. However, all the classes seem to be marked as packages. Because log4j has a package named org.apache.logging.log4j.core.appender and a class named org.apache.logging.log4j.core.Appender the scanner thinks there is a package with an upper case name. It also has the same problem with the Layout and Filter classes. Comparing org.apache.logging.log4j.core.appender to org.apache.logging.log4j.core.Appender I see no difference except wherever appender appears in the "appender" entry it is Appender in the "Appernder" entry. There is no evidence that Appender is actually a class. Not being familiar with the compiler I am making an assumption that kind "PCK" is meant to be a package since the kindName attribute is "kindname.package". I haven't yet figured out where this list is created to determine why it is confused.
27-04-2021

Reply received from the submitter ============================ I have corrected this so you can re-pull. However it occurred to me that I don’t see this error as I believe you are getting further than I am. So I started up my Linux VM and ran the build and it didn’t show the problem I am reporting. I suspect this issue is unique to MacOS.
23-04-2021

Reply received from the submitter ============================ I apparently changed the default compile configuration to include Log4j’s annotation processor and neglected to override that for log4j-api. I have committed the change for that so if you pull it and try it again you should no longer see that problem. ============================= After pulling again following compilation error was seen: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project log4j-core: Compilation failure [ERROR] C:\Users\ANDEV\logging-log4j2\log4j-core\src\main\java\module-info.java:[81,45] error: cannot find symbol [ERROR] symbol: class ThreadDumpMessage$ThreadInfoFactory [ERROR] location: package org.apache.logging.log4j.message ================================ Requested submitter to again look into the issue!
22-04-2021

I am not able to reproduce the issue. The compilation fails with a different error. Requested submitter to verify the build and the dependencies in order to reproduce the issue. ========================== I was trying to reproduce the issue with following steps: 1. git clone https://github.com/apache/logging-log4j2.git 2. git checkout module-compile-fails 3. mvn –X clean install But I was not able to reproduce the issue. There was another error which broke the compilation. [ERROR] error: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: org.apache.logging.log4j.plugins.processor.PluginProcessor Unable to get public no-arg constructor With –X option with mvn, it revealed following issue: [ERROR] 'dependencies.dependency.version' for org.apache.logging.log4j:log4j-plugins-java9:zip is missing. @ line 42, column 17 I have attached the log. If any other steps is required please revert.
21-04-2021