Build with Gradle in two modules, and free core of JavaFX

Etappen 1 and 2 of the Compose migration (43 commits).

The Maven build, the single source tree and the JPMS module-info went together.
core now holds the domain and app-desktop the user interface, both built by
Gradle, packaged through jpackage from Gradle, with SpotBugs and PMD wired in.
JavaFX moves to the classpath, which is why the launcher is Main and not the
Application subclass. The PR check, the nightly artifacts, the release and the
AUR packages all build from Gradle; the macOS DMG points at its output.
Verified on Linux, macOS and Windows.

core then loses JavaFX entirely. It observes through kst4contest.observe --
ObservableValue, ObservableRoster, and UiDispatcher as the one boundary a
worker thread crosses to touch the interface. The controller collections become
rosters and the visible station list a pure derivation rather than a
FilteredList/SortedList chain, which is also what fixed two focus defects only
a load test had exposed: the keyboard focus stays where the operator put it,
and the send field keeps it after a row click.

The rule that outlives this commit: ObservableRoster is the store and the list
a view is bound to is a mirror of it, never the other way round.
This commit is contained in:
Rsclub2_2 committed 2026-10-05 22:31:56 +02:00
1 parent bcbeadae95
commit a6fba12f01
360 files changed
+6304 -2422

No files matched your search

+5 -7
View File
@@ -57,26 +57,24 @@ Changes to operating behaviour should be documented together with their purpose
## Building from source
Building KST4Contest requires JDK 21. The Maven Wrapper included in the repository should be used, so a separate Maven installation is not required.
Building KST4Contest requires JDK 21. The Gradle Wrapper included in the repository should be used, so a separate Gradle installation is not required.
Linux and macOS:
```bash
./mvnw clean test
./mvnw -B -DskipTests compile
./gradlew clean build
```
Windows:
```powershell
mvnw.cmd clean test
mvnw.cmd -B -DskipTests compile
.\gradlew.bat clean build
```
## Repository structure
- `src/main/java/` – application source code
- `src/test/` – automated tests
- `core/` – domain, controller and network code, free of user-interface technology
- `app-desktop/` – the JavaFX user interface and the packaging tasks
- `github_docs/` – German and English manual sources
- `website/` – project website sources
- `packaging/` – platform-specific packaging files