RFR: 8333664: Decouple command line parsing and package building in jpackage

Alexey Semenyuk asemenyuk at openjdk.org
Fri May 9 11:44:55 UTC 2025


On Wed, 12 Jun 2024 01:37:19 GMT, Alexey Semenyuk <asemenyuk at openjdk.org> wrote:

> Refactor jpackage to separate the configuration and execution phases.
> At the configuration phase, jpackage parses command-line arguments and validates them.
> At the execution phase, jpackage builds a bundle based on data collected at the configuration phase.
> 
> There was no clear separation between these phases. Both used the same data type (`Map<String, Object>`), making it hard to understand and use properly.
> 
> This change introduces data model to jpackage (classes in "jdk.jpackage.internal.model" package). The output of the configuration phase is either an instance of [jdk.jpackage.internal.model.Application](https://github.com/openjdk/jdk/pull/19668/files#diff-e4e7717f1978a09ac4806eded5c7f94aa29b2ea56671545dc053cb83eba86919) interface for app image bundling or [jdk.jpackage.internal.model.Package](https://github.com/openjdk/jdk/pull/19668/files#diff-9908b5648e03bd8a8104f6f6f5aa08e5df78fbc0508823774d3458b22927b721) for native package bundling.
> 
> The execution phase has been reworked to get configuration properties from the new `jdk.jpackage.internal.model.Application` and `jdk.jpackage.internal.model.Package` interfaces instead of extracting data from `Map<String, Object>` "params".
> 
> Additionally, a notion of "packaging pipeline" (jdk.jpackage.internal.PackagingPipeline class) was added to configure packaging declaratively with more code sharing between bundlers.
> 
> **Functional changes**
> jpackage behavior 99% remains the same, i.e., it produces the same bundles for the given parameters. This change affects only the implementation. Still, there are some changes in jpackage behavior. They are outlined below.
> 
>  - Minimize copying of the source app image when doing native packaging.
> 
> Before this change, native package bundlers made redundant copies of the source app image. E.g., msi and linux package bundlers copied the external app image (the one specified with `--app-image` parameter); linux package bundlers always transformed the source app image if the installation directory was in the "/usr" tree (`--install-dir /usr`). This change eliminates all redundant app image copy/transformations.
> 
> - PKG bundler: change "preinstall" and "postinstall" scripts in app bundles.
> 
> post- and pre- install PKG scripts for SimplePackageTest package before and after the change:
> <table>
> <thead>
> <tr>
> <th>Script</th>
> <th>New</th>
> <th>Old</th>
> </tr>
> </thead>
> <tbody>
> <tr>
> <td nowrap>preinstall</td>
> <td>
> <pre>
> #!/usr/bin/env sh<br>
> if [ ! -d "/Applications/SimplePackageTest.app" ]
> the...

keep the PR open

keep it open

@sashamatveev PTAL

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

PR Comment: https://git.openjdk.org/jdk/pull/19668#issuecomment-2307257730
PR Comment: https://git.openjdk.org/jdk/pull/19668#issuecomment-2563789218
PR Comment: https://git.openjdk.org/jdk/pull/19668#issuecomment-2866228697


More information about the core-libs-dev mailing list