Daniel Widdis created MCOMPILER-485:
---------------------------------------
Summary: Incorrect internal string format in generated
package-info.class files on Windows
Key: MCOMPILER-485
URL: https://issues.apache.org/jira/browse/MCOMPILER-485
Project: Maven Compiler Plugin
Issue Type: Bug
Affects Versions: 3.10.0
Environment: Windows, or any operating system with a file separator
character other than a forward slash
Reporter: Daniel Widdis
In 3.10.0, a new feature to generate package-info classes was added in
[[MCOMPILER-205] |https://github.com/apache/maven-compiler-plugin/pull/88]
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|https://github.com/gnodet/maven-compiler-plugin/blob/8521ef8fdd12cc0b85c1ace17114ed3d3ffd0b0c/src/main/java/org/apache/maven/plugin/compiler/AbstractCompilerMojo.java#L1356]
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) ... }
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
--
This message was sent by Atlassian Jira
(v8.20.1#820001)