---
name: johannesrabauer/javafx-testing-packaging-distribution
source: https://app.decimal.ai/s/johannesrabauer-javafx-testing-packaging-distribution@1/SKILL.md
source_sha256: 60dc12fae17a
---

# JavaFX Testing, Packaging, and Distribution

Use this skill when the requirement spans UI automation, installer creation, runtime-image setup, or
choosing how the app should be delivered to desktop, browser, mobile, or embedded targets.

## Example

```java
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import org.junit.jupiter.api.Test;
import org.testfx.framework.junit5.ApplicationTest;

import static org.testfx.api.FxAssert.verifyThat;
import static org.testfx.matcher.control.LabeledMatchers.hasText;

public class HelloViewTest extends ApplicationTest {

    @Override
    public void start(javafx.stage.Stage stage) {
        stage.setScene(new javafx.scene.Scene(new StackPane(new Button("Hello")), 240, 120));
        stage.show();
    }

    @Test
    void showsHelloButton() {
        verifyThat(".button", hasText("Hello"));
    }
}
```

## Setup notes

- Use TestFX for scene-graph automation and assertion libraries for control state and binding checks.
- Build runtime images with `jlink` and installers with `jpackage` once the module graph is stable.
- Treat auto-update tools such as Update4j or FXLauncher as deployment architecture, not a late add-on.
- Keep browser, mobile, and embedded targets as explicit product decisions because packaging and
  capability constraints differ materially.

## Gotchas

- UI tests become flaky when dialogs, background work, and animations are not synchronized.
- Packaging must account for optional modules such as media or web support.
- Distribution workflows should be repeatable in CI rather than dependent on manual local steps.