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

Reply via email to