The Java language allows you to hide class identifiers using package identifiers. In your case, the class com.xx.a obscured by the package com.xx.a
From the Java language specification :
6.3.2 Shaded announcements
A simple name can occur in contexts where it can potentially be interpreted as the name of a variable, type, or package . In these situations, the rules of section 6.5 indicate that the variable will be selected in the preference for the type and that the type will be selected in the package preference. Thus, it can sometimes be impossible to refer to the visible type or declaration of a package through its simple name. We say that such an announcement is obscured.
I must say that the rules in section 6.5 for classifying the value of an identifier are far from clear.
The reason you still have a copy of the library that violates this rule is because the rule does not apply to class files / JAR files and JVMs.
This means that you can have such name conflicts in JAR files, but you will never see it as output from javac . The tool that created these class / package names is most likely an obfuscator to code that creates such dirty code to compress file sizes and obfuscate code to prevent reverse engineering.
PS. On closer inspection, this may be a mistake on the Eclipse side (assuming you are talking about the IDE). By allowing empty package names to come across a class name, Eclipse is choking on something that javac accepts. Speculation is hard to accomplish, but from what I see, javac follows the specification in this case.
source share