Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.10.0
-
None
-
Windows, or any operating system with a file separator character other than a forward slash
Description
In 3.10.0, a new feature to generate package-info classes was added in [MCOMPILER-205]
Unfortunately, the binary class file is incorrectly generated using Java's file toString() which uses a platform dependent file separator character: on Windows, these Strings contain a backslash. See this line which passes the platform-dependent file name (minus the root path and .java extension) to the ClassWriter.
The Java class file specification (4.2.1) specifies the internal format: "In this internal form, the ASCII periods (.) that normally separate the identifiers which make up the binary name are replaced by ASCII forward slashes ."
This invalid class file format causes problems in downstream plugins, e.g.,
- The bnd-maven-plugin fails with an error: Classes found in the wrong directory: {oshi/jna/platform/unix/package-info.class=oshi\jna\platform\unix\package-info ... (and hundreds more) ... }
- The JDK's classFileParser will throw java.lang.NoClassDefFoundError: com\puppycrawl\tools\checkstyle\ant\package-info (wrong name: com/puppycrawl/tools/checkstyle/ant/package-info
Steps to reproduce:
- Perform a build on any Windows machine using maven-compiler-plugin 3.10.0
- Inspect any of the generated package-info.class files in target/classes using a text editor
Expected behavior:
Internal strings representing package names use forward slashes
Observed behavior:
Internal strings representing package names use backward slashes
Attachments
Issue Links
- is caused by
-
MCOMPILER-205 incremental compilation broken for package-info classes
- Closed
- links to