This PR makes the `java.desktop` requirement static for `javafx.base` and 
`javafx.graphics`.
With this changes, a JavaFX app without `Swing` and the `WebView` will be much 
smaller (results below).

Consequences:
- `java.desktop` need to be loaded (required) when using anything from the 
`javafx.beans.property.adapter` package (the property classes from 
`java.beans.XXX` are used here)
- `java.desktop` need to be loaded (required) when using printing, that is e.g. 
`PrinterJob.createPrinterJob().showPrintDialog(..)`

Results:
- Removing `java.desktop` gives a huge size boost! I benchmarked the following 
values when using `jlink` with: [`zip-6`, `--no-man-pages`, 
`--no-header-files`, `--strip-debug`, `--strip-java-debug-attributes`] to build 
an own runtime

Tried on a real application (here called `myapp`) with JDK-25 on Windows 11 
that has dependencies to: [`javafx-base`,  `javafx-graphics`, `javafx-fxml`, 
`javafx-controls`]

---

`master`

`70.009.288 Bytes`


myapp
java.base@25
java.datatransfer@25
java.desktop@25
java.prefs@25
java.scripting@25
java.xml@25
javafx.base@26-internal
javafx.controls@26-internal
javafx.fxml@26-internal
javafx.graphics@26-internal
jdk.localedata@25
jdk.unsupported@25


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

`This PR`

`57.266.538 Bytes`


myapp
java.base@25
java.scripting@25
java.xml@25
javafx.base@26-internal
javafx.controls@26-internal
javafx.fxml@26-internal
javafx.graphics@26-internal
jdk.localedata@25
jdk.unsupported@25


---

`This PR` + https://github.com/openjdk/jfx/pull/1957

`57.249.459 Bytes`


myapp
java.base@25
java.scripting@25
java.xml@25
javafx.base@26-internal
javafx.controls@26-internal
javafx.fxml@26-internal
javafx.graphics@26-internal
jdk.localedata@25


---

So we save around 13MB. If building a native package, e.g. an `.msi` installer, 
this will be even higher.

This change however probably need some discussion, if we want to go that 
direction + add a note in the release notes, that if one of the two things 
mentioned above are needed, an requirement to `java.desktop` is needed (in case 
of a modular project).

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

Commit messages:
 - 8240844: Remove dependency on java.desktop from javafx.base

Changes: https://git.openjdk.org/jfx/pull/1958/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1958&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8240844
  Stats: 6 lines in 2 files changed: 2 ins; 1 del; 3 mod
  Patch: https://git.openjdk.org/jfx/pull/1958.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1958/head:pull/1958

PR: https://git.openjdk.org/jfx/pull/1958

Reply via email to