chore: update java-parent to 1.3.0 - #43
Merged
Merged
Conversation
Three things arrive with the new parent, and each has a consequence here. **project.build.outputTimestamp is now fixed centrally** (2026-09-10T00:00:00Z, a literal in the published POM, rewritten by release.sh per release). This is what docs/TODO.md tracked as "in progress separately" and what spec 018's design listed as a prerequisite; both are updated to say it shipped. Verified rather than assumed: the reactor was built twice and the artifact checksums compared — byte-identical. **The OpenAPI stack is now BOM-managed**, so the local swagger-annotations-jakarta.version property (2.2.29) is dropped and the explicit <version> in spring-services-core removed. swagger-annotations-jakarta now resolves to 2.2.47 through the parent's swagger-bom import. This is not cosmetic: the parent warns that a split Swagger stack throws NoSuchMethodError at runtime, because swagger-core calls annotation members that only exist in its own release. Pinning our own version while the org standard moves on recreates exactly that hazard for any consumer that also pulls springdoc. **Spotless is configured with <lineEndings>UNIX</lineEndings>**, which the parent notes only takes full effect if the child carries a .gitattributes — otherwise Git checks files out per the local core.autocrlf and a Windows build produces a sources jar with CRLF, breaking reproducibility. Added one; it is diff-neutral today, since no tracked file currently contains CRLF. Verified: full reactor build green, 134 tests, no failing test class. spotless:check reports the same three pre-existing violations as on main (test files under com.example.app) — the new parent adds none, and they are left for a separate, formatting-only change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Checked all five remaining properties in the reactor POM against the parent's dependencyManagement and against their actual usage here: | Property | managed by parent | referenced here | verdict | | --- | --- | --- | --- | | jspecify.version | yes (org.jspecify:jspecify 1.0.0) | core/pom.xml | removed | | testcontainers.version | yes (testcontainers-bom import) | nowhere | removed | | slack-api-client.version | no | slack | kept | | wiremock.version | no | core, dbbackup, search | kept | | mcp-sdk.version | no | mcp (2x) | kept | testcontainers.version was not merely dead: a property of that name in this POM shadows the parent's, and the parent's BOM import resolves through it. Both sat at 2.0.5, so the effect was invisible — but the next testcontainers bump in java-parent would have been silently pinned back to the old version by a value nobody remembers maintaining. jspecify had the same shape, plus an explicit <version> in spring-services-core that is now gone as well. The remaining three stay, and the comment above them now says why: they are the versions the parent does not manage, and redefining a parent-managed property here is the trap to avoid. Verified: jspecify still resolves to 1.0.0, testcontainers to 2.0.5 (all five artifacts across core and scim), swagger-annotations-jakarta to 2.2.47. Full reactor build green, 134 tests. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
hendrikebbers
approved these changes
Sep 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
com.open-elements:java-parent1.2.1 → 1.3.0. Three things arrive with it, and each has aconsequence in this repository — this PR handles all three rather than only bumping the number.
1.
project.build.outputTimestampis now fixed centrallyThe parent sets it to the literal
2026-09-10T00:00:00Zandrelease.shrewrites it per release.Its own comment is worth repeating, because it is easy to misread: this is not a build time — it
identifies the
java-parentrelease an artifact was built against. For "when did this source statecome into being", the
Git-Commit-Timemanifest entry from thefull-buildprofile is the answer.This is what
docs/TODO.mdtracked as "in progress separately" and what spec 018's design listed asan open prerequisite. Both are updated to say it shipped, and the TODO entry now states plainly which
bullets remain (
build-info, the SBOM output path,ARG GIT_COMMITin the application Dockerfiles) —those are what spec 018 actually needs before it can read anything.
Verified, not assumed: the reactor was built twice and the artifact checksums compared.
Identical across both runs — the reproducible-build claim holds here.
2. The OpenAPI stack is BOM-managed
1.3.0 imports
springdoc-openapi-bomandswagger-bom, and pins theswagger-uiwebjar,because springdoc's BOM manages springdoc artifacts only and the Swagger versions it is built against
are not part of that contract.
This repository does not use springdoc, but it does use
io.swagger.core.v3:swagger-annotations-jakarta— pinned locally at 2.2.29 through its own property. That property and the explicit
<version>inspring-services-coreare removed, so the artifact now resolves to 2.2.47 through the parent.Not cosmetic: the parent warns that a split Swagger stack throws
NoSuchMethodErrorat runtime,because
swagger-corecalls annotation members that only exist in its own release. Keeping a localpin while the org standard moves on recreates that hazard for any consumer that also pulls springdoc.
3. Spotless now formats with
<lineEndings>UNIX</lineEndings>The parent notes that this alone does not make a child's sources jar LF-clean: Git still checks files
out per the local
core.autocrlf, so a build on a Windows default install would publish CRLF sourcesand break reproducibility. It expects each child to carry a
.gitattributes; this repository hadnone, so one is added with
* text=auto eol=lfplus binary exclusions.It is diff-neutral today — every tracked file was checked and none contains CRLF. It is protection
against a contributor on a differently configured machine, not a cleanup.
4. Version properties the parent now manages are removed
All five remaining properties in the reactor POM were checked against the parent's
dependencyManagementand against their actual usage here:jspecify.versionorg.jspecify:jspecify1.0.0)spring-services-coretestcontainers.versiontestcontainers-bomimport)slack-api-client.versionwiremock.versionmcp-sdk.versiontestcontainers.versionwas not merely dead code: a property of that name in this POM shadows theparent's, and the parent's BOM import resolves through it. Both sat at 2.0.5, so the effect was
invisible — but the next testcontainers bump in
java-parentwould have been silently pinned back tothe old version by a value nobody remembers maintaining.
jspecifyhad the same shape, plus anexplicit
<version>inspring-services-core, now gone too.The comment above the remaining three says why they stay: they are the versions the parent does not
manage, and redefining a parent-managed property here is the trap to avoid.
Resolution after the change is unchanged —
jspecify:1.0.0, all fiveorg.testcontainersartifactsat
2.0.5,swagger-annotations-jakarta:2.2.47.Verification
project.build.outputTimestampresolves to2026-09-10T00:00:00Zin a child module; parent versionresolves to
1.3.0.spring-boot.versionat 3.5.14, so Spring Security stays6.5.10 and nothing in the security code is affected.
One pre-existing issue this PR deliberately does not fix
mvn spotless:checkfails — onmainas well as on this branch, with the identical three files(
src/test/java/com/example/app/Order.java,StarterAutoConfigurationIntegrationTest.java,StarterTestApp.java). I compared the violation lists before and after the bump: the new parent addsnone. Since Spotless has no lifecycle binding in this build, CI does not fail on it. Left for a
separate, formatting-only change so this PR stays reviewable — say the word and it gets one.
🤖 Generated with Claude Code