[ https://issues.apache.org/jira/browse/MCOMPILER-485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17575191#comment-17575191 ]
Alexander Kriegisch commented on MCOMPILER-485: ----------------------------------------------- Before messaging here, I did of yourse notice [~gnodet]'s [statement in the PR for MCOMIPLER-205|https://github.com/apache/maven-compiler-plugin/pull/88#issue-1124280483]: {quote}This PR provides an option (turned on by default) to generate class files for missing {{package-info}} classes. This happens when the {{package-info.java}} source file only contains a javadoc and no annotations on the package. This can be turned on some JDK using {{-Xpkginfo:always}}, but that may not work on all JDKs.{quote} Therefore, of course I understand the idea to generate the class files manually, but as we have painfully experienced, it is a possible source of errors. Now, it seems to be fixed, but anyway, I believe that each compiler which can be uses with Maven Compiler Plugin has one or another way to enforce package info class file creation. Javac has {{-Xpkginfo}}, ECJ seems to always create those files anyway (thus probably also ECJ forks like GrEclipse and AspectJ). I do not know which other compiler back-ends MCompiler / Plexus supports, but hopefully onf of you committers can say morwe about that. > 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 > Assignee: Olivier Lamy > Priority: Major > Fix For: 3.10.1 > > > 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) ... } > * The JDK's > [classFileParser|https://github.com/openjdk/jdk17/blob/74007890bb9a3fa3a65683a3f480e399f2b1a0b6/src/hotspot/share/classfile/classFileParser.cpp#L5797] > 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 > -- This message was sent by Atlassian Jira (v8.20.10#820010)