On Wed, 29 Oct 2025 01:32:50 GMT, Alexander Matveev <[email protected]> 
wrote:

> - Added JDK specific keys/values to Info.plist of embedded runtime.
> - Modified `setFakeRuntime()` not to include `bin` folder. By default it was 
> always included, but generated embedded runtime by default does not have 
> `bin` folder. As a result `CustomInfoPListTest` failed.
> - Updated  `CustomInfoPListTest` to test Info.plist with `bin` folder.

Changes requested by asemenyuk (Reviewer).

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacPackagingPipeline.java 
line 369:

> 367:                 
> Files.isDirectory(env.resolvedLayout().runtimeDirectory().resolve("bin")) ||
> 368:                 app.isRuntime();
> 369: 

The `writeRuntimeInfoPlist()` action is executed for the 
`MacBuildApplicationTaskID.RUNTIME_INFO_PLIST` and 
`MacBuildApplicationTaskID.COPY_RUNTIME_INFO_PLIST` tasks. 
`MacBuildApplicationTaskID.RUNTIME_INFO_PLIST` doesn't have dependencies. This 
means it can be executed before the runtime files are available in the output 
app image. Currently, this is not a problem because jpackage executes tasks 
synchronously, but eventually it will run them asynchronously, and the 
`Files.isDirectory(...)` test will fail.

The plist template should be selected at the configuration phase, not the 
bundling phase. However, this will require knowing/guessing if jlink will 
create native commands in the "bin" directory from its command line. It is 
straightforward if it boils down to testing whether it has the 
"--strip-native-commands" option. This is what we do when we test if jlink 
options are correct for the Apple App Store, right? [Test for 
"--strip-native-commands" in 
DeployParams.java](https://github.com/openjdk/jdk/blob/2c07214d7c075da5dd4a4e872aef29f58cef2bae/src/jdk.jpackage/share/classes/jdk/jpackage/internal/DeployParams.java#L277)

I'd suggest adding `boolean 
jdk.jpackage.internal.model.RuntimeBuilder.withNativeCommands()` method. Then  
the code will be:

final var useRuntimeInfoPlist = app.isRuntime() || 
app.runtimeBuilder().orElseThrow().withNativeCommands();


Alternatively, you may add the `BuildApplicationTaskID.RUNTIME` task as a 
dependency for the `MacBuildApplicationTaskID.RUNTIME_INFO_PLIST` task. 
However, this is a less preferable solution.

-------------

PR Review: https://git.openjdk.org/jdk/pull/28033#pullrequestreview-3393972142
PR Review Comment: https://git.openjdk.org/jdk/pull/28033#discussion_r2473538432

Reply via email to