the tracing agent, and a real reflection-collision trap Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01EQNA6DJ9VgCtW6zhCE8Xud
47 lines
3.0 KiB
Markdown
47 lines
3.0 KiB
Markdown
# 01 — Versions and setup
|
|
|
|
[Back to README →](../README.md) | [Next: 02 — building the image →](02-building-the-image.md)
|
|
|
|
## The version this project's own earlier post got wrong
|
|
|
|
The previous version of the linked post assumed Spring Boot 3.x, JDK 17, and "GraalVM 22.3" --
|
|
installed the old way, via `sdk install java 22.3.r17-grl` followed by a separate
|
|
`gu install native-image` step.
|
|
|
|
Checked directly rather than assumed:
|
|
|
|
- **GraalVM ships `native-image` bundled by default now.** Downloading GraalVM Community Edition
|
|
for JDK 25 (build 25.0.2, verified by downloading it from
|
|
`github.com/graalvm/graalvm-ce-builds/releases/download/jdk-25.0.2/...` and running
|
|
`native-image --version`) and checking `$JAVA_HOME/bin/` shows `native-image`,
|
|
`native-image-configure`, and `jnativescan` already present. The `gu install native-image` step
|
|
the old post described was retired years ago; running it against a current GraalVM distribution
|
|
fails because the `gu` tool itself was removed.
|
|
- **The current official docs' local-build command is `mvn -Pnative native:compile`**, not
|
|
`./mvnw clean package -Pnative` (what the old post used). Chapter 02 shows exactly why that
|
|
distinction matters -- `package` alone silently does not invoke the GraalVM compiler at all in
|
|
this verified setup.
|
|
- **`spring-boot-starter-parent:4.1.1` already wires up `native-maven-plugin` with zero extra
|
|
configuration.** The old post's manual `<profile>` block, hardcoded `<native-buildtools.version>`
|
|
property, and explicit `<mainClass>` are all unnecessary now -- this project's
|
|
[pom.xml](../pom.xml) needs only a bare `<profile><id>native</id>` with the plugin declared and
|
|
no version, and `mvn help:effective-pom -Pnative` confirms Maven resolves it to version 1.1.8,
|
|
which is what `spring-boot-starter-parent` pins via its own dependency management (1.1.14 is the
|
|
newest release on Maven Central as of this writing, per `native-maven-plugin`'s
|
|
`maven-metadata.xml`, but the parent's pinned version is what actually runs unless you override
|
|
it).
|
|
|
|
## What this project pins, and why
|
|
|
|
| | Version | Checked how |
|
|
|---|---|---|
|
|
| Spring Boot | 4.1.1 | Matches the rest of this repository's other chapters |
|
|
| JDK for JVM runs | Temurin 25.0.4.1 | `java -version` |
|
|
| GraalVM for native builds | Community Edition for JDK 25, build 25.0.2+10.1 | Downloaded directly, `native-image --version` |
|
|
| `native-maven-plugin` | 1.1.8 | `mvn help:effective-pom -Pnative`; Maven Central's `maven-metadata.xml` lists 1.1.14 as newest, confirming 1.1.8 is a deliberate, slightly older pin from Spring Boot's own dependency management, not the newest available |
|
|
|
|
A plain JDK (Temurin, in `$JDK25_HOME`) is enough for every JVM-mode measurement in this project.
|
|
Only the native-image build itself needs the separate GraalVM distribution in `$GRAALVM_HOME`
|
|
(see [scripts/run-all.sh](../scripts/run-all.sh)) -- and switching `JAVA_HOME` back and forth
|
|
between the two is the only genuinely fiddly part of the whole setup.
|