On Thu, 8 Oct 2026 12:21:23 GMT, Jaikiran Pai <[email protected]> wrote:
> Can I please get a review of this change which proposes to address the issue > noted in https://bugs.openjdk.org/browse/JDK-8393884? > > When `java` is launched using `java -jar <jarfile>`, the native C code in the > launcher, parses the manifest of the JAR file to detect the presence of any > `SplashScreen-Image` manifest attribute. If the manifest file is missing in > the JAR file, then it throws an error and exits the launcher. > https://bugs.openjdk.org/browse/JDK-8392966 recently introduced a test which > verifies the error message text in the absence of a manifest file in the JAR. > > When the `java.awt.headless` system property is set to `true`, then the > launcher code skips the code meant to lookup the manifest file from the JAR > and parse the `SplashScreen-Image` manifest attribute. Instead, at a later > point in the code path, the Java side of the launcher tries to lookup the > manifest file. This Java code throws a different error message when the > manifest is missing from the JAR file. As a result, the newly introduced test > now fails due to the unexpected error message. > > The change in this PR now updates the other error message to match the one we > had introduced in JDK-8392966. As a result, even when the `java.awt.headless` > system property is set to `true`, the error message will now be the same as > the one when that property isn't set. The test now passes with this change. > > tier testing is currently in progress in our CI. > > > --------- > - [x] I confirm that I make this contribution in accordance with the [OpenJDK > Interim AI Policy](https://openjdk.org/legal/ai). I just realized that @run junit/othervm -Djava.awt.headless=true only affects the JVM running the test itself not the started subprocesses. AFAIK ProcessTools.executeTestJava forwards test.vm.opts and test.java.opts, which are taken from jtregs -vmoptions:/-javaoptions: flags, but not from the extra options in @run. Therefore the subprocess launched by executeTestJava will not receive -Djava.awt.headless=true and the headless code path in the native launcher is never exercised I would propose to do two subprocess launches in testExecutableJARNoManifest. One with -Djava.awt.headless=true and one with -Djava.awt.headless=false ------------- PR Comment: https://git.openjdk.org/jdk/pull/33268#issuecomment-6067007281
