Compare commits

...

719 Commits

Author SHA1 Message Date
Stéphane Nicoll 33038d3e1e Exclude shaded JSON packages from architecture checks
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47207
2025-10-08 13:59:08 +02:00
Stéphane Nicoll b66509b4e1 Merge pull request #46410 from ppkarwasz
* pr/46410:
  Polish "Add runtime hints for Log4j Core 2"
  Add runtime hints for Log4j Core 2

Closes gh-46410
2025-10-08 10:44:58 +02:00
Stéphane Nicoll e20e2393c9 Polish "Add runtime hints for Log4j Core 2"
See gh-46410
2025-10-08 10:41:40 +02:00
Piotr P. Karwasz a2d4ecf8ac Add runtime hints for Log4j Core 2
This change introduces runtime hints for Log4j Core 2 to support its
integration with Spring Boot native images.

Starting with Log4j 2.25.x, Log4j includes built-in GraalVM reachability
metadata, allowing native image generation without requiring additional
manual configuration.

This contribution complements that by adding Spring Boot–specific
metadata:

* Registers default Spring Boot configuration files.
* Registers classes referenced via `ClassUtils.isPresent(...)` checks.

See gh-46410

Signed-off-by: Piotr P. Karwasz <piotr@github.copernik.eu>
2025-10-08 10:39:24 +02:00
Phillip Webb 05172cf77b Use ZipEntryConstants.CONSTANT_TIME_FOR_ZIP_ENTRIES to check timestamp
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Update `AbstractBootArchiveTests` to use the Gradle provided constant
to check the repeatable timestamp.
2025-10-07 22:29:18 -07:00
Stéphane Nicoll 4420c92173 Adapt Kotlin null-safety with Spring Framework changes
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47428
2025-10-07 15:44:09 +02:00
Stéphane Nicoll da8eac3483 Update RetryPolicySettings to configure exception policy as well
Closes gh-47264
2025-10-07 14:07:17 +02:00
Stéphane Nicoll cb51a44e2b Merge branch '3.5.x'
Closes gh-47426
2025-10-07 11:44:47 +02:00
Stéphane Nicoll 5e04d98260 Merge branch '3.4.x' into 3.5.x
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
Run CodeQL Analysis / run-analysis (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Has been cancelled Details
Build and Deploy Snapshot / Trigger Docs Build (push) Has been cancelled Details
Build and Deploy Snapshot / Verify (push) Has been cancelled Details
Closes gh-47425
2025-10-07 11:44:06 +02:00
Stéphane Nicoll 61acc52137 Merge pull request #47415 from dependabot[bot]
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
Run CodeQL Analysis / run-analysis (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Has been cancelled Details
Build and Deploy Snapshot / Trigger Docs Build (push) Has been cancelled Details
Build and Deploy Snapshot / Verify (push) Has been cancelled Details
* pr/47415:
  Polish "Bump jfrog/setup-jfrog-cli from 4.6.1 to 4.7.0"
  Bump jfrog/setup-jfrog-cli from 4.6.1 to 4.7.0

Closes gh-47415
2025-10-07 11:43:58 +02:00
Stéphane Nicoll f1a3971148 Polish "Bump jfrog/setup-jfrog-cli from 4.6.1 to 4.7.0"
See gh-47415
2025-10-07 11:43:41 +02:00
dependabot[bot] dd353034de Bump jfrog/setup-jfrog-cli from 4.6.1 to 4.7.0
Bumps [jfrog/setup-jfrog-cli](https://github.com/jfrog/setup-jfrog-cli) from 4.6.1 to 4.7.0.
- [Release notes](https://github.com/jfrog/setup-jfrog-cli/releases)
- [Commits](88e9eba31c...c32bf10843)

---
updated-dependencies:
- dependency-name: jfrog/setup-jfrog-cli
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

See gh-47415

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-07 11:42:43 +02:00
Stéphane Nicoll c2e838a603 Merge pull request #47381 from meistermeier
* pr/47381:
  Polish "Add support for Neo4j Java Driver 6.0.0"
  Add support for Neo4j Java Driver 6.0.0

Closes gh-47381
2025-10-07 11:37:32 +02:00
Stéphane Nicoll 6f1bcc4bfa Polish "Add support for Neo4j Java Driver 6.0.0"
See gh-47381
2025-10-07 11:37:25 +02:00
Gerrit Meier 2542430e5b Add support for Neo4j Java Driver 6.0.0
See gh-47381

Signed-off-by: Gerrit Meier <meistermeier@gmail.com>
2025-10-07 11:37:25 +02:00
Stéphane Nicoll 43b06ca9b9 Start building against Spring Data Bom 2025.1.0-RC1 snapshots
See gh-47394
2025-10-07 11:37:12 +02:00
Stéphane Nicoll 533544d8fc Polish 2025-10-07 10:39:54 +02:00
Andy Wilkinson 5ec993bb8c Upgrade to Dokka 2.1.0-Beta
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
We need to upgrade for better compatibility with Java 25.

See gh-47413
2025-10-07 07:02:57 +01:00
Andy Wilkinson 1ebc557bd5 Consistent configuration of test repository URLs
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
2025-10-06 23:09:27 +01:00
Andy Wilkinson 2eaad0585c Consistent configuration of docker-test-maven-repository 2025-10-06 22:21:36 +01:00
Andy Wilkinson 46022d2a4e Third time lucky fixing the Windows build?
See 44099d3d, c1924f2, a5dbc5b
2025-10-06 20:19:03 +01:00
Andy Wilkinson a5dbc5bb22 Alternative attempt at fixing the Windows build
See 44099d3d, c1924f2
2025-10-06 19:48:06 +01:00
Andy Wilkinson 16718f676d Upgrade to Detekt 2.0.0-alpha.0
We need to upgrade for better compatibility with Java 25.

See gh-47413
2025-10-06 19:41:08 +01:00
Andy Wilkinson c1924f2fcd Try to fix Windows build
See 44099d3d
2025-10-06 19:32:53 +01:00
Andy Wilkinson 473fc1b19e Merge branch '3.5.x'
Closes gh-47413
2025-10-06 18:44:02 +01:00
Andy Wilkinson a79d0e0d10 Remove Java 24 from CI matrix
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47412
2025-10-06 18:42:42 +01:00
Andy Wilkinson 44099d3d21 Build with Gradle 9.1.0 2025-10-06 18:30:48 +01:00
Stéphane Nicoll 2440667aab Polish
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
2025-10-06 16:37:10 +02:00
Stéphane Nicoll 7db43ef820 Mark spring-web optional in spring-boot-rsocket
This commit moves the spring-web dependency from implementation to
optional. It also adds an api dependency to spring-web in the rsocket
starter.

The reasoning behind this change is that RSocket can be used without
spring-web, and we want to make sure that consumers of the dependency
can achieve that goal, as they were able to in previous versions.

However, we believe that most RSocket-based applications need spring-web
as, without it, only the simple and not efficient implementation of
RouterMatcher is available. With the addition of exception handling
using ControllerAdvice, this change makes also sure that it works out
of the box with the starter.

Closes gh-47409
2025-10-06 16:31:09 +02:00
Moritz Halbritter d97539bc46 Add nullability annotations to tests in module/spring-boot-data-couchbase-test
See gh-47263
2025-10-06 13:10:55 +02:00
Moritz Halbritter 8c25063273 Add nullability annotations to tests in module/spring-boot-liquibase
See gh-47263
2025-10-06 13:07:58 +02:00
Moritz Halbritter 489336255a Add nullability annotations to tests in module/spring-boot-ldap
See gh-47263
2025-10-06 13:07:58 +02:00
Moritz Halbritter fde0ae4ac9 Add nullability annotations to tests in module/spring-boot-kotlin-serialization
See gh-47263
2025-10-06 13:07:58 +02:00
Moritz Halbritter 643f6112c7 Add nullability annotations to tests in module/spring-boot-kafka
See gh-47263
2025-10-06 13:07:58 +02:00
Moritz Halbritter 4bf6fcefab Add nullability annotations to tests in module/spring-boot-jsonb
See gh-47263
2025-10-06 13:07:58 +02:00
Moritz Halbritter 9d85c379bd Add nullability annotations to tests in module/spring-boot-jpa-test
See gh-47263
2025-10-06 13:07:58 +02:00
Moritz Halbritter 9d63a74bbc Add nullability annotations to tests in module/spring-boot-jpa
See gh-47263
2025-10-06 13:07:58 +02:00
Moritz Halbritter f059a953d3 Add nullability annotations to tests in module/spring-boot-jooq-test
See gh-47263
2025-10-06 13:07:57 +02:00
Moritz Halbritter 1f293cc653 Add nullability annotations to tests in module/spring-boot-jooq
See gh-47263
2025-10-06 13:07:57 +02:00
Moritz Halbritter 49c7546662 Add nullability annotations to tests in module/spring-boot-jms
See gh-47263
2025-10-06 13:07:57 +02:00
Moritz Halbritter c92617a015 Add nullability annotations to tests in module/spring-boot-jetty
See gh-47263
2025-10-06 13:07:57 +02:00
Andy Wilkinson a9bf744b68 Fix Docker test configuration in spring-boot-data-couchbase-test
See gh-47322
2025-10-06 11:38:45 +01:00
Moritz Halbritter b503ad3a9a Add nullability annotations to tests in module/spring-boot-jdbc-test
See gh-47263
2025-10-06 12:03:58 +02:00
Moritz Halbritter a350ead232 Add nullability annotations to tests in module/spring-boot-data-redis-test
See gh-47263
2025-10-06 12:03:58 +02:00
Moritz Halbritter 55a97aa7ad Add nullability annotations to tests in module/spring-boot-data-r2dbc-test
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter 06dd6aec3c Add nullability annotations to tests in module/spring-boot-data-neo4j-test
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter a1038a5e64 Add nullability annotations to tests in module/spring-boot-data-mongodb-test
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter 99f8c4cd0d Add nullability annotations to tests in module/spring-boot-data-ldap-test
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter 2edd8f9d62 Add nullability annotations to tests in module/spring-boot-data-jpa-test
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter 3353090bc6 Add nullability annotations to tests in module/spring-boot-data-jdbc-test
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter ad22bc033f Add nullability annotations to tests in module/spring-boot-data-jdbc
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter dee42bfe2d Add nullability annotations to tests in module/spring-boot-data-elasticsearch-test
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter 307dc1c477 Add nullability annotations to tests in module/spring-boot-data-couchbase-test
See gh-47263
2025-10-06 12:03:57 +02:00
Moritz Halbritter 64aad6d060 Add nullability annotations to tests in module/spring-boot-data-cassandra-test
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter 0f41e906b9 Add nullability annotations to tests in module/spring-boot-cache-test
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter c65a259637 Add nullability annotations to tests in module/spring-boot-batch-jdbc
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter 1b44bafda1 Add nullability annotations to tests in core/spring-boot-test-autoconfigure
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter e4a58a53d0 Add nullability annotations to tests in module/spring-boot-jdbc
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter 34a8e1bd82 Improve null-safety of module/spring-boot-jdbc
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter af941e0a9a Add nullability annotations to tests in module/spring-boot-jackson
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter 7f225a8df5 Add nullability annotations to tests in module/spring-boot-integration
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter cae3fb578c Add nullability annotations to tests in module/spring-boot-http-converter
See gh-47263
2025-10-06 12:03:56 +02:00
Moritz Halbritter f175d132b3 Add nullability annotations to tests in module/spring-boot-http-codec
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter 2ca6703f55 Add nullability annotations to tests in module/spring-boot-http-client
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter f59fc4020a Add nullability annotations to tests in module/spring-boot-hibernate
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter 80c384e92c Add nullability annotations to tests in module/spring-boot-health
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter 0634c11eee Add nullability annotations to tests in module/spring-boot-hazelcast
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter bf075ec89c Add nullability annotations to tests in module/spring-boot-hateoas
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter f74ed943e5 Add nullability annotations to tests in module/spring-boot-h2console
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter 80436abbb6 Add nullability annotations to tests in module/spring-boot-gson
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter 09311ff44e Add nullability annotations to tests in module/spring-boot-groovy-templates
See gh-47263
2025-10-06 12:03:55 +02:00
Moritz Halbritter 9f1e033caf Add nullability annotations to tests in module/spring-boot-graphql-test
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter 4854fec275 Add nullability annotations to tests in module/spring-boot-graphql
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter e83ad75d3e Add nullability annotations to tests in module/spring-boot-freemarker
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter 657c537cc2 Add nullability annotations to tests in module/spring-boot-flyway
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter 0753e7dbf2 Manage version for Checker annotations internally
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter 1d4b9d372f Add nullability annotations to tests in module/spring-boot-elasticsearch
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter e878db0abf Add nullability annotations to tests in module/spring-boot-devtools
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter 58e2f9c872 Improve null-safety of module/spring-boot-devtools
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter 1023ed65a6 Add nullability annotations to tests in module/spring-boot-data-rest
See gh-47263
2025-10-06 12:03:54 +02:00
Moritz Halbritter 266f9c44e0 Add nullability annotations to tests in module/spring-boot-data-redis
See gh-47263
2025-10-06 12:03:53 +02:00
Moritz Halbritter 3fdc1db7ce Add nullability annotations to tests in module/spring-boot-data-r2dbc
See gh-47263
2025-10-06 12:03:53 +02:00
Andy Wilkinson a111f1f68f Upgrade to Liquibase 5.0.1
Closes gh-47386
2025-10-06 11:00:59 +01:00
Stéphane Nicoll b10262c9bc Merge pull request #45360 from dmitrysulman
* pr/47287:
  Polish "Register controller advices to RSocket messaging"
  Register controller advices to RSocket messaging

Closes gh-45360
2025-10-06 11:32:54 +02:00
Stéphane Nicoll 485180df4f Polish "Register controller advices to RSocket messaging"
See gh-45360
2025-10-06 11:29:16 +02:00
Dmitry Sulman 94fce6f689 Register controller advices to RSocket messaging
See gh-45360

Signed-off-by: Dmitry Sulman <dmitry.sulman@gmail.com>
2025-10-06 11:24:35 +02:00
Stéphane Nicoll 761302452b Merge pull request #46208 from shahabkondri
* pr/46208:
  Polish "Include /fonts/** to common static locations"
  Include /fonts/** to common static locations

Closes gh-46208
2025-10-06 08:52:42 +02:00
Stéphane Nicoll 3f2e1b2466 Polish "Include /fonts/** to common static locations"
See gh-46208
2025-10-06 08:51:17 +02:00
Shahab Kondri 74daedff76 Include /fonts/** to common static locations
This commit updates StaticResourceLocation to include a new entry for
the common locations of fonts. As a result,
StaticResourceRequest#atCommonLocations now includes /fonts/** as well.

See gh-46208

Signed-off-by: Shahab Kondri <shahab.kondri@gmail.com>
2025-10-06 08:40:57 +02:00
Stéphane Nicoll 169b1b10b0 Allow CodecCustomizer to be used out-of-the-box with WebFlux
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47397
2025-10-05 08:55:19 +02:00
Stéphane Nicoll 652414155c Merge pull request #47401 from NeatGuyCoding
* pr/47401:
  Polish "Validate node configuration with static master replica"
  Validate node configuration with static master replica

Closes gh-47401
2025-10-05 08:27:02 +02:00
Stéphane Nicoll 1e4cc948f2 Polish "Validate node configuration with static master replica"
See gh-47401
2025-10-05 08:26:17 +02:00
NeatGuyCoding 4fd9626854 Validate node configuration with static master replica
See gh-47401

Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>
2025-10-05 08:20:38 +02:00
NeatGuyCoding 8a9528ebdc Fix Javadoc link
See gh-47401

Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>
2025-10-05 08:19:33 +02:00
Stéphane Nicoll 1ed8eb08e0 Add missing Kotlin example for MockMvc and RestTestClient
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
Run CodeQL Analysis / run-analysis (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Has been cancelled Details
Build and Deploy Snapshot / Trigger Docs Build (push) Has been cancelled Details
Build and Deploy Snapshot / Verify (push) Has been cancelled Details
Closes gh-47371
2025-10-03 16:32:11 +02:00
Andy Wilkinson 49ba8aa668 Merge pull request #46520 from academey
* gh-46520:
  Polish "Remove unused SHA-1 hash from UNPACK markers"
  Remove unused SHA-1 hash from UNPACK markers

Closes gh-46520
2025-10-03 15:16:45 +01:00
Andy Wilkinson 53cda6a6a1 Polish "Remove unused SHA-1 hash from UNPACK markers"
See gh-46520
2025-10-03 15:16:36 +01:00
academey d5717b71ab Remove unused SHA-1 hash from UNPACK markers
In BootZipCopyAction and AbstractJarWriter, SHA-1 hash is calculated for
stored entries requiring unpack and set as entry comment. However, the
hash isn't used anywhere, just the marker prefix 'UNPACK:' is checked.

This commit removes the unnecessary SHA-1 hash calculation which reads
the file completely in memory, potentially three times in extreme cases.
Now the comment is simply set to 'UNPACK:' without any hash, improving
performance.

See gh-46520

Signed-off-by: Hyunjoon Choi <hyunjoon@example.com>
Signed-off-by: academey <academey@gmail.com>
2025-10-03 15:16:36 +01:00
Stéphane Nicoll 79ad5e6999 Merge pull request #46975 from dungdm93
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
* pr/46975:
  Polish "Auto-configure observation of Redis with Lettuce"
  Auto-configure observation of Redis with Lettuce

Closes gh-46975
2025-10-03 14:45:30 +02:00
Stéphane Nicoll 871f82d116 Polish "Auto-configure observation of Redis with Lettuce"
See gh-46975
2025-10-03 14:45:12 +02:00
Đặng Minh Dũng 0187b77761 Auto-configure observation of Redis with Lettuce
See gh-46975

Signed-off-by: Đặng Minh Dũng <dungdm93@live.com>
2025-10-03 14:26:19 +02:00
Stéphane Nicoll 04038101d2 Merge branch '3.5.x'
Closes gh-47393
2025-10-03 14:25:45 +02:00
Stéphane Nicoll 45bf83d737 Merge branch '3.4.x' into 3.5.x
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
Run CodeQL Analysis / run-analysis (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Has been cancelled Details
Build and Deploy Snapshot / Trigger Docs Build (push) Has been cancelled Details
Build and Deploy Snapshot / Verify (push) Has been cancelled Details
Closes gh-47392
2025-10-03 14:25:29 +02:00
Stéphane Nicoll f7e7664a5a Adapt links to Lettuce and Jedis
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
Run CodeQL Analysis / run-analysis (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Has been cancelled Details
Build and Deploy Snapshot / Trigger Docs Build (push) Has been cancelled Details
Build and Deploy Snapshot / Verify (push) Has been cancelled Details
Closes gh-47391
2025-10-03 14:25:10 +02:00
Andy Wilkinson 6ee519ec57 Disable test when Docker is not running 2025-10-03 12:29:30 +01:00
Andy Wilkinson 92fe4c55f7 Resolve MariaDB and MySQL dialects through DB query
Spring Data JDBC has deprecated its INSTANCE constants in its MariaDB
and MySQL dialects as the required configuration for the dialect
varies depending on the configuration of the DB.

This commit adapts to this deprecation by changing Boot's
DataJdbcDatabaseDialect to resolve the underlying dialect through a
DB query for its MARIA and MYSQL values.

Closes gh-46062
2025-10-03 09:37:56 +01:00
Stéphane Nicoll 911578e560 Merge pull request #46957 from facewise
* pr/46957:
  Polish "Add support for static master-replica with Lettuce"
  Add support for static master-replica with Lettuce

Closes gh-46957
2025-10-03 10:14:29 +02:00
Stéphane Nicoll fbcc1fdec6 Polish "Add support for static master-replica with Lettuce"
See gh-46957
2025-10-03 10:03:54 +02:00
facewise c280fdefe8 Add support for static master-replica with Lettuce
See gh-46957

Signed-off-by: 용현 <dydguskim@gripcorp.co>
2025-10-03 09:05:14 +02:00
Brian Clozel 319e462cba Use new Jetty CompressionHandler
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Prior to this commit, our Jetty support for compression was using the
`GzipHandler` which is deprecated as of Jetty 12.1.
This commit adds two new dependencies to the module and uses the new
`CompressionHandler` with the `GzipCompression` algorithm.

Closes gh-47134
2025-10-02 22:02:49 +02:00
Moritz Halbritter aa06ab1e25 Add nullability annotations to tests in module/spring-boot-data-neo4j
See gh-47263
2025-10-02 15:35:05 +02:00
Moritz Halbritter 09967b1a5d Add nullability annotations to tests in module/spring-boot-data-mongodb
See gh-47263
2025-10-02 15:35:05 +02:00
Moritz Halbritter 5c0d2ee180 Add nullability annotations to tests in module/spring-boot-data-ldap
See gh-47263
2025-10-02 15:35:05 +02:00
Moritz Halbritter bb19585601 Add nullability annotations to tests in module/spring-boot-data-jpa
See gh-47263
2025-10-02 15:35:05 +02:00
Moritz Halbritter f2c2d19a9c Add nullability annotations to tests in module/spring-boot-data-jdbc
See gh-47263
2025-10-02 15:35:05 +02:00
Moritz Halbritter 3db8b5fb26 Add nullability annotations to tests in module/spring-boot-data-elasticsearch
See gh-47263
2025-10-02 15:35:05 +02:00
Moritz Halbritter e313624263 Add nullability annotations to tests in module/spring-boot-data-couchbase
See gh-47263
2025-10-02 15:35:05 +02:00
Moritz Halbritter af2436de84 Add nullability annotations to tests in module/spring-boot-data-commons
See gh-47263
2025-10-02 15:35:05 +02:00
Moritz Halbritter 4a62872d63 Add nullability annotations to tests in module/spring-boot-data-cassandra
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter f5d6bea934 Add nullability annotations to tests in module/spring-boot-couchbase
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter 419d78b359 Add nullability annotations to tests in module/spring-boot-cloudfoundry
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter b6950f8fb0 Add nullability annotations to tests in module/spring-boot-cassandra
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter f8ce17c751 Add nullability annotations to tests in module/spring-boot-cache
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter 4a30228978 Add nullability annotations to tests in module/spring-boot-batch
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter f3df45ace1 Add nullability annotations to tests in module/spring-boot-artemis
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter 3aaf4b7b0a Add nullability annotations to tests in module/spring-boot-amqp
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter 4af0d6d747 Add nullability annotations to tests in module/spring-boot-actuator-autoconfigure
See gh-47263
2025-10-02 15:35:04 +02:00
Moritz Halbritter 3c3726b89e Improve null-safety of module/spring-boot-actuator-autoconfigure
See gh-47263
2025-10-02 15:35:03 +02:00
Brian Clozel 92ee73df30 Deprecate HttpMessageConverters for Framework's
Prior to this commit, Spring Boot had an  `HttpMessageConverters` class
that allowed, to configure message converter instances for MVC server
applications and traditional Spring HTTP clients.

As of Spring Framework 7.0, Framework ships its own
`HttpMessageConverters` class, aligning with the existing codecs
configuration on the WebFlux side. As a result, a few methods taking
`List<HttpMessageConverter>` as arguments were deprecated in favor of
the new arrangement.

This commit adapts to the Framework changes by deprecating Boot's
`HttpMessageConverters` in favor of Framework's. This splits the client
and server configuration as they are meant to be managed separately.
Applications can still contribute `HttpMessageConverters` (Boot's
variant) beans but the type itself is now deprecated.
Instead, applications should now contribute
`ClientHttpMessageConvertersCustomizer` and
`ServerHttpMessageConvertersCustomizer` beans to customize message
converters.

Closes gh-46411
2025-10-02 15:22:13 +02:00
Moritz Halbritter 418e057afc Add nullability annotations to tests in core/spring-boot
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
See gh-47263
2025-10-02 14:34:34 +02:00
Moritz Halbritter 1fda419b17 Upgrade to NullAway 0.12.10 and ErrorProne 2.42.0
See gh-47263
2025-10-02 14:34:33 +02:00
Moritz Halbritter 4c8cabcb3a Upgrade to JUnit Jupiter 6.0.0
Closes gh-47383
2025-10-02 14:20:04 +02:00
Moritz Halbritter dec46b45d7 Start building against Spring Framework 7.0.0-RC1 snapshots
See gh-47382
2025-10-02 14:17:29 +02:00
Moritz Halbritter 57992512b7 Add nullability annotations to tests in core/spring-boot-autoconfigure
See gh-47263
2025-10-02 12:17:57 +02:00
Moritz Halbritter b566b73be6 Add nullability annotations to tests in core/spring-boot-docker-compose
See gh-47263
2025-10-02 12:17:00 +02:00
Moritz Halbritter 532ea9abc1 Add nullability annotations to tests in core/spring-boot-properties-migrator
See gh-47263
2025-10-02 12:16:24 +02:00
Moritz Halbritter ea05f6df15 Add nullability annotations to tests in core/spring-boot-test
See gh-47263
2025-10-02 12:12:44 +02:00
Moritz Halbritter 23c9b6510b Add nullability annotations to tests in core/spring-boot-testcontainers
See gh-47263
2025-10-02 12:00:16 +02:00
Moritz Halbritter 9bb62a074b Add nullability annotations to tests in module/spring-boot-actuator
See gh-47263
2025-10-02 11:59:32 +02:00
Moritz Halbritter fe975214cd Add nullability annotations to tests in module/spring-boot-activemq
See gh-47263
2025-10-02 11:58:23 +02:00
Moritz Halbritter c099462e6f Upgrade to nullability plugin 0.0.5
Closes gh-47380
2025-10-02 11:43:11 +02:00
Andy Wilkinson ee2730ca8d Stop an ObjectMapper from causing JsonMapper auto-config to back off
Previously, the auto-configured JsonMapper would back off when any
type of ObjectMapper was defined. Updating this was missed as part
of the move to Jackson 3 where both Boot and Framework now intend to
use the more specific JsonMapper type.

This commit updates the condition such that a JsonMapper will still
be auto-configured when any other type of ObjectMapper is definied.
It will now only back off when a JsonMapper bean is defined.

Closes gh-47379
2025-10-02 09:30:26 +01:00
Stéphane Nicoll b28d390c69 Rationalize SSL bundles in RedisConnectionDetails
This commit exposes a single ssl bundle rather than a specific bundle
for each of the three supported modes.

Closes gh-47375
2025-10-02 10:00:07 +02:00
Stéphane Nicoll e7ffa33d65 Remove unused file 2025-10-02 09:44:38 +02:00
Phillip Webb dadfd9a35d Add classic test starter
See gh-46356
See gh-47322
2025-10-01 21:55:38 -07:00
Phillip Webb 2d312ed5f5 Add remaining test starters
Add test starters for all remaining non-deprecated starters.

See gh-46356
See gh-47322
2025-10-01 21:55:33 -07:00
Phillip Webb ee72caf7dc Drop `spring-boot-rest-client-test` dependency from test starter
See gh-46356
See gh-47322
2025-10-01 21:55:25 -07:00
Phillip Webb a30e832915 Add starters for corresponding test modules
See gh-46356
See gh-47322
2025-10-01 21:55:19 -07:00
Phillip Webb 0ae23de2b5 Refine test module dependencies
See gh-46356
See gh-47322
2025-10-01 21:55:14 -07:00
Phillip Webb 2a521ce4e9 Remove `spring-boot-web-server-test` module
Remove the `spring-boot-web-server-test` module, adding
`SpringBootTestRandomPortContextCustomizerFactory` to
`spring-boot-web-server` as a replacement for
`SpringBootTestRandomPortApplicationListener`.

See gh-46356
See gh-47322
2025-10-01 21:54:54 -07:00
Phillip Webb 3cced515ce Remove unused HTML Unit classes
Remove `LocalHostWebClient` and `LocalHostWebConnectionHtmlUnitDriver`
in favor of `BaseUrl` versions.

See gh-46356
See gh-47322
2025-10-01 21:54:44 -07:00
Phillip Webb 279de9e807 Migrate to `BaseUrlUriTemplateHandler`
Remove `LocalHostUriTemplateHandler` and migrate existing code to use
`BaseUrlUriTemplateHandler`.

See gh-46356
See gh-47322
2025-10-01 21:54:32 -07:00
Phillip Webb 97c89b480f Move `@LocalServerPort` and `@LocalManagementServerPort`
Move `@LocalServerPort` and `@LocalManagementServerPort` back to
`spring-boot-test`. The should help reduce upgrade pain since these
annotations are fairly commonly used. It also removes the need for
depending on `spring-boot-webserver-test`.

This is slight compromise with the module structure, since the
web-server module usually contributes the properties referenced
by the annotations.

See gh-46356
See gh-47322
2025-10-01 21:53:58 -07:00
Phillip Webb 82795f9966 Move `DisableReactorResourceFactory...` to spring-boot-test
Move `DisableReactorResourceFactoryGlobalResources...` support from
`spring-boot-web-server-test` back to `spring-boot-test` since it's
useful if Reactor Netty is being used directly and removes the need
for the `spring-boot-web-server-test` dependency.

See gh-46356
See gh-47322
2025-10-01 21:53:35 -07:00
Phillip Webb 7c8a15629b Remove `spring-boot-web-server-test` usage
Remove `spring-boot-web-server-test` usage from the
`spring-boot-webflux-test` module.

See gh-46356
See gh-47322
2025-10-01 21:52:55 -07:00
Phillip Webb ef37765625 Add `BaseUrl` backed HTTP Unit support classes
Add new HTML Unit support classes that use `BaseUrlProviders`
to find the `BaseUrl`.

See gh-46356
2025-10-01 21:51:58 -07:00
Phillip Webb bba56ffc8b Move `RestTestClientBuilderCustomizer` to `spring-boot-test`
Relocate `RestTestClientBuilderCustomizer` to `spring-boot-test`
and break the direct link to web-server by making use of
`spring.factories` and the new `BaseUrlProviders` class.

See gh-46356
2025-10-01 21:51:20 -07:00
Phillip Webb 6f909114e7 Move `WebTestClientBuilderCustomizer` to `spring-boot-test`
Relocate `WebTestClientBuilderCustomizer` to `spring-boot-test`
and break the direct link to web-server and http-codec by making
use of `spring.factories` and the new `BaseUrlProviders` class.

A new `spring-boot-test-integration-test` module has also been
added to ensure hold the previous tests.

See gh-46356
2025-10-01 21:50:13 -07:00
Phillip Webb 79091f926d Introduce `BaseUrl` and `BaseUrlProvider`
Add the concept of a `BaseUrl` to the core `spring-boot-test`
module for use when making test HTTP calls. The web server module
provides `BaseUrlProvider` implementations that provide the actual
base URL (usually `https://localhost:<local-server-port>`).

Test utilities will be able to use `BaseUrlProviders` to find the
`BaseUrl`.

See gh-46356
2025-10-01 21:46:28 -07:00
Phillip Webb 155e3bd5e6 Relocate `@AutoConfigureDataSourceInitialization`
Relocate `@AutoConfigureDataSourceInitialization` from
`spring-jdbc-test` to `spring-boot-test-autoconfigure`. This change
allows Flyway and Liquibase to respond to the annotation without
the user needing to remember the `spring-jdbc-test` dependency.

This is especially important for R2DB applications which may
still be using Flyway or Liquibase for migrations and will
want them to apply during tests.

See gh-46356
See gh-47322
2025-10-01 21:43:13 -07:00
Phillip Webb 8008076e04 Remove spring-boot-json-test module
Remove spring-boot-json-test module and spread code between
`spring-boot-test`, `spring-boot-test-autoconfigure` and JSON
technology modules.

See gh-46356
See gh-47322
2025-10-01 21:42:18 -07:00
Phillip Webb 4b2d358384 Refine spring-boot-test-autoconfigure dependencies
Make `spring-boot-test-autoconfigure` optionally depend on
`spring-boot-autoconfigure` so that it can be an `api` dependency
for `*-test` modules. Also relocate it to core.

See gh-47322
2025-10-01 21:41:55 -07:00
Phillip Webb 17e655b7e5 Relocate `@PropertyMapping` to spring-boot-test
Move `@PropertyMapping` and supporting code from the
`spring-boot-test-autoconfigure` module to `spring-boot-test`
since it's generally applicable.

See gh-46356
See gh-47322
2025-10-01 21:41:03 -07:00
Phillip Webb 2b3a8ff647 Relocate `@TypeExcludeFilters` to spring-boot-test
Move `@TypeExcludeFilters` and supporting code from the
`spring-boot-test-autoconfigure` module to `spring-boot-test`
since it's generally applicable.

See gh-46356
See gh-47322
2025-10-01 21:39:34 -07:00
Phillip Webb 36732bd74a Polish 2025-10-01 17:21:00 -07:00
Phillip Webb 352925bbe8 Polish @Since tags 2025-10-01 17:10:30 -07:00
Phillip Webb f8f6e59d1a Polish starter descriptions 2025-10-01 11:40:03 -07:00
Phillip Webb 08a641c1a2 Polish whitespace in gradle files 2025-10-01 11:40:03 -07:00
Andy Wilkinson 26364c27e2 Rename …DataAutoConfiguration to Data…AutoConfiguration
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47049
2025-10-01 17:39:08 +01:00
Stéphane Nicoll 787840735b Add support for RestTestClient
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
This commit adds support for RestTestClient for MockMvc and integration
tests.

Closes gh-47335
2025-10-01 09:04:59 +02:00
Andy Wilkinson e2ba4dad2a Correct property in Session Data Redis smoke test
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
2025-09-30 17:03:55 +01:00
Andy Wilkinson 7a595f1b83 Rename properties for Spring Session Data MongoDB and Data Redis
Closes gh-47333
2025-09-30 15:46:46 +01:00
Andy Wilkinson 922592938a Polish 2025-09-30 15:34:37 +01:00
Andy Wilkinson b23d7fe203 Ignore deprecation warning caused by Framework
See gh-45501
See spring-projects/spring-framework#35557
2025-09-30 14:49:47 +01:00
Andy Wilkinson f9d4589259 Use Java 25 in native image system test
We need to use Java 25 when using buildpacks to create a native image
for a couple of reasons:

- Framework has raised its GraalVM baseline to 25
- Buildpacks have removed support for Java 24

See gh-45501
2025-09-30 13:02:24 +01:00
Stéphane Nicoll d4fce9a068 Merge branch '3.5.x'
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47363
2025-09-30 08:07:01 +02:00
Stéphane Nicoll cc20b3ec3b Merge branch '3.4.x' into 3.5.x
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
Run CodeQL Analysis / run-analysis (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Has been cancelled Details
Build and Deploy Snapshot / Trigger Docs Build (push) Has been cancelled Details
Build and Deploy Snapshot / Verify (push) Has been cancelled Details
Closes gh-47362
2025-09-30 08:06:54 +02:00
Stéphane Nicoll f28bea16c5 Merge pull request #47356 from dependabot[bot]
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Has been cancelled Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Has been cancelled Details
Run CodeQL Analysis / run-analysis (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Has been cancelled Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Has been cancelled Details
Build and Deploy Snapshot / Trigger Docs Build (push) Has been cancelled Details
Build and Deploy Snapshot / Verify (push) Has been cancelled Details
* pr/47356:
  Bump patch-package from 8.0.0 to 8.0.1 in /antora

Closes gh-47356
2025-09-30 08:06:42 +02:00
dependabot[bot] 4ba14c139e Bump patch-package from 8.0.0 to 8.0.1 in /antora
Bumps [patch-package](https://github.com/ds300/patch-package) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/ds300/patch-package/releases)
- [Changelog](https://github.com/ds300/patch-package/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ds300/patch-package/commits)

---
updated-dependencies:
- dependency-name: patch-package
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

See gh-47356

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-30 08:05:57 +02:00
Stéphane Nicoll ad3a18d086 Merge branch '3.5.x'
Closes gh-47361
2025-09-30 07:54:40 +02:00
Stéphane Nicoll 98b4afe527 Merge branch '3.4.x' into 3.5.x
Closes gh-47360
2025-09-30 07:54:32 +02:00
Stéphane Nicoll a8caeed578 Merge pull request #47357 from dependabot[bot]
* pr/47357:
  Polish "Bump gradle/actions from 4.4.3 to 4.4.4"
  Bump gradle/actions from 4.4.3 to 4.4.4

Closes gh-47357
2025-09-30 07:54:25 +02:00
Stéphane Nicoll bc968fc671 Polish "Bump gradle/actions from 4.4.3 to 4.4.4"
See gh-47357
2025-09-30 07:54:12 +02:00
dependabot[bot] 1c1a35f6be Bump gradle/actions from 4.4.3 to 4.4.4
Bumps [gradle/actions](https://github.com/gradle/actions) from 4.4.3 to 4.4.4.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](ed408507ea...748248ddd2)

---
updated-dependencies:
- dependency-name: gradle/actions
  dependency-version: 4.4.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

See gh-47357

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-30 07:53:49 +02:00
Stéphane Nicoll eb307b91ec Merge branch '3.5.x'
Closes gh-47359
2025-09-30 07:50:09 +02:00
Stéphane Nicoll 14791f0593 Fix typos
Closes gh-47358
2025-09-30 07:49:16 +02:00
Stéphane Nicoll 474c9cdeb1 Fix javadoc links in reference guide
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47351
2025-09-29 18:37:31 +02:00
Stéphane Nicoll cbdd7cf23b Fix links to source code in reference documentation
Closes gh-47348
2025-09-29 16:38:04 +02:00
Andy Wilkinson 569fa5fd7d Remove milestone repository from Maven and Gradle examples
Closes gh-47341
2025-09-29 15:25:02 +01:00
Stéphane Nicoll 5a2f90d1f1 Register spring-boot-batch-jdbc for configuration metadata changelog
See gh-46307
2025-09-29 15:36:04 +02:00
Stéphane Nicoll 5301c8d905 Use new spring-boot-micrometer-* modules consistently
Closes gh-47350
2025-09-29 15:34:46 +02:00
Stéphane Nicoll 4f6bbac13e Add support for in-memory Batch infrastructure
This commit moves the existing JDBC-based Spring Batch infrastructure
to a new 'spring-boot-batch-jdbc' module, while the existing module
only offers in-memory (aka resourceless) support.

The commit also updates the reference guide to provide some more
information about what's available and how to use it.

Closes gh-46307
2025-09-29 15:00:52 +02:00
Andy Wilkinson 54ffc42309 Fix table formatting
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47345
See gh-47328
2025-09-29 10:47:41 +01:00
Stéphane Nicoll 8c5a25ee5c Merge branch '3.5.x'
Closes gh-47347
2025-09-29 10:23:29 +02:00
Stéphane Nicoll 30d3889079 Merge branch '3.4.x' into 3.5.x
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47346
2025-09-29 10:22:13 +02:00
Stéphane Nicoll e8b6ab14bc Merge pull request #47300 from xyraclius
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
* pr/47300:
  Polish "Use liquibase schema in LiquibaseEndpoint if it set"
  Use liquibase schema in LiquibaseEndpoint if it set

Closes gh-47300
2025-09-29 10:22:01 +02:00
Stéphane Nicoll 5344fb218a Polish "Use liquibase schema in LiquibaseEndpoint if it set"
See gh-47300
2025-09-29 10:16:16 +02:00
Nabil Fawwaz Elqayyim bdb05639bc Use liquibase schema in LiquibaseEndpoint if it set
See gh-47300

Signed-off-by: Nabil Fawwaz Elqayyim <master@nabilfawwaz.com>
2025-09-29 10:16:05 +02:00
Moritz Halbritter db10e3d1ed Fix typo 2025-09-29 10:11:08 +02:00
Stéphane Nicoll ae86895953 Merge branch '3.5.x'
Closes gh-47344
2025-09-29 09:46:15 +02:00
Stéphane Nicoll 93c9413ac0 Merge branch '3.4.x' into 3.5.x
Closes gh-47343
2025-09-29 09:46:07 +02:00
Stéphane Nicoll f93c43cb8a Merge pull request #47339 from fhiyo
* pr/47339:
  Polish "Use non-deprecated syntax to configure sourceCompatibility"
  Use non-deprecated syntax to configure sourceCompatibility

Closes gh-47339
2025-09-29 09:46:02 +02:00
Stéphane Nicoll c3aca4b126 Polish "Use non-deprecated syntax to configure sourceCompatibility"
See gh-47339
2025-09-29 09:42:16 +02:00
fhiyo b3db525f0f Use non-deprecated syntax to configure sourceCompatibility
See gh-47339

Signed-off-by: fhiyo <13327262+fhiyo@users.noreply.github.com>
2025-09-29 09:42:04 +02:00
Andy Wilkinson 52c55788a2 Add new -test modules to spring-boot-dependencies
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
See gh-47322
See gh-46356
2025-09-26 17:57:18 +01:00
Andy Wilkinson 990644919a Make all TypeExcludeFilters package-private
Closes gh-47227
2025-09-26 11:08:53 +01:00
Andy Wilkinson 2756424035 Merge branch '3.5.x'
Closes gh-47331
2025-09-26 10:32:41 +01:00
Andy Wilkinson 9c727be8f2 Merge branch '3.4.x' into 3.5.x
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:25], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47330
2025-09-26 10:31:02 +01:00
Andy Wilkinson e4e3988433 Fix link to Framework's @Bean annotation
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run CodeQL Analysis / run-analysis (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details
Closes gh-47329
2025-09-26 10:29:25 +01:00
Andy Wilkinson 0959271061 Move jackson read and write to spring.jackson.json
The spring.jackson.read and spring.jackson.write properties are
JSON-specific. To make this more clear, this commit moves them
beneath spring.jackson.json. This also paves the way for
spring.jackson.cbor and spring.jackson.xml properties for CBOR- and
XML-specific settings should we add auto-configuration for XMLMapper
and/or CBORMapper in the future.

Closes gh-47328
2025-09-26 10:01:59 +01:00
Andy Wilkinson 8c7e0c675f Move Jackson datetime property beneath datatype
Closes gh-47327
2025-09-26 09:04:06 +01:00
Andy Wilkinson 0b601118bd Modularize spring-boot-test
Closes gh-46356
2025-09-25 17:24:12 +01:00
Andy Wilkinson 5348880b69 Modularize spring-boot-test-autoconfigure
This commit modularizes spring-boot-test-autoconfigure. It now
contains only the code that's central to test auto-configuration.
Feature-specific functionality has moved out into -test modules,
some existing and some newly created. For example, `@DataJpaTest` can
now be found in spring-boot-data-jpa-test.

Closes gh-47322
2025-09-25 13:11:35 +01:00
Andy Wilkinson 7979a51f65 Fix Maven Plugin tests on main
See gh-47318
See gh-47319
2025-09-25 08:47:39 +01:00
Phillip Webb 27715dee20 Allow jars to be marked as a development-tool to exclude from uber-jar
Closes gh-47320
2025-09-24 16:38:44 -07:00
Phillip Webb d27aedf92a Switch Maven plugin to exclude optional dependencies by default
Closes gh-47318
2025-09-24 16:34:19 -07:00
Phillip Webb b3c28f1ef3 Merge branch '3.5.x'
Closes gh-47319
2025-09-24 16:32:14 -07:00
Phillip Webb f3b44031a6 Support exclusion of optional dependencies in uber-jars
Update Maven plugin with `<includeOptional>` configuration property that
can be used to toggle if optional dependencies are packages.

For back-compatibility, in 3.5.x the default is `true`.

Fixes gh-25403
2025-09-24 16:27:32 -07:00
Phillip Webb f6da5e7a5c Merge branch '3.5.x' 2025-09-24 16:22:44 -07:00
Phillip Webb 8d63043d9e Merge branch '3.4.x' into 3.5.x 2025-09-24 16:20:42 -07:00
Phillip Webb b43d2f2088 Remove version number from assertions 2025-09-24 14:08:26 -07:00
Andy Wilkinson 0b0b742758 Merge branch '3.5.x'
Closes gh-47312
2025-09-24 15:21:40 +01:00
Andy Wilkinson b61e38bef8 Support launching with a parameterless main method
Fixes gh-47311
2025-09-24 15:16:18 +01:00
Andy Wilkinson 6490b749db Merge branch '3.5.x'
Closes gh-47310
2025-09-24 14:57:27 +01:00
Andy Wilkinson 9a1d9f677b Add support for finding package-private and parameterless main
Fixes gh-47309
2025-09-24 14:54:06 +01:00
Brian Clozel 1cd14c96a5 Configure ProblemDetailJacksonMixin on JsonMapper
Prior to this commit, Spring Boot would use Framework's
`Jackson2ObjectMapperBuilder` to configure the `ObjectMapper` instance.
This builder would configure the `ProblemDetail` mixin automatically.

With the introduction of Jackson 3.x support, Spring Framework removed
its builder in favor of the native Jackson builder. As a result, the
mixin is not registered with the `JsonMapper` aymore.

This commit ensures that the mixin is registered if the `ProblemDetail`
class is present in the classpath.

Closes gh-47298
2025-09-24 14:29:09 +02:00
Andy Wilkinson 51b606e941 Polish 2025-09-24 12:47:09 +01:00
Stéphane Nicoll c5e28c9133 Upgrade to Log4j2 2.25.2
Closes gh-46334
2025-09-24 12:52:00 +02:00
Stéphane Nicoll c4cace3f74 Upgrade to Log4j2 2.25.2
See gh-46334
2025-09-24 12:14:32 +02:00
Stéphane Nicoll b7695200a9 Re-apply the upgrade to Log4j2 2.25.1
See gh-46372
See gh-46334
2025-09-24 12:13:54 +02:00
Stéphane Nicoll 5cec09dd02 Merge pull request #47297 from rstoyanchev
* pr/47297:
  Polish
  Fix renamed link to HTTP Service Clients docs

Closes gh-47297
2025-09-24 11:56:05 +02:00
Stéphane Nicoll cae5a811ad Polish
See gh-47297
2025-09-24 11:48:26 +02:00
rstoyanchev 0afd40fa40 Fix renamed link to HTTP Service Clients docs
See gh-47297
2025-09-24 11:44:47 +02:00
Stéphane Nicoll 3265a2672d Merge branch '3.5.x'
Closes gh-47307
2025-09-24 11:43:34 +02:00
Stéphane Nicoll b6a1c29763 Merge branch '3.4.x' into 3.5.x
Closes gh-47306
2025-09-24 11:43:21 +02:00
Stéphane Nicoll 9a3a3b1b5e Merge pull request #47304 from scottfrederick
* pr/47304:
  Update managed dependency version override examples in documentation

Closes gh-47304
2025-09-24 11:43:10 +02:00
Scott Frederick 6354d802c0 Update managed dependency version override examples in documentation
The examples for overriding a managed dependency version with Maven
were using an outdated version property. This commit updates the
example to use a valid property.

The version override warning from the Gradle plugin docs was also
copied to the Maven docs.

See gh-47304

Signed-off-by: Scott Frederick <scottyfred@gmail.com>
2025-09-24 11:39:49 +02:00
Phillip Webb bc46bb2a24 Drop spring-boot-loader-classic support
Closes gh-45714
2025-09-23 15:31:51 -07:00
Phillip Webb 3b2c8abf50 Restructure buildpack docker package
Closes gh-45284
2025-09-23 13:59:27 -07:00
Phillip Webb dc341edfdd Add config prop to enabled/disable Elasticsearch sniffer
Closes gh-47301

Co-Authored-By: Andy Wilkinson <andy.wilkinson@broadcom.com>
2025-09-23 08:28:51 +01:00
Phillip Webb 3a9ab15696 Reintroduce previous EnvironmentPostProcessor in deprecated form
Restore previous `EnvironmentPostProcessor` in deprecated form to help
lessen upgrade pain.

Closes gh-47272
2025-09-22 11:25:23 -07:00
Andy Wilkinson 8d87586395 Merge branch '3.5.x'
Closes gh-47296
2025-09-22 11:05:13 +01:00
Andy Wilkinson d3bab5f82d Test against Gradle 9.1.0
Closes gh-47295
2025-09-22 11:02:55 +01:00
Phillip Webb 862db41134 Fix typo 2025-09-19 15:09:40 -07:00
Stéphane Nicoll 42cc7775f4 Merge branch '3.5.x'
Closes gh-47283
2025-09-19 17:57:10 +02:00
Stéphane Nicoll 5c95ee798c Use Java 25 GA on CI
Closes gh-47246
2025-09-19 17:56:49 +02:00
Stéphane Nicoll 14703cbafd Revert "Remove mentions of JUnit 4"
This reverts commit 3b98af30f5.

See gh-47228
2025-09-19 17:05:00 +02:00
Stéphane Nicoll 3b98af30f5 Remove mentions of JUnit 4
This commit removes all mentions of JUnit 4 from the Javadoc and
reference documentation. It also harmonizes to simply refers to JUnit.

Closes gh-47228
2025-09-19 15:29:11 +02:00
Moritz Halbritter 8d000e008f Merge branch '3.5.x' 2025-09-19 11:24:32 +02:00
Moritz Halbritter 335a0b76b5 Merge branch '3.4.x' into 3.5.x
Closes gh-47275
2025-09-19 10:38:39 +02:00
Moritz Halbritter 4a1de8534f Add detection for Bitnami Legacy images
This commit also adjusts the tests to use bitnamilegacy images because we have no way to test against the original bitnami images.

Closes gh-46983
2025-09-19 10:18:59 +02:00
Moritz Halbritter 630bb335ea Revert "Disable tests which use Bitnami images"
This reverts commit 24a23c4f72.

See gh-46983
2025-09-19 09:01:01 +02:00
Phillip Webb c1d51f8687 Remove Bitnami support
Closes gh-47267
2025-09-18 14:41:16 -07:00
Phillip Webb 255ea92a57 Add `HttpClientTransport` factory support
Update `JettyClientHttpRequestFactoryBuilder` and
`JettyClientHttpConnectorBuilder` with support for create the
`HttpClientTransport` from a factory function.

Closes gh-47251
2025-09-18 14:02:18 -07:00
Phillip Webb b01dc92233 Add spring-boot-persistence to dependencies POM
Fixes gh-47271
2025-09-18 13:34:22 -07:00
Phillip Webb 2cf854c5b6 Polish 2025-09-18 13:29:47 -07:00
Stéphane Nicoll 4cb2c62230 Merge branch '3.5.x' 2025-09-18 15:15:10 +02:00
Stéphane Nicoll 3e12b5692f Next development version (v3.5.7-SNAPSHOT) 2025-09-18 15:14:59 +02:00
Stéphane Nicoll 2d1c6615ac Revert "Upgrade to Kotlin 2.2.20"
This reverts commit 3dbbd6db8c.

See https://github.com/spring-projects/spring-framework/issues/35487
See gh-47148
2025-09-18 12:47:11 +02:00
Moritz Halbritter e9daa9a0bb Merge branch '3.5.x' 2025-09-18 12:30:16 +02:00
Moritz Halbritter d96267f12b Merge branch '3.4.x' into 3.5.x 2025-09-18 12:30:04 +02:00
Moritz Halbritter 9363f03d8d Next development version (v3.4.11-SNAPSHOT) 2025-09-18 12:29:39 +02:00
Moritz Halbritter aac1845cac Improve null-safety of core/spring-boot
See gh-46926
2025-09-18 11:35:52 +02:00
Moritz Halbritter 7689389349 Use correct nullable annotations in smoke tests
See gh-46926
2025-09-18 11:35:51 +02:00
Andy Wilkinson f81f2decf1 Revert "Upgrade to Jakarta XML Bind 4.0.4"
This reverts commit 602c149e7f.

Closes gh-47240
2025-09-18 08:04:51 +01:00
Andy Wilkinson cb0e868472 Merge branch '3.5.x' 2025-09-18 08:03:58 +01:00
Andy Wilkinson a465cdbf66 Revert "Upgrade to Jakarta XML Bind 4.0.4"
This reverts commit a7a05491fc.

See gh-47242
2025-09-18 08:03:31 +01:00
Andy Wilkinson 391e745840 Merge branch '3.4.x' into 3.5.x 2025-09-18 08:02:58 +01:00
Andy Wilkinson ad9a7eecb2 Revert "Upgrade to Jakarta XML Bind 4.0.4"
This reverts commit a3613927c9.

See gh-47237
2025-09-18 08:02:17 +01:00
Moritz Halbritter c417d2e0a4 Merge branch '3.5.x' 2025-09-18 08:23:02 +02:00
Moritz Halbritter 66ba91876a Document support for Java 25
Closes gh-47245
2025-09-18 08:22:56 +02:00
Stéphane Nicoll 73b5e6a4d1 Merge branch '3.5.x' 2025-09-18 03:44:07 +02:00
Stéphane Nicoll d9fce46848 Fix checkstyle 2025-09-18 03:43:59 +02:00
Stéphane Nicoll 2e76cda4ba Upgrade to Flyway 11.13.1
Closes gh-47261
2025-09-18 03:36:34 +02:00
Stéphane Nicoll 943f0ae257 Merge branch '3.4.x' into 3.5.x 2025-09-18 03:28:00 +02:00
Stéphane Nicoll 43fee1678a Upgrade to Spring Batch 5.2.3
Closes gh-47077
2025-09-18 03:27:35 +02:00
Stéphane Nicoll 11de7d1ca6 Upgrade to Spring Batch 5.2.3
Closes gh-47087
2025-09-18 03:26:55 +02:00
Phillip Webb 6642bf7beb Deprecate JUnit 4 OutputCaptureRule
Closes gh-47256
2025-09-17 16:40:32 -07:00
Phillip Webb fc68b001d8 Remove `isImmutable` and `getPrefix` from `OriginLookup`
Drop `isImmutable` and `getPrefix` from `OriginLookup` since
they're not really Origin concerns. Now that `env` is a
foundational layer we can add a dedicated `PropertySourceInfo`
interface and add that to the `o.s.b.env` package without
creating a package tangle.

Closes gh-45547
2025-09-17 14:57:33 -07:00
Phillip Webb 24c25aeae4 Tighten Checkstyle import-control rules for foundation layers
Update rules to ensure foundational layers don't depend on the
`org.springframework.boot` package.

Closes gh-47232
2025-09-17 14:57:32 -07:00
Phillip Webb 1acda68d39 Relocate `AnsiOutputApplicationListener`
Move `AnsiOutputApplicationListener` from `o.s.b.context.config`
to `o.s.b.support` since it's more of a supporting class than a
context concern.

See gh-47232
2025-09-17 14:57:32 -07:00
Phillip Webb c53ea0a08c Relocate DefaultPropertiesPropertySource to `env`
Move `DefaultPropertiesPropertySource` from
`org.springframework.boot` to `org.springframework.boot.env` since
it's not directly tied to `SpringApplication`.

See gh-47232
2025-09-17 14:57:32 -07:00
Phillip Webb 6c84674c33 Relocate `EnvironmentPostProcessor` and implementations out of `env`
Move the `EnvironmentPostProcessor` from `org.springframework.boot.env`
to `org.springframework.boot` so that we can make the `env` package
foundational.

Most `EnvironmentPostProcessor` implementation has also been relocated
to a new `org.springframework.boot.support` package.

See gh-47232
2025-09-17 14:57:10 -07:00
Phillip Webb 4ebf09ad12 Restructure bootstrap classes to a foundational layer
Move bootstrap code from `org.springframework.boot` to
`org.springframework.boot.bootstrap` and make them a foundational
layer.

This move helps reduce `org.springframework.boot.context.config`
dependencies to `org.springframework.boot`.

See gh-47232
2025-09-17 14:57:10 -07:00
Stéphane Nicoll b02371f763 Merge branch '3.5.x' 2025-09-17 18:13:12 +02:00
Stéphane Nicoll 853c6586ee Merge branch '3.4.x' into 3.5.x 2025-09-17 18:13:01 +02:00
Stéphane Nicoll a2b680a0e1 Upgrade to Spring Security 6.4.11
Closes gh-47258
2025-09-17 18:12:51 +02:00
Stéphane Nicoll fb452160e9 Upgrade to Spring Security 6.5.5
Closes gh-47257
2025-09-17 18:05:56 +02:00
Stéphane Nicoll 4be3dc2262 Merge pull request #47244 from quaff
* pr/47244:
  Polish contribution
  Add support for SimpleTaskExecutor#cancel-remaining-tasks-on-close

Closes gh-47244
2025-09-17 16:17:14 +02:00
Stéphane Nicoll ae1e700df9 Polish contribution
See gh-47244
2025-09-17 16:04:22 +02:00
Yanming Zhou 95305691ab Add support for SimpleTaskExecutor#cancel-remaining-tasks-on-close
See https://github.com/spring-projects/spring-framework/issues/35372
See gh-47244

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
2025-09-17 16:04:03 +02:00
Stéphane Nicoll bc60749949 Upgrade to Spring RESTDocs 4.0.0-M3
Closes gh-47007
2025-09-17 15:44:26 +02:00
Stéphane Nicoll 6d13034455 Upgrade to Spring Batch 6.0.0-M3
Closes gh-47001
2025-09-17 15:44:26 +02:00
Stéphane Nicoll 2b6a0d533e Remove unused code
Closes gh-47235
2025-09-17 15:37:25 +02:00
Stéphane Nicoll 35bceeead2 Merge branch '3.5.x'
Closes gh-47254
2025-09-17 15:36:10 +02:00
Stéphane Nicoll 209d4ab5bc Merge branch '3.4.x' into 3.5.x
Closes gh-47253
2025-09-17 15:27:05 +02:00
Stéphane Nicoll 6f18f1b881 Document default value of server.tomcat.resource.cache-ttl
Closes gh-47252
2025-09-17 15:20:19 +02:00
Stéphane Nicoll 2e8eb526bb Merge pull request #47229 from kzittritsch
* pr/47229:
  Polish contribution
  Add configuration property for Tomcat's static resource cache max size

Closes gh-47229
2025-09-17 15:06:50 +02:00
Stéphane Nicoll aebecb3007 Polish contribution
See gh-47229
2025-09-17 15:04:35 +02:00
Kevin Zittritsch 2314d15430 Add configuration property for Tomcat's static resource cache max size
See gh-47229

Signed-off-by: Kevin Zittritsch <kevin.zittritsch@vtinfo.com>
2025-09-17 15:02:32 +02:00
Stéphane Nicoll cdd39bafd7 Introduce spring-boot-persistence
This commit adds a spring-boot-persistence module with data technology
independent features. This provides a better home for EntityScan and
PersistenceExceptionTranslationAutoConfiguration.

Closes gh-45328
2025-09-17 14:42:22 +02:00
Moritz Halbritter b71d6475c3 Merge branch '3.5.x'
Closes gh-47248
2025-09-17 10:43:25 +02:00
Moritz Halbritter 7e28314f30 Document support for Java 25
Closes gh-47245
2025-09-17 10:43:11 +02:00
Stéphane Nicoll 780adbf61c Merge pull request #47234 from quaff
* pr/47234:
  Fix typo

Closes gh-47234
2025-09-17 09:11:01 +02:00
Yanming Zhou 612714f35e Fix typo
See gh-47234

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
2025-09-17 09:10:26 +02:00
Stéphane Nicoll 0c53038904 Merge branch '3.5.x' 2025-09-17 09:02:28 +02:00
Stéphane Nicoll fae6b0aea0 Merge branch '3.4.x' into 3.5.x 2025-09-17 09:02:13 +02:00
Stéphane Nicoll 2e09167986 Upgrade to XmlUnit2 2.10.4
Closes gh-47241
2025-09-17 08:51:14 +02:00
Stéphane Nicoll 67da54e634 Upgrade to Spring Pulsar 2.0.0-M3
Closes gh-47006
2025-09-17 08:51:14 +02:00
Stéphane Nicoll e20437195e Upgrade to Spring Integration 7.0.0-M3
Closes gh-47010
2025-09-17 08:51:14 +02:00
Stéphane Nicoll 748bba378a Upgrade to Spring GraphQL 2.0.0-M3
Closes gh-47009
2025-09-17 08:51:14 +02:00
Stéphane Nicoll 602c149e7f Upgrade to Jakarta XML Bind 4.0.4
Closes gh-47240
2025-09-17 08:51:14 +02:00
Stéphane Nicoll 297b4dfe70 Upgrade to Flyway 11.13.0
Closes gh-47239
2025-09-17 08:51:14 +02:00
Stéphane Nicoll 53e4f172b7 Upgrade to XmlUnit2 2.10.4
Closes gh-47243
2025-09-17 08:18:46 +02:00
Stéphane Nicoll a7a05491fc Upgrade to Jakarta XML Bind 4.0.4
Closes gh-47242
2025-09-17 08:18:42 +02:00
Stéphane Nicoll a9319d6047 Upgrade to XmlUnit2 2.10.4
Closes gh-47238
2025-09-17 08:16:15 +02:00
Stéphane Nicoll a3613927c9 Upgrade to Jakarta XML Bind 4.0.4
Closes gh-47237
2025-09-17 08:16:11 +02:00
Moritz Halbritter 7ada32ca77 Make ConfigDataLocation.of non-nullable
Update `ConfigDataLocation.of` to return an empty location rather than
null. Filtering of empty elements now happens in `ConfigDataProperties`
and `ConfigDataEnvironment` which allows us to simplify
`ConfigDataLocationBindHandler`.

Closes gh-47221

Co-authored-by: Phillip Webb <phil.webb@broadcom.com>
2025-09-16 12:06:36 -07:00
Stéphane Nicoll 51eb4124ee Merge branch '3.5.x' 2025-09-16 20:36:54 +02:00
Stéphane Nicoll b7e1210159 Merge branch '3.4.x' into 3.5.x 2025-09-16 20:34:16 +02:00
Stéphane Nicoll bfeceda28a Upgrade to Spring Pulsar 1.2.10
Closes gh-47093
2025-09-16 20:32:58 +02:00
Stéphane Nicoll d786aa4383 Upgrade to Spring Integration 6.5.2
Closes gh-47091
2025-09-16 20:32:58 +02:00
Stéphane Nicoll 02d73ea4f7 Upgrade to Spring GraphQL 1.4.2
Closes gh-47090
2025-09-16 20:32:58 +02:00
Stéphane Nicoll f374e38f6a Upgrade to Spring Pulsar 1.2.10
Closes gh-47082
2025-09-16 20:32:47 +02:00
Stéphane Nicoll 6c0118f2b0 Upgrade to Spring Integration 6.4.7
Closes gh-47080
2025-09-16 20:32:47 +02:00
Phillip Webb ff83fea96e Adapt to upstream Spring Batch changes
See gh-47001
2025-09-16 11:32:15 -07:00
Phillip Webb b439c07153 Document HTTP Service client support
Closes gh-47179
2025-09-16 09:09:10 -07:00
Phillip Webb 74a5d13fe9 Polish HTTP Service client auto-configuration 2025-09-16 09:08:34 -07:00
Moritz Halbritter 009bd441f6 Improve null-safety of core/spring-boot
See gh-46926
2025-09-16 13:52:14 +02:00
Moritz Halbritter a6b4400de7 Improve null-safety of core/spring-boot-docker-compose
See gh-46926
2025-09-16 13:52:13 +02:00
Moritz Halbritter 8c0018d739 Further improve null-safety of JsonContentAssert
See gh-46926
2025-09-16 13:42:24 +02:00
Moritz Halbritter 3bfcfaa795 Improve null-safety of JsonContentAssert
See gh-46926
2025-09-16 11:55:16 +02:00
Moritz Halbritter 96afc3f944 Introduce specialized interfaces in PropertiesConfigAdapter
Closes gh-47226
2025-09-16 10:18:21 +02:00
Stéphane Nicoll 0e396efaea Merge branch '3.5.x'
Closes gh-47225
2025-09-16 08:56:03 +02:00
Stéphane Nicoll a8161a5e9d Merge branch '3.4.x' into 3.5.x
Closes gh-47224
2025-09-16 08:54:18 +02:00
Stéphane Nicoll d157740b26 Merge pull request #47210 from dependabot[bot]
* pr/47210:
  Polish "Bump jfrog/setup-jfrog-cli from 4.6.0 to 4.6.1"
  Bump jfrog/setup-jfrog-cli from 4.6.0 to 4.6.1

Closes gh-47210
2025-09-16 08:54:06 +02:00
Stéphane Nicoll 445fc182fb Polish "Bump jfrog/setup-jfrog-cli from 4.6.0 to 4.6.1"
See gh-47210
2025-09-16 08:53:16 +02:00
dependabot[bot] 4503cac003 Bump jfrog/setup-jfrog-cli from 4.6.0 to 4.6.1
Bumps [jfrog/setup-jfrog-cli](https://github.com/jfrog/setup-jfrog-cli) from 4.6.0 to 4.6.1.
- [Release notes](https://github.com/jfrog/setup-jfrog-cli/releases)
- [Commits](751c204e8e...88e9eba31c)

---
updated-dependencies:
- dependency-name: jfrog/setup-jfrog-cli
  dependency-version: 4.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

See gh-47210

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-16 08:52:40 +02:00
Stéphane Nicoll 5a9f5a9b68 Merge branch '3.5.x'
Closes gh-47223
2025-09-16 08:49:44 +02:00
Stéphane Nicoll 10fc3fd8f8 Merge branch '3.4.x' into 3.5.x
Closes gh-47222
2025-09-16 08:49:28 +02:00
Stéphane Nicoll 328f4c5e49 Merge pull request #47209 from dependabot[bot]
* pr/47209:
  Polish "Bump gradle/actions from 4.4.2 to 4.4.3"
  Bump gradle/actions from 4.4.2 to 4.4.3

Closes gh-47209
2025-09-16 08:49:22 +02:00
Stéphane Nicoll b2848d6408 Polish "Bump gradle/actions from 4.4.2 to 4.4.3"
See gh-47209
2025-09-16 08:48:59 +02:00
dependabot[bot] 350beccbc0 Bump gradle/actions from 4.4.2 to 4.4.3
Bumps [gradle/actions](https://github.com/gradle/actions) from 4.4.2 to 4.4.3.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](017a9effdb...ed408507ea)

---
updated-dependencies:
- dependency-name: gradle/actions
  dependency-version: 4.4.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

See gh-47209

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-16 08:48:08 +02:00
Moritz Halbritter 641b72db65 Make SanitizableData.key non-nullable
Closes gh-47220
2025-09-16 08:48:01 +02:00
Phillip Webb eeac38b70b Make 'org.springframework.boot.ssl` a foundational package
Closes gh-47219
2025-09-15 20:44:30 -07:00
Phillip Webb b9be1179a2 Update checkstyle import-control.xml following restructure
Closes gh-47218
2025-09-15 20:18:25 -07:00
Phillip Webb 8651e971ea Replace `TomcatStarter` to break servlet dependency
Replace `TomcatStarter` with a `DeferredStartupExceptions` interface
to break the direct dependency on `Servlet`.

Closes gh-44325
2025-09-15 20:03:05 -07:00
Stéphane Nicoll 111418fbc5 Merge branch '3.5.x' 2025-09-16 02:54:23 +02:00
Stéphane Nicoll 2215e64a79 Merge branch '3.4.x' into 3.5.x 2025-09-16 02:54:12 +02:00
Stéphane Nicoll 08ce5b0ccd Upgrade to Spring Security 7.0.0-M3
Closes gh-47199
2025-09-16 02:44:43 +02:00
Stéphane Nicoll 91d30115e5 Upgrade to Spring Kafka 4.0.0-M5
Closes gh-47004
2025-09-16 02:44:43 +02:00
Stéphane Nicoll 0c53233128 Upgrade to Spring AMQP 4.0.0-M5
Closes gh-46999
2025-09-16 02:44:43 +02:00
Stéphane Nicoll f22e4853c3 Upgrade to Hibernate 7.1.1.Final
Closes gh-47217
2025-09-16 02:44:43 +02:00
Stéphane Nicoll 9b83de2351 Upgrade to Spring Security 6.5.4
Closes gh-47202
2025-09-16 02:44:12 +02:00
Stéphane Nicoll 83468d4cd8 Upgrade to Spring Kafka 3.3.10
Closes gh-47092
2025-09-16 02:44:12 +02:00
Stéphane Nicoll 26c3ec1020 Upgrade to Spring AMQP 3.2.7
Closes gh-47086
2025-09-16 02:44:12 +02:00
Stéphane Nicoll 3e0a7869e6 Upgrade to Hibernate 6.6.29.Final
Closes gh-47216
2025-09-16 02:44:12 +02:00
Stéphane Nicoll 27d6579573 Upgrade to Spring Security 6.4.10
Closes gh-47201
2025-09-16 02:44:04 +02:00
Stéphane Nicoll 8a75b23e62 Upgrade to Spring Kafka 3.3.10
Closes gh-47081
2025-09-16 02:44:03 +02:00
Stéphane Nicoll 0d5482d3b6 Upgrade to Spring AMQP 3.2.7
Closes gh-47076
2025-09-16 02:44:03 +02:00
Stéphane Nicoll 347381419d Upgrade to Hibernate 6.6.29.Final
Closes gh-47215
2025-09-16 02:44:03 +02:00
Phillip Webb 336e7de9fc Add `with` methods to apply pre-packaged customizations
Add `with` methods to `HttpRequestFactoryBuilder` and
`ClientHttpConnectorBuilder` that operate in a similar way to the
`WebClient.Builder.apply(...)` method.

Closes gh-47205
2025-09-15 16:45:10 -07:00
Phillip Webb e9c08b8dcc Merge branch '3.5.x'
Closes gh-47214
2025-09-15 13:59:16 -07:00
Phillip Webb 0ad349acea Merge branch '3.4.x' into 3.5.x
Closes gh-47213
2025-09-15 13:58:40 -07:00
Phillip Webb e2ecc61ca8 Refactor CacheCondition to remove multiple casts
Closes gh-47208
2025-09-15 13:57:55 -07:00
Stéphane Nicoll 1de09fb81d Adapt assertion for availability probes being available by default
See gh-22825
2025-09-15 16:26:02 +02:00
Stéphane Nicoll ed1ee79aef Share JSON library consistently
This commit shades the use of 'com.vaadin.external.google:android-json'
in the three modules that use it. The configuration processor already
did that and this commit does the same for configuration-metadata and
the CLI.

As a result of this commit, 'android-json' is not used nor managed
internally.

Closes gh-45504
2025-09-15 16:17:21 +02:00
Stéphane Nicoll 4f18e5f1a8 Reinstate GraphQL tests
Closes gh-45392
2025-09-15 13:50:33 +02:00
Stéphane Nicoll 7ca0323878 Adapt assertion for availability probes being available by default
See gh-22825
2025-09-15 12:48:58 +02:00
Stéphane Nicoll 83ad15ba3b Enable liveness and readiness by default
Closes gh-22825
2025-09-15 11:33:34 +02:00
Stéphane Nicoll 8f0d87a964 Rename spring-boot-starter-aop to spring-boot-starter-aspectj
Closes gh-42948
2025-09-15 11:19:05 +02:00
Stéphane Nicoll d183ab4b17 Start building against Spring Batch 6.0.0-M3 snaphots (again)
This reverts commit a0b1df68d5.

See gh-47001
2025-09-15 09:49:30 +02:00
Stéphane Nicoll d8d47a0441 Merge branch '3.5.x' 2025-09-14 10:13:01 +02:00
Stéphane Nicoll 3dbc767ef9 Merge branch '3.4.x' into 3.5.x 2025-09-14 10:12:55 +02:00
Stéphane Nicoll da4971e4ac Start building against Spring Security 6.5.4 snapshots
See gh-47202
2025-09-14 07:29:21 +02:00
Stéphane Nicoll eb5f7a2c0a Start building against Spring Security 6.4.10 snapshots
See gh-47201
2025-09-14 07:28:44 +02:00
Stéphane Nicoll 07c18ea9f1 Migrate dependency management for Spring Authorization Server
With Spring Authorization Server migrating to Spring Security proper as
of v7, this commit removes dependency management for it and adapt to
changes in recent snapshots

Closes gh-47174
2025-09-14 06:43:54 +02:00
Stéphane Nicoll b3c38a30ae Start building against Spring Security 7.0.0-M3 snapshots
See gh-47199
2025-09-13 18:39:20 +02:00
Stéphane Nicoll dec994ff88 Upgrade to Spring Data Bom 2025.1.0-M6
Closes gh-47002
2025-09-13 08:51:14 +02:00
Stéphane Nicoll fb078a7b6e Upgrade to Maven Surefire Plugin 3.5.4
Closes gh-47197
2025-09-13 08:51:14 +02:00
Stéphane Nicoll 84a403b540 Upgrade to Maven Shade Plugin 3.6.1
Closes gh-47196
2025-09-13 08:51:10 +02:00
Stéphane Nicoll b38e719557 Upgrade to Maven Failsafe Plugin 3.5.4
Closes gh-47195
2025-09-13 08:51:06 +02:00
Stéphane Nicoll bd4475d73d Merge branch '3.5.x' 2025-09-13 08:50:07 +02:00
Stéphane Nicoll 996aaf62be Merge branch '3.4.x' into 3.5.x 2025-09-13 08:49:59 +02:00
Stéphane Nicoll 8e7b781d8d Upgrade to Tomcat 10.1.46
Closes gh-47194
2025-09-13 08:32:42 +02:00
Stéphane Nicoll 45775d4481 Upgrade to Spring Data Bom 2025.0.4
Closes gh-47088
2025-09-13 08:31:30 +02:00
Stéphane Nicoll 43972621ae Upgrade to R2DBC MSSQL 1.0.3.RELEASE
Closes gh-47193
2025-09-13 08:31:30 +02:00
Stéphane Nicoll 1cb1727eff Upgrade to Maven Surefire Plugin 3.5.4
Closes gh-47192
2025-09-13 08:31:26 +02:00
Stéphane Nicoll 42203b2d19 Upgrade to Maven Shade Plugin 3.6.1
Closes gh-47191
2025-09-13 08:31:22 +02:00
Stéphane Nicoll 681336be3a Upgrade to Maven Failsafe Plugin 3.5.4
Closes gh-47190
2025-09-13 08:31:18 +02:00
Stéphane Nicoll c3262719b2 Upgrade to MariaDB 3.5.6
Closes gh-47189
2025-09-13 08:31:14 +02:00
Stéphane Nicoll 4f31950e99 Upgrade to Jakarta Activation 2.1.4
Closes gh-47188
2025-09-13 08:31:10 +02:00
Stéphane Nicoll 1496183f54 Upgrade to HikariCP 6.3.3
Closes gh-47187
2025-09-13 08:31:06 +02:00
Stéphane Nicoll 1e79cb1baf Upgrade to Tomcat 10.1.46
Closes gh-47186
2025-09-13 08:30:40 +02:00
Stéphane Nicoll e865648d90 Upgrade to Spring Data Bom 2024.1.10
Closes gh-47078
2025-09-13 08:29:18 +02:00
Stéphane Nicoll 0a67bbe626 Upgrade to R2DBC MSSQL 1.0.3.RELEASE
Closes gh-47185
2025-09-13 08:29:17 +02:00
Stéphane Nicoll b268a938f2 Upgrade to Maven Surefire Plugin 3.5.4
Closes gh-47184
2025-09-13 08:29:14 +02:00
Stéphane Nicoll b14e5d8d08 Upgrade to Maven Shade Plugin 3.6.1
Closes gh-47183
2025-09-13 08:29:10 +02:00
Stéphane Nicoll 7caf07bd5c Upgrade to Maven Failsafe Plugin 3.5.4
Closes gh-47182
2025-09-13 08:29:06 +02:00
Stéphane Nicoll 04b1b1ca7c Upgrade to Jakarta Activation 2.1.4
Closes gh-47181
2025-09-13 08:29:02 +02:00
Phillip Webb a0b1df68d5 Temporarily revert to Spring Batch 6.0.0-M2
The latest snapshots are unfortunately breaking the build.

See gh-47001
2025-09-12 11:13:38 -07:00
Brian Clozel a6cf0365ce Revisit Kotlin Serialization integration
This commit removes the "kotlin-serialization" option from the
`spring.http.converters.preferred-json-mapper` and configures the kotlin
serialization http message converter ahead of the preferred JSON
converter.

This effectively makes Kotlin Serialization a converter that is
considered first for JSON support, and then Jackson/Jsonb/Gson is
considered as fallback.

Closes gh-47178
2025-09-12 18:05:23 +02:00
Andy Wilkinson 2dc80b4047 Move Prometheus code from s-b-actuator to s-b-micrometer-metrics
Closes gh-47175
2025-09-12 15:19:34 +01:00
Stéphane Nicoll 4f6243fc2c Upgrade to Spring LDAP 4.0.0-M3
Closes gh-47005
2025-09-12 13:38:02 +02:00
Stéphane Nicoll 6fba2c2a35 Upgrade to Elasticsearch Client 9.1.4
Closes gh-47173
2025-09-12 13:38:02 +02:00
Stéphane Nicoll 2532ae7e22 Adapt to snapshot change in Spring Data MongoDB
See https://github.com/spring-projects/spring-data-mongodb/issues/5054
See gh-47041
2025-09-12 11:41:24 +02:00
Stéphane Nicoll 0ef1df58ce Upgrade to Spring HATEOAS 3.0.0-M5
Closes gh-47003
2025-09-12 11:41:24 +02:00
Stéphane Nicoll 9daa60d97a Upgrade to R2DBC MSSQL 1.0.3.RELEASE
Closes gh-47171
2025-09-12 11:41:24 +02:00
Stéphane Nicoll 629777b7c7 Upgrade to Pulsar 4.1.0
Closes gh-47170
2025-09-12 11:41:23 +02:00
Stéphane Nicoll 9ffe550172 Upgrade to MongoDB 5.6.0
Closes gh-47169
2025-09-12 11:41:23 +02:00
Stéphane Nicoll cb750d2fc5 Upgrade to MariaDB 3.5.6
Closes gh-47168
2025-09-12 11:41:23 +02:00
Moritz Halbritter 39318d1e65 Merge branch '3.5.x'
Closes gh-47167
2025-09-12 11:27:56 +02:00
Moritz Halbritter 700904cfe2 Merge branch '3.4.x' into 3.5.x
Closes gh-47166
2025-09-12 11:10:45 +02:00
Moritz Halbritter 507f868fe9 Remove quoting for system properties
Before this commit, system properties with a value has been quoted all the time.
This is fine as long if the resulting string is passed into the RunArguments(String) constructor, which then parses it again into a String[].
This isn't fine if they are added to ProcessBuilder.command, because then quoting is unnecessary.

This commit also fixes the unnecessary Map -> String -> String[] parsing by adding the entries directly into the array.

Closes gh-46555
2025-09-12 10:06:16 +02:00
Stéphane Nicoll 08afe86de0 Merge branch '3.5.x' 2025-09-11 14:48:12 +02:00
Stéphane Nicoll cf95bc19a6 Merge branch '3.4.x' into 3.5.x 2025-09-11 14:48:05 +02:00
Stéphane Nicoll f14544d847 Upgrade to Spring Framework 7.0.0-M9
Closes gh-47008
2025-09-11 14:44:38 +02:00
Stéphane Nicoll f0a449d43d Upgrade to Jakarta Activation 2.1.4
Closes gh-47161
2025-09-11 14:44:38 +02:00
Stéphane Nicoll ec0aca4846 Upgrade to Spring Framework 6.2.11
Closes gh-47089
2025-09-11 14:26:01 +02:00
Stéphane Nicoll 2d53253db8 Upgrade to jOOQ 3.19.26
Closes gh-47160
2025-09-11 14:26:01 +02:00
Stéphane Nicoll 4951451f9d Upgrade to Jetty 12.0.27
Closes gh-47159
2025-09-11 14:25:57 +02:00
Stéphane Nicoll 540161b189 Upgrade to Gson 2.13.2
Closes gh-47158
2025-09-11 14:25:51 +02:00
Stéphane Nicoll b5405d2fe9 Upgrade to Spring Framework 6.2.11
Closes gh-47079
2025-09-11 14:25:38 +02:00
Stéphane Nicoll ac4ea31895 Upgrade to jOOQ 3.19.26
Closes gh-47157
2025-09-11 14:25:38 +02:00
Stéphane Nicoll 0aa40377e1 Upgrade to Jetty 12.0.27
Closes gh-47156
2025-09-11 14:25:34 +02:00
Stéphane Nicoll c72475f3e7 Upgrade to MongoDB 5.6.0-alpha0
Closes gh-47155
2025-09-11 12:18:16 +02:00
Stéphane Nicoll 1a18d57a9b Upgrade to jOOQ 3.19.26
Closes gh-47154
2025-09-11 12:18:12 +02:00
Stéphane Nicoll 0099d7419e Upgrade to Gson 2.13.2
Closes gh-47153
2025-09-11 12:18:08 +02:00
Stéphane Nicoll bdbbcec6fa Merge pull request #46533 from academey
* pr/46533:
  Polish "Exclude spring-boot-devtools from AOT processing with Maven"
  Exclude spring-boot-devtools from AOT processing with Maven

Closes gh-46533
2025-09-11 10:59:01 +02:00
Stéphane Nicoll 4498b46512 Polish "Exclude spring-boot-devtools from AOT processing with Maven"
See gh-46533
2025-09-11 10:52:05 +02:00
academey 99cf0e3cfe Exclude spring-boot-devtools from AOT processing with Maven
Previously, spring-boot-devtools was only excluded from native images
built with Gradle but not with Maven. This inconsistency meant that
Maven builds would include devtools in the AOT processing classpath
and in the native image, causing build failures.

This commit harmonizes the situation and excludes devtools in a similar
fashion with Maven.

See gh-46533

Signed-off-by: academey <academey@gmail.com>
2025-09-11 10:52:04 +02:00
Brian Clozel 6a55d7b49b Polishing contribition
Closes gh-46546
2025-09-10 20:53:40 +02:00
Dmitry Sulman c7621bb6be Introduce Kotlin Serialization auto-configuration
See gh-46546

Signed-off-by: Dmitry Sulman <dmitry.sulman@gmail.com>
2025-09-10 20:53:40 +02:00
Andy Wilkinson 4b0b9e5e36 Merge branch '3.5.x'
Closes gh-47151
2025-09-10 17:16:52 +01:00
Andy Wilkinson 3701741d0a Merge branch '3.4.x' into 3.5.x
Closes gh-47150
2025-09-10 17:16:28 +01:00
Andy Wilkinson a2b906ba51 Correct import in WebMvcTestSaml2Tests
Closes gh-47149
2025-09-10 17:11:21 +01:00
Stéphane Nicoll 3dbbd6db8c Upgrade to Kotlin 2.2.20
Closes gh-47148
2025-09-10 16:33:10 +02:00
Andy Wilkinson 652401b76c Polish message converter references relating to Jackson 3 upgrade
See gh-45535
2025-09-10 15:23:22 +01:00
Stéphane Nicoll d7c482aa16 Replace @OptionalParameter with JSpecify's @Nullable
This commit removes OptionalParameter in favor of the nullness support
introduced in Spring Framework 7. The parameter of an action can now
be flagged as optional using JSpecify's @Nullable, and simplifies the
setup for those who are using JSpecify as only a single annotation is
required.

Closes gh-45390
2025-09-10 15:01:43 +02:00
Stéphane Nicoll ee83ff5f6a Revert "Only support `@OptionalParameter` annotation with endpoint methods"
This reverts commit 450eb48303.

See gh-47136
2025-09-10 14:31:35 +02:00
Andy Wilkinson d0c742bc7b Merge branch '3.5.x'
Closes gh-47146
2025-09-10 12:51:51 +01:00
Andy Wilkinson fb56a107ce Merge branch '3.4.x' into 3.5.x
Closes gh-47145
2025-09-10 12:35:55 +01:00
Andy Wilkinson 11cbb6aff2 Relocate tests that don't need to be in test-autoconfigure
Closes gh-47144
2025-09-10 12:35:43 +01:00
Stéphane Nicoll b0ab4f8102 Merge branch '3.5.x' 2025-09-10 13:11:19 +02:00
Stéphane Nicoll 9924cb87db Merge branch '3.4.x' into 3.5.x 2025-09-10 13:11:13 +02:00
Stéphane Nicoll 1cf51e1ca5 Upgrade to Reactor Bom 2025.0.0-M7
Closes gh-46998
2025-09-10 13:11:04 +02:00
Stéphane Nicoll c34ef83314 Upgrade to Reactor Bom 2024.0.10
Closes gh-47085
2025-09-10 13:09:35 +02:00
Stéphane Nicoll f159701a64 Upgrade to Reactor Bom 2024.0.10
Closes gh-47075
2025-09-10 13:09:31 +02:00
Andy Wilkinson d3a9bc54a7 Merge branch '3.5.x'
Closes gh-47143
2025-09-10 11:18:42 +01:00
Andy Wilkinson 1b00d38fda Only apply non-null Groovy Template properties
Previously, properties were always applied even when they had a null
value. When using the property defaults, this would leave the
GroovyMarkupConfigurer bean with null values for autoIndentString,
locale, and newLineString. The null values could cause problems at
runtime, for example an NPE when Groovy Templates tries to call
toString on the null newLineString.

Closes gh-47139
2025-09-10 10:53:19 +01:00
Brian Clozel 4d0cce7791 Prevent IOException in CheckAutoConfigurationClasses
This commit ensures that before walking a source root, the Gradle plugin
checks that it exists. This situation can only happen when a Gradle
plugin adds new roots to SourceSets, but there are no sources in them.

Fixes gh-47142
2025-09-10 11:43:54 +02:00
Phillip Webb 450eb48303 Only support `@OptionalParameter` annotation with endpoint methods
Remove `@Nullable` support for optional endpoint method parameters in
favor of only supporting `@OptionalParameter`. The annotation processor
now also only supports `@OptionalParameter` detection.

Closes gh-47136
2025-09-09 13:00:50 -07:00
Andy Wilkinson e764878b6d Address some missed parts of the Jackson 3 migration
See gh-45535
2025-09-09 18:09:35 +01:00
Andy Wilkinson c86eb5298a Add configuration property for Jackson's DateTimeFeature
See gh-45535
2025-09-09 17:58:16 +01:00
Stéphane Nicoll ee87246974 Remove dependency management for Spring Retry
With Spring Retry being superseded by the core framework support, this
commit removes dependency management for Spring Retry.

Closes gh-46309
2025-09-09 17:02:23 +02:00
Stéphane Nicoll 7a73925c90 Adapt AMQP auto-configuration to core retry semantics
This commit adapts the auto-configuration of AMQP message listeners
and RabbitTemplate moving away from Spring Retry.

One important change is that message listeners now only require a
RetryPolicy. To make the callback explicit, two customizers have been
introduced to clearly separate the scope of the customization:

* RabbitTemplateRetrySettingsCustomizer for the client-side and usage
of RabbitTemplate.
* RabbitListenerRetrySettingsCustomizer for message listeners.

Closes gh-47122
2025-09-09 16:55:34 +02:00
Stéphane Nicoll 4dc1b644fe Adapt to change in MongoDB's BigDecimal and UUID default representations
See https://github.com/spring-projects/spring-data-mongodb/issues/5037
See gh-47041
2025-09-09 16:25:26 +02:00
Moritz Halbritter 0fc1a40f3b Polish nullability annotations
See gh-46926
2025-09-09 15:08:44 +02:00
Moritz Halbritter 2e8428b760 Remove NullAway suppressions where possible
See gh-46926
2025-09-09 12:02:19 +02:00
Moritz Halbritter 634933b3e5 Polish nullability annotations
See gh-46926
2025-09-09 11:34:35 +02:00
Stéphane Nicoll 5ca904c17a Adapt to latest change in Spring Batch snapshots
See https://github.com/spring-projects/spring-batch/issues/4971
2025-09-09 10:36:55 +02:00
Stéphane Nicoll 5da4913122 Adapt Kafka auto-configuration to core retry semantics
This commit adapts the auto-configuration of retry topics to Spring
Kafka moving away from Spring Retry. The random property has been
removed in favor of the new jitter value and default values have been
made more explicit.

Closes gh-47125
2025-09-09 10:27:43 +02:00
Stéphane Nicoll e13e1a6efc Upgrade to OpenTelemetry 1.54.0
Closes gh-47133
2025-09-09 09:52:48 +02:00
Stéphane Nicoll 59e3e241e4 Upgrade to Netty 4.2.6.Final
Closes gh-47132
2025-09-09 09:52:47 +02:00
Stéphane Nicoll bc0285b53d Upgrade to Micrometer Tracing 1.6.0-M3
Closes gh-46997
2025-09-09 09:52:47 +02:00
Stéphane Nicoll a4240a86a0 Upgrade to Micrometer 1.16.0-M3
Closes gh-46996
2025-09-09 09:52:47 +02:00
Stéphane Nicoll 3e0e7cde68 Upgrade to Jetty 12.1.1
Closes gh-47131
2025-09-09 09:52:47 +02:00
Stéphane Nicoll 6574dae603 Upgrade to Jackson Bom 3.0.0-rc9
Closes gh-47130
2025-09-09 09:24:24 +02:00
Stéphane Nicoll 43e0527a6a Upgrade to Couchbase Client 3.9.1
Closes gh-47129
2025-09-09 09:24:20 +02:00
Stéphane Nicoll f33c1e6f52 Merge branch '3.5.x' 2025-09-09 09:21:25 +02:00
Stéphane Nicoll 3ca81e3227 Merge branch '3.4.x' into 3.5.x 2025-09-09 09:21:14 +02:00
Stéphane Nicoll 3c757ac48f Upgrade to Netty 4.1.127.Final
Closes gh-47128
2025-09-09 09:13:38 +02:00
Stéphane Nicoll 9b0a2cd652 Upgrade to Micrometer Tracing 1.4.10
Closes gh-47074
2025-09-09 09:13:33 +02:00
Stéphane Nicoll 7e1af36c1c Upgrade to Netty 4.1.127.Final
Closes gh-47127
2025-09-09 09:13:04 +02:00
Stéphane Nicoll d26a192881 Upgrade to Micrometer Tracing 1.5.4
Closes gh-47084
2025-09-09 09:12:59 +02:00
Stéphane Nicoll b30fa76473 Upgrade to Micrometer 1.15.4
Closes gh-47083
2025-09-09 09:12:59 +02:00
Stéphane Nicoll 63360f3620 Merge pull request #47072 from jonatan-ivanov
* pr/47072:
  Use isNoop() instead of Observation.NOOP

Closes gh-47072
2025-09-09 09:09:54 +02:00
Jonatan Ivanov 9e9e412335 Use isNoop() instead of Observation.NOOP
See gh-47072
2025-09-09 08:58:17 +02:00
Stéphane Nicoll 6207e41473 Remove auto-configuration support for '@HttpServiceClient'
This reverts commit 7a8b337b1c.

Closes gh-47123
2025-09-08 16:13:38 +02:00
Andy Wilkinson fd4f2b8af5 Polish 2025-09-08 11:05:44 +01:00
Stéphane Nicoll b1a072f423 Merge branch '3.5.x'
See gh-47120
2025-09-08 11:16:53 +02:00
Stéphane Nicoll e3d886e29c Merge branch '3.4.x' into 3.5.x
See gh-47119
2025-09-08 11:16:37 +02:00
Stéphane Nicoll 56e7002116 Revert "Bump @antora/site-generator in /antora"
This reverts commit d8ff59c36e.

See gh-46966
2025-09-08 11:16:19 +02:00
Stéphane Nicoll f4fce7caa7 Merge branch '3.5.x'
Closes gh-47120
2025-09-08 11:10:32 +02:00
Stéphane Nicoll 4f2e2d1671 Merge branch '3.4.x' into 3.5.x
Closes gh-47119
2025-09-08 11:10:24 +02:00
Stéphane Nicoll aabc33476e Merge pull request #46966 from dependabot[bot]
* pr/46966:
  Bump @antora/site-generator in /antora

Closes gh-46966
2025-09-08 11:10:18 +02:00
dependabot[bot] d8ff59c36e Bump @antora/site-generator in /antora
Bumps [@antora/site-generator](https://gitlab.com/antora/antora) from 3.2.0-alpha.4 to 3.2.0-alpha.9.
- [Changelog](https://gitlab.com/antora/antora/blob/main/CHANGELOG.adoc)
- [Commits](https://gitlab.com/antora/antora/compare/v3.2.0-alpha.4...v3.2.0-alpha.9)

---
updated-dependencies:
- dependency-name: "@antora/site-generator"
  dependency-version: 3.2.0-alpha.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

See gh-46966

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 11:07:30 +02:00
Stéphane Nicoll 67613c3ac0 Merge branch '3.5.x' 2025-09-08 10:52:40 +02:00
Stéphane Nicoll 6f86a16caa Merge branch '3.4.x' into 3.5.x
Closes gh-47118
2025-09-08 10:52:15 +02:00
Stéphane Nicoll 8a10ec4b6f Prevent upgrade to Tomcat 10.1.45
Closes gh-47117
2025-09-08 10:47:02 +02:00
Stéphane Nicoll 144ddd6517 Merge branch '3.5.x' 2025-09-08 09:44:10 +02:00
Stéphane Nicoll 556d970435 Merge branch '3.4.x' into 3.5.x 2025-09-08 09:43:54 +02:00
Stéphane Nicoll 0b32cde654 Upgrade to Undertow 2.3.19.Final
Closes gh-47115
2025-09-08 09:15:47 +02:00
Stéphane Nicoll ed507004af Upgrade to Netty 4.1.126.Final
Closes gh-47114
2025-09-08 09:15:43 +02:00
Stéphane Nicoll 6be4edbcc0 Upgrade to Lombok 1.18.40
Closes gh-47113
2025-09-08 09:15:39 +02:00
Stéphane Nicoll 0368edd306 Upgrade to Jetty 12.0.26
Closes gh-47112
2025-09-08 09:15:35 +02:00
Stéphane Nicoll 593b977fdd Upgrade to Jaybird 6.0.3
Closes gh-47111
2025-09-08 09:15:32 +02:00
Stéphane Nicoll c76b1c3068 Upgrade to Jakarta Mail 2.1.4
Closes gh-47110
2025-09-08 09:15:27 +02:00
Stéphane Nicoll 7031c94ba9 Upgrade to Infinispan 15.2.6.Final
Closes gh-47109
2025-09-08 09:15:23 +02:00
Stéphane Nicoll 98cdb3aab9 Upgrade to HttpCore5 5.3.5
Closes gh-47108
2025-09-08 09:15:19 +02:00
Stéphane Nicoll dddebef4b1 Upgrade to Hibernate 6.6.28.Final
Closes gh-47107
2025-09-08 09:15:15 +02:00
Stéphane Nicoll 4104d08dae Upgrade to Ehcache3 3.10.9
Closes gh-47106
2025-09-08 09:15:11 +02:00
Stéphane Nicoll 54572d227b Upgrade to Undertow 2.3.19.Final
Closes gh-47105
2025-09-08 09:13:38 +02:00
Stéphane Nicoll d9c06d3d5a Upgrade to Netty 4.1.126.Final
Closes gh-47104
2025-09-08 09:13:34 +02:00
Stéphane Nicoll 9780b91263 Upgrade to Micrometer 1.14.11
Closes gh-47073
2025-09-08 09:13:30 +02:00
Stéphane Nicoll b5edbd80e9 Upgrade to Lombok 1.18.40
Closes gh-47103
2025-09-08 09:13:30 +02:00
Stéphane Nicoll 447b83ef36 Upgrade to Jetty 12.0.26
Closes gh-47102
2025-09-08 09:13:26 +02:00
Stéphane Nicoll e64839dc8b Upgrade to Jaybird 5.0.9.java11
Closes gh-47101
2025-09-08 09:13:22 +02:00
Stéphane Nicoll 303f15943f Upgrade to Jakarta Mail 2.1.4
Closes gh-47100
2025-09-08 09:13:18 +02:00
Stéphane Nicoll 4810c48519 Upgrade to Infinispan 15.0.21.Final
Closes gh-47099
2025-09-08 09:13:14 +02:00
Stéphane Nicoll 984a3cd5b1 Upgrade to HttpCore5 5.3.5
Closes gh-47098
2025-09-08 09:13:10 +02:00
Stéphane Nicoll dc6fec6ed4 Upgrade to Hibernate 6.6.28.Final
Closes gh-47097
2025-09-08 09:13:06 +02:00
Stéphane Nicoll bcacae7e0c Upgrade to Ehcache3 3.10.9
Closes gh-47096
2025-09-08 09:13:02 +02:00
Stéphane Nicoll 426e5630bd Merge branch '3.5.x' 2025-09-06 10:08:20 +02:00
Stéphane Nicoll 6911c1362d Merge branch '3.4.x' into 3.5.x 2025-09-06 10:08:06 +02:00
Stéphane Nicoll 3bb34894c8 Upgrade to Elasticsearch Client 8.18.6
Closes gh-47094
2025-09-06 09:55:54 +02:00
Stéphane Nicoll 5417f7ac34 Start building against Spring Pulsar 1.2.10 snapshots
See gh-47093
2025-09-06 09:38:20 +02:00
Stéphane Nicoll e9a7ec7da8 Start building against Spring Kafka 3.3.10 snapshots
See gh-47092
2025-09-06 09:38:16 +02:00
Stéphane Nicoll 4d8270084f Start building against Spring Integration 6.5.2 snapshots
See gh-47091
2025-09-06 09:38:12 +02:00
Stéphane Nicoll 83b7d6e34b Start building against Spring GraphQL 1.4.2 snapshots
See gh-47090
2025-09-06 09:38:08 +02:00
Stéphane Nicoll fa3d12e421 Start building against Spring Framework 6.2.11 snapshots
See gh-47089
2025-09-06 09:38:04 +02:00
Stéphane Nicoll fd90e18cf9 Start building against Spring Data Bom 2025.0.4 snapshots
See gh-47088
2025-09-06 09:38:00 +02:00
Stéphane Nicoll d2eca01763 Start building against Spring Batch 5.2.3 snapshots
See gh-47087
2025-09-06 09:37:56 +02:00
Stéphane Nicoll 3099405278 Start building against Spring AMQP 3.2.7 snapshots
See gh-47086
2025-09-06 09:37:52 +02:00
Stéphane Nicoll fef00c9f7f Start building against Reactor Bom 2024.0.10 snapshots
See gh-47085
2025-09-06 09:37:48 +02:00
Stéphane Nicoll d0629d6594 Start building against Micrometer Tracing 1.5.4 snapshots
See gh-47084
2025-09-06 09:37:44 +02:00
Stéphane Nicoll bd90d1266e Start building against Micrometer 1.15.4 snapshots
See gh-47083
2025-09-06 09:37:40 +02:00
Stéphane Nicoll e4ec422b3d Start building against Spring Pulsar 1.2.10 snapshots
See gh-47082
2025-09-06 09:18:08 +02:00
Stéphane Nicoll 5afbe56450 Start building against Spring Kafka 3.3.10 snapshots
See gh-47081
2025-09-06 09:18:04 +02:00
Stéphane Nicoll d4795b8e5e Start building against Spring Integration 6.4.7 snapshots
See gh-47080
2025-09-06 09:18:00 +02:00
Stéphane Nicoll a396130c7b Start building against Spring Framework 6.2.11 snapshots
See gh-47079
2025-09-06 09:17:57 +02:00
Stéphane Nicoll 2bc0e4fbd8 Start building against Spring Data Bom 2024.1.10 snapshots
See gh-47078
2025-09-06 09:17:53 +02:00
Stéphane Nicoll 7b33888ad4 Start building against Spring Batch 5.2.3 snapshots
See gh-47077
2025-09-06 09:17:49 +02:00
Stéphane Nicoll a9314b4dcd Start building against Spring AMQP 3.2.7 snapshots
See gh-47076
2025-09-06 09:17:45 +02:00
Stéphane Nicoll 0aac151e63 Start building against Reactor Bom 2024.0.10 snapshots
See gh-47075
2025-09-06 09:17:41 +02:00
Stéphane Nicoll 1e2ad8fa04 Start building against Micrometer Tracing 1.4.10 snapshots
See gh-47074
2025-09-06 09:17:37 +02:00
Stéphane Nicoll 15af6a7371 Start building against Micrometer 1.14.11 snapshots
See gh-47073
2025-09-06 09:17:33 +02:00
Phillip Webb 0623275641 Add nullability to `JsonWriter`
See gh-46926
2025-09-05 19:57:52 -07:00
Phillip Webb 239f384ac0 Update PropertyMapper to better support nullability
Refactor `PropertyMapper` so that it no longer calls adapter or
predicate methods by default when the source value is `null`. This
effectively makes all default calls the same as using
`alwaysWhenNotNull` in the previous generation of the code.

For the limited times when you do need to deal with `null` values, the
new `always()` method can be used.

For example,

	map.from(source::method).to(destination::method);

Will not call `destination.method(...)` if `source.method()` returns
`null`.

Where as:

	map.from(source::method).always().to(destination::method);

Will call  `destination.method(null)` if `source.method()` returns
`null`.

This update provides clearer semantics for the API and allows for better
JSpecify nullability annotations. It has also simplified much of our
existing property mapper code.

Closes gh-47024

Co-authored-by: Moritz Halbritter <moritz.halbritter@broadcom.com>
2025-09-05 14:43:33 -07:00
Phillip Webb 2d63763c58 Upgrade to Versions Maven Plugin 2.19.0
Closes gh-47071
2025-09-05 11:42:05 -07:00
Phillip Webb 9d89264985 Upgrade to Tomcat 11.0.11
Closes gh-47070
2025-09-05 11:42:01 -07:00
Phillip Webb 1c803ce0dd Upgrade to SnakeYAML 2.5
Closes gh-47069
2025-09-05 11:41:57 -07:00
Phillip Webb a759f981f6 Upgrade to Lombok 1.18.40
Closes gh-47068
2025-09-05 11:41:53 -07:00
Phillip Webb 4af6640903 Upgrade to Kotlin 2.2.10
Closes gh-47067
2025-09-05 11:41:49 -07:00
Phillip Webb b6a44dc31f Upgrade to Kafka 4.1.0
Closes gh-47066
2025-09-05 11:41:45 -07:00
Phillip Webb 24a1b0b449 Upgrade to Jaybird 6.0.3
Closes gh-47065
2025-09-05 11:41:41 -07:00
Phillip Webb d9b894dc9b Upgrade to Jakarta Mail 2.1.4
Closes gh-47064
2025-09-05 11:41:37 -07:00
Phillip Webb 02c9175dea Upgrade to Infinispan 15.2.6.Final
Closes gh-47063
2025-09-05 11:41:33 -07:00
Phillip Webb efe3ec191e Upgrade to HttpCore5 5.3.5
Closes gh-47062
2025-09-05 11:41:29 -07:00
Phillip Webb 987ff8ca54 Upgrade to HtmlUnit 4.16.0
Closes gh-47061
2025-09-05 11:41:25 -07:00
Phillip Webb dd67968bc9 Upgrade to HikariCP 7.0.2
Closes gh-47060
2025-09-05 11:41:20 -07:00
Phillip Webb 669f404676 Upgrade to Flyway 11.12.0
Closes gh-47059
2025-09-05 11:41:16 -07:00
Andy Wilkinson 4aa0d9dcac Merge branch '3.5.x'
Closes gh-47058
2025-09-05 17:31:57 +01:00
Andy Wilkinson 90cc5be79f Merge branch '3.4.x' into 3.5.x
Closes gh-47057
2025-09-05 17:31:40 +01:00
Andy Wilkinson f28caee30d Fix NestedJarFile.JarEntryInputStream's available() behavior
Previously, available() would return 0 initially and then negative
values once some data head been read. It should be a positive value
(for entries with content) initially a decrease as data is read
reaching zero once an entry's data has been read in its entirety.

This commit initialises the count of the remaining bytes to
be equal to the entry's uncompressed size. It also removes logic
that closes the stream when remaining equals zero upon read or skip.
This condition was not reached before as remaining would become
negative as soon as any data was read or skipped. With the correct
initialization of remaining, the condition is now reached and it
results in test failures due to premature closure. Furthermore, the
javadoc of read and skip do not require the stream to be closed
when the reach end of file.

Closes gh-47056
2025-09-05 17:29:22 +01:00
Andy Wilkinson 8d2c090af8 Move MongoDB health support into spring-boot-mongodb
Previously the MongoDB health indicates used Spring Data's templates
(imperative and reactive) to access MongoDB. This prevented health
information from being available in apps using Mongo's Java Driver
directly.

This commit updates the health indicates so that they no longer
depend upon Spring Data MongoDB and instead using MongoDB's Java
Driver directly. As they no longer depend on Spring Data MongoDB,
the indicators have also moved from spring-boot-data-mongodb to
spring-boot-mongodb.

Closes gh-47051
2025-09-05 15:07:52 +01:00
Andy Wilkinson a977d260bd Add a property for Data MongoDB's BigDecimal representation
Closes gh-47041
2025-09-05 15:07:52 +01:00
Andy Wilkinson 1554c74c2a Rename spring.data.mongodb.uuid-representation
Closes gh-47052
2025-09-05 15:07:52 +01:00
Andy Wilkinson ab9feff7fa Use mongodb consistently in property names
Closes gh-47050
2025-09-05 15:07:52 +01:00
Andy Wilkinson 08c42701d9 Rename MongoDB properties that don't require Spring Data MongoDB
Previously, all configuration properties for MongoDB used the
prefix spring.data.mongodb irrespective of whether or not they
required Spring Data MongoDB.

This commit renames the properties that do not require Spring Data
MongoDB to use the prefix spring.mongodb.

Closes gh-34954
2025-09-05 15:07:52 +01:00
Moritz Halbritter 63adb82145 Merge branch '3.5.x'
Closes gh-47055
2025-09-05 14:17:39 +02:00
Moritz Halbritter 85afbc6d82 Merge branch '3.4.x' into 3.5.x
Closes gh-47054
2025-09-05 14:14:18 +02:00
Moritz Halbritter d39047183e Merge pull request #47028 from izeye
* pr/47028:
  Polish

Closes gh-47028
2025-09-05 14:13:11 +02:00
Johnny Lim 438df257b5 Polish
See gh-47028

Signed-off-by: Johnny Lim <izeye@naver.com>
2025-09-05 14:13:02 +02:00
Moritz Halbritter ccbf678f5a Merge pull request #47015 from HyunSangHan
* pr/47015:
  Replace deprecated @Temporal with LocalDate

Closes gh-47015
2025-09-05 14:01:37 +02:00
Hyunsang Han 1b7d0b5755 Replace deprecated @Temporal with LocalDate
See gh-47015

Signed-off-by: Hyunsang Han <gustkd3@gmail.com>
2025-09-05 14:00:19 +02:00
Moritz Halbritter d185b319f3 Merge pull request #47029 from maziyarbahramian
* pr/47029:
  Rename ConditionalOnEnabledTracing to ConditionalOnEnabledTracingExport

Closes gh-47029
2025-09-05 13:40:13 +02:00
Maziyar Bahramian 4a888ca1db Rename ConditionalOnEnabledTracing to ConditionalOnEnabledTracingExport
See gh-47029

Signed-off-by: Maziyar Bahramian <maziyar.bahramian@gmail.com>
2025-09-05 13:36:16 +02:00
Phillip Webb 92c3d1835a Adapt to Spring Kafka BackOff updates
See gh-47004
2025-09-04 15:53:38 -07:00
Andy Wilkinson aa3bed5e28 Remove GridFS from MongoConnectionDetails
GridFS is a concept specific to Spring Data MongoDB while
MongoConnectionDetails provides general details for connecting to
MongoDB, with or without Spring Data MongoDB. As such GridFS does not
belong on MongoConnectionDetails and this commit removes it.

Support for configuring GridFS through properties remains.

Closes gh-47044
2025-09-04 18:01:18 +01:00
Andy Wilkinson 42c494caa2 Rename …DataProperties to Data…Properties
Closes gh-47043
2025-09-04 17:47:18 +01:00
Andy Wilkinson 3f03a3d55e Upgrade to Lettuce 6.8.1.RELEASE
Closes gh-47046
2025-09-04 17:01:23 +01:00
Andy Wilkinson 75dbbad1f7 Upgrade to Jedis 6.2.0
Closes gh-47045
2025-09-04 17:01:18 +01:00
Andy Wilkinson b888ba46da Revert "Merge branch '3.5.x'"
This reverts commit fc2700674e, reversing
changes made to b1b5880f48.

See gh-47038
2025-09-04 16:03:50 +01:00
Andy Wilkinson ed96ed6e8c Merge branch '3.4.x' into 3.5.x
See gh-47037
2025-09-04 16:01:56 +01:00
Andy Wilkinson 055b0993da Revert "Remove stale metadata for management.health.influxdb.enabled"
This reverts commit 987635972d.

See gh-45747
2025-09-04 16:01:32 +01:00
Andy Wilkinson 056ed4f226 Merge pull request #46167 from l-trotta
* gh-46167:
  Polish "Add support for Elasticsearch API-key-based authentication"
  Add support for Elasticsearch API-key-based authentication

Closes gh-46167
2025-09-04 14:35:01 +01:00
Andy Wilkinson 86deef6abf Polish "Add support for Elasticsearch API-key-based authentication"
See gh-46167
2025-09-04 12:08:25 +01:00
Laura Trotta 9a70591f31 Add support for Elasticsearch API-key-based authentication
See gh-46167

Signed-off-by: Laura Trotta <laura.trotta@elastic.co>
2025-09-04 12:01:28 +01:00
Andy Wilkinson 79d409a8fc Merge branch '3.5.x' 2025-09-04 11:56:39 +01:00
Andy Wilkinson 3dcd2b79f2 Merge branch '3.4.x' into 3.5.x 2025-09-04 11:56:33 +01:00
Andy Wilkinson 2d9b258f3d Configure dependabot to add waiting-for-triage label to its PRs 2025-09-04 11:55:50 +01:00
Andy Wilkinson 123b8c6d3d Update Bomr to output upgrade links for the release notes
Closes gh-47032
2025-09-04 11:43:37 +01:00
Andy Wilkinson fc2700674e Merge branch '3.5.x'
Closes gh-47038
2025-09-04 11:05:08 +01:00
Andy Wilkinson 19a7331c3e Merge branch '3.4.x' into 3.5.x
Closes gh-47037
2025-09-04 11:03:09 +01:00
Andy Wilkinson 987635972d Remove stale metadata for management.health.influxdb.enabled
The property was deprecated in 3.2 and support removed in 3.4. This
commit updates the metadata to reflect that removal.

Closes gh-45747
2025-09-04 10:58:40 +01:00
Andy Wilkinson b1b5880f48 Merge branch '3.5.x'
Closes gh-47036
2025-09-04 09:56:46 +01:00
Andy Wilkinson 0c9fcd096c Merge branch '3.4.x' into 3.5.x
Closes gh-47035
2025-09-04 09:55:29 +01:00
Andy Wilkinson 11d6c434d9 Test that default max HTTP request header aligns with Tomcat
Closes gh-46977
2025-09-04 09:27:44 +01:00
Andy Wilkinson 78bc232af4 Merge branch '3.5.x'
Closes gh-47034
2025-09-04 09:04:00 +01:00
Andy Wilkinson 4697f2ea51 Merge branch '3.4.x' into 3.5.x
Closes gh-47033
2025-09-04 09:03:40 +01:00
Andy Wilkinson 985e108ccb Delete old output before documenting auto-configuration classes
Without this change, removing a file from the task's inputs would not
be reflected in its output as the stale output file for that input
would remain.

Closes gh-46970
2025-09-04 09:03:16 +01:00
Andy Wilkinson 023cbd42f0 Adapt to changes in Spring Integration's Graph
See gh-47010
2025-09-04 08:02:33 +01:00
Andy Wilkinson 5e9995999c Upgrade to Ehcache 3.11.1
Closes gh-46893
2025-09-04 07:11:18 +01:00
Andy Wilkinson 12312c75ef Use Tomcat 11 in Paketo war deployment test
Closes gh-47030
2025-09-03 18:43:26 +01:00
Andy Wilkinson 5e8d1d4b31 Update deployment tests to use Servlet 6.1 compatible containers
Closes gh-47026
2025-09-03 16:05:31 +01:00
Moritz Halbritter 96d096e2f9 Improve null-safety of module/spring-boot-micrometer-metrics
See gh-46926
2025-09-03 15:12:20 +02:00
Moritz Halbritter 8001061a3c Improve null-safety of module/spring-boot-cache
See gh-46926
2025-09-03 15:12:06 +02:00
Moritz Halbritter f51f872c28 Improve null-safety of module/spring-boot-actuator
See gh-46926
2025-09-03 15:11:53 +02:00
Moritz Halbritter 552c145213 Improve null-safety of core/spring-boot
See gh-46926
2025-09-03 15:11:10 +02:00
Moritz Halbritter e70edced2f Merge branch '3.5.x'
Closes gh-47020
2025-09-02 15:12:58 +02:00
Andy Wilkinson 7f7d5b157f Upgrade Kafka smoke test to use Jackson 3-based SerDe components
See gh-45535
2025-09-02 13:56:10 +01:00
Moritz Halbritter f50e779942 Merge branch '3.4.x' into 3.5.x
Closes gh-47019
2025-09-02 14:53:52 +02:00
Moritz Halbritter c4af7d6c75 Merge pull request #46974 from quaff
* pr/46974:
  Polish "Create service connections for image with registry host and without project"
  Create service connections for image with registry host and without project

Closes gh-46974
2025-09-02 14:36:04 +02:00
Moritz Halbritter a6afc39956 Polish "Create service connections for image with registry host and without project"
See gh-46974
2025-09-02 14:35:19 +02:00
Yanming Zhou c8d29fd3fe Create service connections for image with registry host and without project
See gh-46974

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
2025-09-02 14:30:01 +02:00
Andy Wilkinson d353038c58 Update Jackson support to require Jackson 3
Closes gh-45535
2025-09-02 11:37:09 +01:00
Andy Wilkinson 8bfb170ebc Remove support for Jersey
Spring Boot 4 requires Jakarta EE 11. Jersey 4 will support EE 11 but
its release schedule is uncertain. Furthermore, Jersey does not yet
support Jackson 3 and there's no clear timeline for when Jackson 3
will be supported.

In light of the above, this commit removes support for Jersey.
Reinstating support can be considered once there's a Jersey GA that
supports Jakarta EE 11 or its clear that one will be available in
time for Boot's GA in November. Ideally, support for Jackson 3 would
also be available before reinstating Jersey support.

Closes gh-47017
2025-09-02 11:36:52 +01:00
Moritz Halbritter b52c55d633 Merge pull request #46995 from maziyarbahramian
* pr/46995:
  Rename ScheduledTasksObservabilityAutoConfiguration to ScheduledTasksObservationAutoConfiguration

Closes gh-46995
2025-09-01 16:58:27 +02:00
Maziyar Bahramian 6d3cb8eff7 Rename ScheduledTasksObservabilityAutoConfiguration to ScheduledTasksObservationAutoConfiguration
See gh-46995

Signed-off-by: Maziyar Bahramian <maziyar.bahramian@gmail.com>
2025-09-01 16:57:00 +02:00
Moritz Halbritter d618f6b1ec Merge branch '3.5.x'
Closes gh-47014
2025-09-01 16:10:16 +02:00
Moritz Halbritter d785a7f26b Merge branch '3.4.x' into 3.5.x
Closes gh-47013
2025-09-01 16:08:50 +02:00
Moritz Halbritter fafd0bbd20 Merge pull request #46984 from Chanwon-Seo
* pr/46984:
  Allow Flyway's Ignore Migration Patterns setting to be an empty string

Closes gh-46984
2025-09-01 16:08:11 +02:00
Chanwon-Seo 972ceca8cd Allow Flyway's Ignore Migration Patterns setting to be an empty string
See gh-46984

Signed-off-by: Chanwon-Seo <scwonn60@gmail.com>
2025-09-01 15:56:24 +02:00
Moritz Halbritter 71ff804717 Adapt to Neo4j image changes
The image has been switched in 4761e13228
2025-09-01 15:51:00 +02:00
Moritz Halbritter c4a4b632c1 Merge pull request #46289 from move-hoon
* pr/46289:
  Polish "Optimize DevTools resource lookup performance"
  Optimize DevTools resource lookup performance

Closes gh-46289
2025-09-01 10:52:46 +02:00
Moritz Halbritter 2c4d162f40 Polish "Optimize DevTools resource lookup performance"
See gh-46289
2025-09-01 10:52:38 +02:00
DongHoon Lee 3e41807e1d Optimize DevTools resource lookup performance
The resource resolver in DevTools can cause performance degradation
during application restarts in large projects. Key methods like
isDeleted() and getAdditionalResources() rely on nested loops, leading
to O(n*m) complexity.

This commit refactors ClassLoaderFiles to use a pre-computed, flattened
map. This provides O(1) complexity for direct lookups and allows for
efficient single-loop iteration.

The ClassLoaderFilesResourcePatternResolver is updated to leverage this
new, efficient structure:

- getFile() and size() are improved from O(n) to O(1).
- isDeleted() and getAdditionalResources() are improved from O(n*m) to
  O(m) by eliminating nested loops.
- Data consistency is maintained across all operations.

This optimization significantly improves restart performance with a
minimal memory footprint, while preserving the existing API and
exception handling behavior.

See gh-46289

Signed-off-by: DongHoon Lee <dhl1924@naver.com>
2025-09-01 10:52:37 +02:00
Andy Wilkinson 4761e13228 Upgrade Neo4j test image to 5.26.11
See gh-47002
2025-09-01 09:49:28 +01:00
Andy Wilkinson a5b195f3f2 Start building against Spring RESTDocs 4.0.0-M3 snapshots
See gh-47007
2025-09-01 08:10:32 +01:00
Andy Wilkinson cec58df657 Start building against Spring Pulsar 2.0.0-M3 snapshots
See gh-47006
2025-09-01 08:10:32 +01:00
Andy Wilkinson e741934a2d Start building against Spring LDAP 4.0.0-M3 snapshots
See gh-47005
2025-09-01 08:10:32 +01:00
Andy Wilkinson 363d9b555a Start building against Spring Kafka 4.0.0-M5 snapshots
See gh-47004
2025-09-01 08:10:32 +01:00
Andy Wilkinson b2e6cb0259 Start building against Spring HATEOAS 3.0.0-M5 snapshots
See gh-47003
2025-09-01 08:10:32 +01:00
Andy Wilkinson fbe0ccf0ae Start building against Spring Data Bom 2025.1.0-M6 snapshots
See gh-47002
2025-09-01 08:10:31 +01:00
Andy Wilkinson 576d67a4f8 Start building against Spring Batch 6.0.0-M3 snapshots
See gh-47001
2025-09-01 08:10:31 +01:00
Andy Wilkinson 3ffdf6ee1a Start building against Spring Authorization Server 2.0.0-M3 snapshots
See gh-47000
2025-09-01 08:10:31 +01:00
Andy Wilkinson 856602ddc4 Upgrade to Elasticsearch Client 9.1.3
Closes gh-47011
2025-09-01 08:10:31 +01:00
Andy Wilkinson f3ac2d5906 Start building against Reactor Bom 2025.0.0-M7 snapshots
See gh-46998
2025-08-29 17:19:34 +01:00
Andy Wilkinson 254068083d Start building against Spring Integration 7.0.0-M3 snapshots
See gh-47010
2025-08-29 17:19:34 +01:00
Andy Wilkinson b15974024c Start building against Spring GraphQL 2.0.0-M3 snapshots
See gh-47009
2025-08-29 17:19:34 +01:00
Andy Wilkinson fe371aba17 Start building against Spring Framework 7.0.0-M9 snapshots
See gh-47008
2025-08-29 17:19:34 +01:00
Andy Wilkinson 62649ae3ed Start building against Micrometer Tracing 1.6.0-M3 snapshots
See gh-46997
2025-08-29 17:16:52 +01:00
Andy Wilkinson 05ae5837e7 Start building against Micrometer 1.16.0-M3 snapshots
See gh-46996
2025-08-29 17:16:52 +01:00
Moritz Halbritter dc03e3749b Merge pull request #46409 from ppkarwasz
* pr/46409:
  Polish "Improve Log4j core configuration file detection for Log4j 3"
  Improve Log4j core configuration file detection for Log4j 3

Closes gh-46409
2025-08-29 11:15:38 +02:00
Moritz Halbritter ff11e21d73 Polish "Improve Log4j core configuration file detection for Log4j 3"
See gh-46409
2025-08-29 11:09:23 +02:00
Piotr P. Karwasz 16439ad6e3 Improve Log4j core configuration file detection for Log4j 3
Log4j Core 3 has undergone significant modularization and no longer uses
optional parser dependencies. This change requires updates to
Spring Boot's configuration file detection logic to properly support
both Log4j Core 2 and 3.

**Updated configuration file detection**
  Spring Boot now detects configuration formats based on the presence of
   ConfigurationFactory implementations, instead of relying on optional
   parser dependencies (as was the case in Log4j Core 2).

**Improved classloader usage for reflection**
  Reflection logic now uses the classloader that loaded Log4j Core,
  rather than the one associated with the Spring Boot context,
  ensuring greater compatibility in modular environments.

* **Adjusted configuration file lookup order**
  The lookup now prioritizes configuration files specified via
  properties over automatically discovered ones, improving consistency
  with Log4j Core.

**Support for contextual configuration files**
  Files named in the form `log4j2<contextName>.<extension>` are now also
  supported.

These changes ensure compatibility with Log4j Core 3 while preserving
support for Log4j Core 2, improving Spring Boot's flexibility in
detecting and loading user-defined logging configurations.

See gh-46409

Signed-off-by: Piotr P. Karwasz <piotr@github.copernik.eu>
2025-08-29 11:06:49 +02:00
Moritz Halbritter f3082e7802 Merge branch '3.5.x'
Closes gh-46991
2025-08-28 17:09:31 +02:00
Moritz Halbritter 89c7a681c0 Merge branch '3.4.x' into 3.5.x
Closes gh-46990
2025-08-28 17:08:23 +02:00
Moritz Halbritter 86bb1b4e57 Bump jfrog/setup-jfrog-cli from 4.5.13 to 4.6.0
Closes gh-46962
2025-08-28 17:08:06 +02:00
Moritz Halbritter bf0998fe54 Merge branch '3.5.x'
Closes gh-46989
2025-08-28 17:06:26 +02:00
Moritz Halbritter efa806e3b5 Merge branch '3.4.x' into 3.5.x
Closes gh-46988
2025-08-28 17:06:18 +02:00
Moritz Halbritter 75f9138a1a Merge pull request #46976 from Chanwon-Seo
* pr/46976:
  Fix links to Flyway reference documentation

Closes gh-46976
2025-08-28 17:05:45 +02:00
Chanwon-Seo 4d499c3e46 Fix links to Flyway reference documentation
See gh-46976

Signed-off-by: Chanwon-Seo <scwonn60@gmail.com>
2025-08-28 17:04:33 +02:00
Moritz Halbritter da2365b8cb Merge branch '3.5.x'
Closes gh-46987
2025-08-28 16:58:28 +02:00
Moritz Halbritter 4716cb3713 Merge branch '3.4.x' into 3.5.x
Closes gh-46986
2025-08-28 16:58:19 +02:00
Moritz Halbritter 1eaa54759a Merge pull request #46973 from quaff
* pr/46973:
  Fix typo

Closes gh-46973
2025-08-28 16:57:56 +02:00
Yanming Zhou f547bc27a5 Fix typo
See gh-46973

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
2025-08-28 16:56:46 +02:00
Moritz Halbritter db5680a79c Merge branch '3.5.x' 2025-08-28 14:04:26 +02:00
Moritz Halbritter 6adddb4c09 Merge branch '3.4.x' into 3.5.x 2025-08-28 14:03:16 +02:00
Moritz Halbritter 24a23c4f72 Disable tests which use Bitnami images
See gh-46983
2025-08-28 13:41:15 +02:00
Moritz Halbritter a3343797f4 Merge branch '3.5.x'
Closes gh-46981
2025-08-28 11:58:16 +02:00
Moritz Halbritter 98ce1d736e Merge branch '3.4.x' into 3.5.x
Closes gh-46980
2025-08-28 11:57:34 +02:00
Moritz Halbritter e1e8914de2 Bump actions/setup-java from 4 to 5
Closes gh-46961
2025-08-28 11:57:24 +02:00
Moritz Halbritter 5656c13f31 Protect against null key insertion in MapConfigurationPropertySource
See gh-46926
2025-08-28 10:10:56 +02:00
Moritz Halbritter 6723cfd809 Improve null-safety of core/spring-boot
See gh-46926
2025-08-28 09:59:08 +02:00
Moritz Halbritter 12bf4507d8 Remove suppressions for module/spring-boot-graphql
See gh-46926
2025-08-28 09:44:25 +02:00
Moritz Halbritter 3dba915c01 Improve null-safety of module/spring-boot-webflux
See gh-46926
2025-08-28 09:40:23 +02:00
Moritz Halbritter 89c64ef443 Only apply properties to GroovyMarkupConfigurer which are not null 2025-08-27 15:29:15 +02:00
Moritz Halbritter 011d42cb2a Improve null-safety of module/spring-boot-hibernate
See gh-46926
2025-08-27 15:18:29 +02:00
Moritz Halbritter f272fb6659 Improve null-safety of module/spring-boot-webclient
See gh-46926
2025-08-27 14:20:11 +02:00
Moritz Halbritter bab9cdb47f Improve null-safety of module/spring-boot-restclient
See gh-46926
2025-08-27 14:20:11 +02:00
Moritz Halbritter 3c01fdfeaa Improve null-safety of module/spring-boot-flyway
See gh-46926
2025-08-27 14:20:11 +02:00
Moritz Halbritter 303d4910bd Improve null-safety of module/spring-boot-webmvc
See gh-46926
2025-08-26 14:22:57 +02:00
Moritz Halbritter 74320454c9 Improve null-safety of module/spring-boot-graphql
See gh-46926
2025-08-26 14:22:57 +02:00
Moritz Halbritter 0d192347fd Improve null-safety of module/spring-boot-webflux
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter 76157c77fa Improve null-safety of module/spring-boot-web-server
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter 007720d28d Improve null-safety of module/spring-boot-tomcat
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter dcd25abcce Improve null-safety of module/spring-boot-security
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter 99629d0d32 Improve null-safety of module/spring-boot-security-oauth2-resource-server
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter 72e6ddd919 Improve null-safety of module/spring-boot-rsocket
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter 26a35c9012 Improve null-safety of module/spring-boot-reactor-netty
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter 6c288c9def Improve null-safety of module/spring-boot-r2dbc
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter 1157a30d06 Improve null-safety of module/spring-boot-pulsar
See gh-46926
2025-08-26 14:22:56 +02:00
Moritz Halbritter d744d8c497 Improve null-safety of module/spring-boot-observation
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter 55443f7c44 Improve null-safety of module/spring-boot-mustache
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter eb14624047 Improve null-safety of module/spring-boot-mongodb
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter 49d3bd32c4 Improve null-safety of module/spring-boot-metrics
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter f1ed5098a3 Improve null-safety of module/spring-boot-liquibase
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter 3fa7c3a521 Improve null-safety of module/spring-boot-ldap
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter 369b1e92f9 Improve null-safety of module/spring-boot-kafka
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter 9d1b4897f1 Improve null-safety of module/spring-boot-jdbc
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter 09b631d6c0 Improve null-safety of module/spring-boot-http-client
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter 5f5443ea67 Improve null-safety of module/spring-boot-flyway
See gh-46926
2025-08-26 14:22:55 +02:00
Moritz Halbritter d9750462bc Improve null-safety of module/spring-boot-devtools
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter 05ba546a09 Improve null-safety of module/spring-boot-cloudfoundry
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter 31a9958a06 Improve null-safety of module/spring-boot-cassandra
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter 39a91dda9d Improve null-safety of module/spring-boot-amqp
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter 2907fec181 Improve null-safety of module/spring-boot-actuator
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter 2e09df4e1a Improve null-safety of module/spring-boot-actuator-autoconfigure
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter 3a40b0a623 Improve null-safety of loader/spring-boot-loader-tools
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter f5be18587c Improve null-safety of loader/spring-boot-jarmode-tools
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter 43f5eb5f79 Improve null-safety of core/spring-boot
See gh-46926
2025-08-26 14:22:54 +02:00
Moritz Halbritter dc3fe1b17d Improve null-safety of core/spring-boot-testcontainers
See gh-46926
2025-08-26 14:22:53 +02:00
Moritz Halbritter 717ddac137 Improve null-safety of core/spring-boot-test
See gh-46926
2025-08-26 14:22:53 +02:00
Moritz Halbritter 7ad90fb963 Improve null-safety of core/spring-boot-docker-compose
See gh-46926
2025-08-26 14:22:53 +02:00
Moritz Halbritter c76b087025 Improve null-safety of core/spring-boot-autoconfigure
See gh-46926
2025-08-26 14:22:53 +02:00
Moritz Halbritter 9b1c07c0eb Improve null-safety of configuration-metadata/spring-boot-configuration-metadata-changelog-generator
See gh-46926
2025-08-26 14:22:53 +02:00
Moritz Halbritter a0a785ec92 Improve null-safety of cli/spring-boot-cli
See gh-46926
2025-08-26 14:22:53 +02:00
Moritz Halbritter ca7e025dfd Improve null-safety of buildpack/spring-boot-buildpack-platform
See gh-46926
2025-08-26 14:22:53 +02:00
Moritz Halbritter 8fa656d3da Improve null-safety of build-plugin/spring-boot-maven-plugin
See gh-46926
2025-08-26 14:22:53 +02:00
Moritz Halbritter 2a907ba369 Improve null-safety of build-plugin/spring-boot-gradle-plugin
See gh-46926
2025-08-26 14:22:53 +02:00
Andy Wilkinson 795c5f6f73 Merge branch '3.5.x'
Closes gh-46960
2025-08-26 09:46:45 +01:00
Andy Wilkinson 234501a07a Merge branch '3.4.x' into 3.5.x
Closes gh-46959
2025-08-26 09:46:29 +01:00
Andy Wilkinson 4bbd68325f Provide Dependabot configuration for NPM dependency upgrades
Closes gh-46958
2025-08-26 09:46:19 +01:00
Stéphane Nicoll 2660e04c1d Merge branch '3.5.x'
Closes gh-46946
2025-08-23 08:53:13 +02:00
Stéphane Nicoll 8bc611c913 Merge branch '3.4.x' into 3.5.x
Closes gh-46945
2025-08-23 08:53:04 +02:00
Stéphane Nicoll b46006b227 Merge pull request #46941 from dependabot[bot]
* pr/46941:
  Bump brace-expansion in /antora

Closes gh-46941
2025-08-23 08:52:56 +02:00
dependabot[bot] 92321b16a0 Bump brace-expansion in /antora
Bumps  and [brace-expansion](https://github.com/juliangruber/brace-expansion). These dependencies needed to be updated together.

Updates `brace-expansion` from 2.0.1 to 2.0.2
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v2.0.1...v2.0.2)

Updates `brace-expansion` from 1.1.11 to 1.1.12
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v2.0.1...v2.0.2)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 2.0.2
  dependency-type: indirect
- dependency-name: brace-expansion
  dependency-version: 1.1.12
  dependency-type: indirect
...

See gh-46941

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-23 08:50:51 +02:00
Andy Wilkinson 73e5a3551e Update config prop changelog generator to cope with renamed modules
See gh-46925
2025-08-22 12:11:47 +01:00
Andy Wilkinson b42a060d0a Merge branch '3.5.x'
Closes gh-46943
2025-08-22 11:59:17 +01:00
Andy Wilkinson 2fa20f3def Merge branch '3.4.x' into 3.5.x
Closes gh-46942
2025-08-22 11:41:50 +01:00
Andy Wilkinson b7282c00ae Merge pull request #46938 from doljae
* gh-46938:
  Polish "Clarify Javadoc of Customizer interfaces about overriding behavior"
  Clarify Javadoc of Customizer interfaces about overriding behavior

Closes gh-46938
2025-08-22 11:40:41 +01:00
Andy Wilkinson e595327610 Polish "Clarify Javadoc of Customizer interfaces about overriding behavior"
See gh-46938
2025-08-22 11:39:15 +01:00
Seokjae Lee 6e82427ffe Clarify Javadoc of Customizer interfaces about overriding behavior
The previous wording suggested that customizations always retain
default auto-configuration. Rephrased to indicate that configuration
can be fine-tuned, which more accurately reflects that some builder
methods may override or replace defaults.

See gh-46938

Signed-off-by: Seokjae Lee <seok9211@naver.com>
2025-08-22 11:38:34 +01:00
Andy Wilkinson 72befafe67 Merge branch '3.5.x'
Closes gh-46940
2025-08-22 11:00:35 +01:00
Andy Wilkinson f655db371f Merge branch '3.4.x' into 3.5.x
Closes gh-46939
2025-08-22 11:00:01 +01:00
Andy Wilkinson 4679579800 Merge pull request #46936 from dependabot[bot]
* gh-46936:
  Bump sha.js from 2.4.11 to 2.4.12 in /antora

Closes gh-46936
2025-08-22 10:59:42 +01:00
dependabot[bot] d4b37a70ed Bump sha.js from 2.4.11 to 2.4.12 in /antora
Bumps [sha.js](https://github.com/crypto-browserify/sha.js) from 2.4.11 to 2.4.12.
- [Changelog](https://github.com/browserify/sha.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/sha.js/compare/v2.4.11...v2.4.12)

---
updated-dependencies:
- dependency-name: sha.js
  dependency-version: 2.4.12
  dependency-type: indirect
...

See gh-46936

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-22 10:59:17 +01:00
3204 changed files with 36805 additions and 34492 deletions

View File

@ -23,7 +23,7 @@ inputs:
java-version:
description: 'Java version to use for the build'
required: false
default: '24'
default: '25'
runs:
using: composite
steps:
@ -34,7 +34,7 @@ runs:
tool-cache: true
docker-images: false
- name: Set Up Java
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: ${{ inputs.java-early-access == 'true' && 'temurin' || (inputs.java-distribution || 'liberica') }}
java-version: |
@ -42,12 +42,12 @@ runs:
${{ inputs.java-toolchain == 'true' && '24' || '' }}
- name: Set Up Gradle With Read/Write Cache
if: ${{ inputs.cache-read-only == 'false' }}
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
uses: gradle/actions/setup-gradle@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # v4.4.4
with:
cache-read-only: false
develocity-access-key: ${{ inputs.develocity-access-key }}
- name: Set Up Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
uses: gradle/actions/setup-gradle@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # v4.4.4
with:
develocity-access-key: ${{ inputs.develocity-access-key }}
develocity-token-expiry: 4

View File

@ -21,14 +21,14 @@ runs:
using: composite
steps:
- name: Set Up JFrog CLI
uses: jfrog/setup-jfrog-cli@2bc6e55719cd37dfb2f655a1e4f16c3440182a9f # v4.5.13
uses: jfrog/setup-jfrog-cli@c32bf10843e4071112c4ea3abf622d3b27cd8c17 # v4.7.0
env:
JF_ENV_SPRING: ${{ inputs.jfrog-cli-config-token }}
- name: Download Artifacts
shell: bash
run: jf rt download --spec ${{ format('{0}/artifacts.spec', github.action_path) }} --spec-vars 'buildName=${{ format('spring-boot-{0}', inputs.plugin-version) }};buildNumber=${{ inputs.build-number }}'
- name: Set Up Java
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'liberica'
java-version: '17'

View File

@ -17,7 +17,7 @@ runs:
using: composite
steps:
- name: Set Up JFrog CLI
uses: jfrog/setup-jfrog-cli@2bc6e55719cd37dfb2f655a1e4f16c3440182a9f # v4.5.13
uses: jfrog/setup-jfrog-cli@c32bf10843e4071112c4ea3abf622d3b27cd8c17 # v4.7.0
env:
JF_ENV_SPRING: ${{ inputs.jfrog-cli-config-token }}
- name: Download Release Artifacts

View File

@ -6,3 +6,11 @@ updates:
interval: "weekly"
labels:
- "type: task"
- "status: waiting-for-triage"
- package-ecosystem: "npm"
directory: "/antora"
schedule:
interval: "weekly"
labels:
- "type: task"
- "status: waiting-for-triage"

View File

@ -23,16 +23,13 @@ jobs:
toolchain: true
- version: 21
toolchain: true
- version: 24
toolchain: false
- version: 25
early-access: true
toolchain: true
toolchain: false
exclude:
- os:
name: Linux
java:
version: 24
version: 25
- os:
name: ${{ github.repository == 'spring-projects/spring-boot-commercial' && 'Windows' }}
steps:

View File

@ -75,7 +75,7 @@ jobs:
runs-on: ${{ vars.UBUNTU_SMALL || 'ubuntu-latest' }}
steps:
- name: Set up JFrog CLI
uses: jfrog/setup-jfrog-cli@2bc6e55719cd37dfb2f655a1e4f16c3440182a9f # v4.5.13
uses: jfrog/setup-jfrog-cli@c32bf10843e4071112c4ea3abf622d3b27cd8c17 # v4.7.0
env:
JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }}
- name: Promote build

View File

@ -86,7 +86,7 @@ jobs:
runs-on: ${{ vars.UBUNTU_SMALL || 'ubuntu-latest' }}
steps:
- name: Set up JFrog CLI
uses: jfrog/setup-jfrog-cli@2bc6e55719cd37dfb2f655a1e4f16c3440182a9f # v4.5.13
uses: jfrog/setup-jfrog-cli@c32bf10843e4071112c4ea3abf622d3b27cd8c17 # v4.7.0
env:
JF_ENV_SPRING: ${{ vars.COMMERCIAL && secrets.COMMERCIAL_JF_ARTIFACTORY_SPRING || secrets.JF_ARTIFACTORY_SPRING }}
- name: Promote open source build

View File

@ -49,7 +49,7 @@ jobs:
path: send-notification
sparse-checkout: .github/actions/send-notification
- name: Set Up Java
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'liberica'
java-version: 17
@ -59,7 +59,7 @@ jobs:
with:
stable: true
- name: Set Up Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
uses: gradle/actions/setup-gradle@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # v4.4.4
with:
cache-read-only: false
- name: Configure Gradle Properties

View File

@ -1,3 +1,3 @@
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=24.0.2-librca
java=25-librca

382
antora/package-lock.json generated
View File

@ -14,7 +14,7 @@
"@springio/antora-xref-extension": "1.0.0-alpha.4",
"@springio/antora-zip-contents-collector-extension": "1.0.0-alpha.8",
"@springio/asciidoctor-extensions": "1.0.0-alpha.17",
"patch-package": "^8.0.0"
"patch-package": "^8.0.1"
}
},
"node_modules/@antora/asciidoc-loader": {
@ -575,14 +575,6 @@
"resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz",
"integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ=="
},
"node_modules/at-least-node": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/atomic-sleep": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
@ -591,6 +583,21 @@
"node": ">=8.0.0"
}
},
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
"integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"license": "MIT",
"dependencies": {
"possible-typed-array-names": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@ -626,9 +633,10 @@
}
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@ -718,15 +726,44 @@
}
},
"node_modules/call-bind": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
"integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.0",
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"set-function-length": "^1.2.1"
"set-function-length": "^1.2.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/call-bound": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"get-intrinsic": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
@ -1150,6 +1187,20 @@
"resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz",
"integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g=="
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
"gopd": "^1.2.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/duplexify": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
@ -1170,12 +1221,10 @@
}
},
"node_modules/es-define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
"dependencies": {
"get-intrinsic": "^1.2.4"
},
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
@ -1188,6 +1237,18 @@
"node": ">= 0.4"
}
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/event-target-shim": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
@ -1316,23 +1377,38 @@
"safe-buffer": "~5.1.0"
}
},
"node_modules/for-each": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
"integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
"license": "MIT",
"dependencies": {
"is-callable": "^1.2.7"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"node_modules/fs-extra": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
"integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"license": "MIT",
"dependencies": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=10"
"node": ">=12"
}
},
"node_modules/fs-mkdirp-stream": {
@ -1361,15 +1437,21 @@
}
},
"node_modules/get-intrinsic": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@ -1378,6 +1460,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/get-stream": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
@ -1441,11 +1536,12 @@
}
},
"node_modules/gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
"dependencies": {
"get-intrinsic": "^1.1.3"
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@ -1495,10 +1591,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"node_modules/has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
@ -1506,10 +1603,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"node_modules/has-tostringtag": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
@ -1538,9 +1639,10 @@
}
},
"node_modules/help-me/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
@ -1640,6 +1742,18 @@
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"node_modules/is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
"integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@ -1713,6 +1827,21 @@
"node": ">=0.10.0"
}
},
"node_modules/is-typed-array": {
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
"integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
"license": "MIT",
"dependencies": {
"which-typed-array": "^1.1.16"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-unc-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
@ -1856,9 +1985,10 @@
}
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
"integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
"license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
@ -1980,6 +2110,15 @@
"node": ">=4"
}
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@ -2185,38 +2324,30 @@
"safe-buffer": "~5.1.0"
}
},
"node_modules/os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"node_modules/patch-package": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz",
"integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==",
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz",
"integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==",
"license": "MIT",
"dependencies": {
"@yarnpkg/lockfile": "^1.1.0",
"chalk": "^4.1.2",
"ci-info": "^3.7.0",
"cross-spawn": "^7.0.3",
"find-yarn-workspace-root": "^2.0.0",
"fs-extra": "^9.0.0",
"fs-extra": "^10.0.0",
"json-stable-stringify": "^1.0.2",
"klaw-sync": "^6.0.0",
"minimist": "^1.2.6",
"open": "^7.4.2",
"rimraf": "^2.6.3",
"semver": "^7.5.3",
"slash": "^2.0.0",
"tmp": "^0.0.33",
"tmp": "^0.2.4",
"yaml": "^2.2.2"
},
"bin": {
@ -2426,6 +2557,15 @@
"resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz",
"integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA=="
},
"node_modules/possible-typed-array-names": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
"integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@ -2506,9 +2646,10 @@
}
},
"node_modules/readdir-glob/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
@ -2594,18 +2735,6 @@
"node": ">= 0.10"
}
},
"node_modules/rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"deprecated": "Rimraf versions prior to v4 are no longer supported",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
}
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -2704,15 +2833,23 @@
}
},
"node_modules/sha.js": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"version": "2.4.12",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz",
"integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==",
"license": "(MIT AND BSD-3-Clause)",
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
"inherits": "^2.0.4",
"safe-buffer": "^5.2.1",
"to-buffer": "^1.2.0"
},
"bin": {
"sha.js": "bin.js"
},
"engines": {
"node": ">= 0.10"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/shebang-command": {
@ -2954,14 +3091,12 @@
}
},
"node_modules/tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dependencies": {
"os-tmpdir": "~1.0.2"
},
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
"integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
"license": "MIT",
"engines": {
"node": ">=0.6.0"
"node": ">=14.14"
}
},
"node_modules/to-absolute-glob": {
@ -2977,9 +3112,24 @@
}
},
"node_modules/to-buffer": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
"integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz",
"integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==",
"license": "MIT",
"dependencies": {
"isarray": "^2.0.5",
"safe-buffer": "^5.2.1",
"typed-array-buffer": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/to-buffer/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"license": "MIT"
},
"node_modules/to-regex-range": {
"version": "5.0.1",
@ -3003,6 +3153,20 @@
"node": ">= 0.10"
}
},
"node_modules/typed-array-buffer": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
"integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"es-errors": "^1.3.0",
"is-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/uglify-js": {
"version": "3.17.4",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
@ -3045,6 +3209,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
@ -3252,6 +3417,27 @@
"node": ">= 8"
}
},
"node_modules/which-typed-array": {
"version": "1.1.19",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
"integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
"license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.8",
"call-bound": "^1.0.4",
"for-each": "^0.3.5",
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",

View File

@ -12,7 +12,7 @@
"@springio/antora-zip-contents-collector-extension": "1.0.0-alpha.8",
"@asciidoctor/tabs": "1.0.0-beta.6",
"@springio/asciidoctor-extensions": "1.0.0-alpha.17",
"patch-package": "^8.0.0"
"patch-package": "^8.0.1"
},
"config": {
"ui-bundle-url": "https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.18/ui-bundle.zip"

View File

@ -80,7 +80,6 @@ tasks.register("integrationTest") {
ant.propertyref(name: "ivy.class.path")
}
plainlistener()
file(layout.buildDirectory.dir("test-results/integrationTest")).mkdirs()
xmllistener(toDir: resultsDir)
fileset(dir: layout.buildDirectory.dir("it").get().asFile.toString(), includes: "**/build.xml")
}

View File

@ -59,8 +59,6 @@ dependencies {
testImplementation(project(":test-support:spring-boot-gradle-test-support"))
testImplementation(project(":test-support:spring-boot-test-support"))
testImplementation("com.fasterxml.jackson.core:jackson-databind")
testImplementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
testImplementation("com.tngtech.archunit:archunit-junit5:1.4.0")
testImplementation("net.java.dev.jna:jna-platform")
testImplementation("org.apache.commons:commons-compress")
@ -70,6 +68,7 @@ dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-compiler-runner:$kotlinVersion")
testImplementation("org.jetbrains.kotlin:kotlin-daemon-client:$kotlinVersion")
testImplementation("org.tomlj:tomlj:1.0.0")
testImplementation("tools.jackson.core:jackson-databind")
}
repositories {

View File

@ -27,7 +27,7 @@ tasks.named("bootRun") {
tasks.register("configuredSystemProperties") {
doLast {
bootRun.systemProperties.each { k, v ->
bootRun.systemProperties.each { k, v ->
println "$k = $v"
}
}

View File

@ -17,6 +17,7 @@
package org.springframework.boot.gradle.plugin;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.util.concurrent.Callable;
@ -38,6 +39,7 @@ import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator;
import org.gradle.util.GradleVersion;
import org.springframework.boot.gradle.tasks.run.BootRun;
import org.springframework.util.Assert;
/**
* Action that is executed in response to the {@link ApplicationPlugin} being applied.
@ -110,7 +112,7 @@ final class ApplicationPluginAction implements PluginApplicationAction {
}
private String loadResource(String name) {
try (InputStreamReader reader = new InputStreamReader(getClass().getResourceAsStream(name))) {
try (InputStreamReader reader = new InputStreamReader(getResourceAsStream(name))) {
char[] buffer = new char[4096];
int read;
StringWriter writer = new StringWriter();
@ -124,6 +126,12 @@ final class ApplicationPluginAction implements PluginApplicationAction {
}
}
private InputStream getResourceAsStream(String name) {
InputStream stream = getClass().getResourceAsStream(name);
Assert.state(stream != null, "Resource '%s' not found'".formatted(name));
return stream;
}
private void configureFilePermissions(CopySpec copySpec, int mode) {
if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) {
copySpec.filePermissions((filePermissions) -> filePermissions.unix(Integer.toString(mode, 8)));
@ -133,9 +141,13 @@ final class ApplicationPluginAction implements PluginApplicationAction {
}
}
@SuppressWarnings("deprecation")
private void configureFileMode(CopySpec copySpec, int mode) {
copySpec.setFileMode(mode);
try {
copySpec.getClass().getMethod("setFileMode", Integer.class).invoke(copySpec, Integer.valueOf(mode));
}
catch (Exception ex) {
throw new RuntimeException("Failed to set file mode on CopySpec", ex);
}
}
}

View File

@ -17,7 +17,6 @@
package org.springframework.boot.gradle.plugin;
import java.io.File;
import java.util.Collections;
import java.util.Set;
import java.util.jar.JarFile;
@ -33,7 +32,7 @@ import org.gradle.api.specs.Spec;
*/
class JarTypeFileSpec implements Spec<File> {
private static final Set<String> EXCLUDED_JAR_TYPES = Collections.singleton("dependencies-starter");
private static final Set<String> EXCLUDED_JAR_TYPES = Set.of("dependencies-starter", "development-tool");
@Override
public boolean isSatisfiedBy(File file) {

View File

@ -285,7 +285,6 @@ final class JavaPluginAction implements PluginApplicationAction {
private void configureProductionRuntimeClasspathConfiguration(Project project) {
Configuration productionRuntimeClasspath = project.getConfigurations()
.create(SpringBootPlugin.PRODUCTION_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
productionRuntimeClasspath.setVisible(false);
Configuration runtimeClasspath = project.getConfigurations()
.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);
productionRuntimeClasspath.attributes((attributes) -> {

View File

@ -104,7 +104,6 @@ class WarPluginAction implements PluginApplicationAction {
.set(project.provider(() -> javaPluginExtension(project).getTargetCompatibility()));
bootWar.resolvedArtifacts(runtimeClasspath.getIncoming().getArtifacts().getResolvedArtifacts());
});
bootWarProvider.map(War::getClasspath);
return bootWarProvider;
}

View File

@ -43,7 +43,7 @@ import org.springframework.util.Assert;
* @since 3.0.0
*/
@CacheableTask
public class ProcessTestAot extends AbstractAot {
public abstract class ProcessTestAot extends AbstractAot {
private @Nullable FileCollection classpathRoots;

View File

@ -48,7 +48,7 @@ public abstract class BuildInfoProperties implements Serializable {
private final SetProperty<String> excludes;
private final Supplier<String> creationTime = () -> DateTimeFormatter.ISO_INSTANT.format(Instant.now());
private final Supplier<@Nullable String> creationTime = () -> DateTimeFormatter.ISO_INSTANT.format(Instant.now());
@Inject
public BuildInfoProperties(Project project, SetProperty<String> excludes) {
@ -143,14 +143,18 @@ public abstract class BuildInfoProperties implements Serializable {
}
private <T> @Nullable T getIfNotExcluded(Property<T> property, String name) {
return getIfNotExcluded(property, name, () -> null);
Supplier<@Nullable T> supplier = () -> null;
return getIfNotExcluded(property, name, supplier);
}
private <T> @Nullable T getIfNotExcluded(Property<T> property, String name, Supplier<T> defaultValue) {
private <T> @Nullable T getIfNotExcluded(Property<T> property, String name, Supplier<@Nullable T> defaultValue) {
if (this.excludes.getOrElse(Collections.emptySet()).contains(name)) {
return null;
}
return property.getOrElse(defaultValue.get());
if (property.isPresent()) {
return property.get();
}
return defaultValue.get();
}
private Map<String, String> coerceToStringValues(Map<String, Object> input) {
@ -159,7 +163,9 @@ public abstract class BuildInfoProperties implements Serializable {
if (value instanceof Provider<?> provider) {
value = provider.getOrNull();
}
output.put(key, (value != null) ? value.toString() : null);
if (value != null) {
output.put(key, value.toString());
}
});
return output;
}
@ -167,7 +173,12 @@ public abstract class BuildInfoProperties implements Serializable {
private Map<String, Object> applyExclusions(Map<String, Object> input) {
Map<String, Object> output = new HashMap<>();
Set<String> exclusions = this.excludes.getOrElse(Collections.emptySet());
input.forEach((key, value) -> output.put(key, (!exclusions.contains(key)) ? value : null));
input.forEach((key, value) -> {
boolean isExcluded = exclusions.contains(key);
if (!isExcluded) {
output.put(key, value);
}
});
return output;
}

View File

@ -34,8 +34,6 @@ import org.gradle.api.tasks.Nested;
import org.gradle.api.tasks.Optional;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.loader.tools.LoaderImplementation;
/**
* A Spring Boot "fat" archive task.
*
@ -137,15 +135,6 @@ public interface BootArchive extends Task {
*/
void resolvedArtifacts(Provider<Set<ResolvedArtifactResult>> resolvedArtifacts);
/**
* The loader implementation that should be used with the archive.
* @return the loader implementation
* @since 3.2.0
*/
@Input
@Optional
Property<LoaderImplementation> getLoaderImplementation();
/**
* Returns whether the JAR tools should be included as a dependency in the layered
* archive.

View File

@ -22,32 +22,24 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.function.Function;
import org.gradle.api.file.ConfigurableFilePermissions;
import org.gradle.api.file.CopySpec;
import org.gradle.api.file.FileCopyDetails;
import org.gradle.api.file.FileTreeElement;
import org.gradle.api.file.RelativePath;
import org.gradle.api.internal.file.copy.CopyAction;
import org.gradle.api.internal.file.copy.CopyActionProcessingStream;
import org.gradle.api.internal.file.copy.FileCopyDetailsInternal;
import org.gradle.api.java.archives.Attributes;
import org.gradle.api.java.archives.Manifest;
import org.gradle.api.provider.Property;
import org.gradle.api.specs.Spec;
import org.gradle.api.specs.Specs;
import org.gradle.api.tasks.WorkResult;
import org.gradle.api.tasks.bundling.Jar;
import org.gradle.api.tasks.util.PatternSet;
import org.gradle.util.GradleVersion;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.loader.tools.LoaderImplementation;
/**
* Support class for implementations of {@link BootArchive}.
*
@ -123,13 +115,11 @@ class BootArchiveSupport {
return (version != null) ? version : "unknown";
}
CopyAction createCopyAction(Jar jar, ResolvedDependencies resolvedDependencies,
LoaderImplementation loaderImplementation, boolean supportsSignatureFile) {
return createCopyAction(jar, resolvedDependencies, loaderImplementation, supportsSignatureFile, null, null);
CopyAction createCopyAction(Jar jar, ResolvedDependencies resolvedDependencies, boolean supportsSignatureFile) {
return createCopyAction(jar, resolvedDependencies, supportsSignatureFile, null, null);
}
CopyAction createCopyAction(Jar jar, ResolvedDependencies resolvedDependencies,
LoaderImplementation loaderImplementation, boolean supportsSignatureFile,
CopyAction createCopyAction(Jar jar, ResolvedDependencies resolvedDependencies, boolean supportsSignatureFile,
@Nullable LayerResolver layerResolver, @Nullable String jarmodeToolsLocation) {
File output = jar.getArchiveFile().get().getAsFile();
Manifest manifest = jar.getManifest();
@ -145,9 +135,8 @@ class BootArchiveSupport {
String encoding = jar.getMetadataCharset();
CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirPermissions,
filePermissions, includeDefaultLoader, jarmodeToolsLocation, requiresUnpack, exclusions, launchScript,
librarySpec, compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver,
loaderImplementation);
return jar.isReproducibleFileOrder() ? new ReproducibleOrderingCopyAction(action) : action;
librarySpec, compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver);
return action;
}
private @Nullable Integer getUnixNumericDirPermissions(CopySpec copySpec) {
@ -164,14 +153,22 @@ class BootArchiveSupport {
return permissions.isPresent() ? permissions.get().toUnixNumeric() : null;
}
@SuppressWarnings("deprecation")
private @Nullable Integer getDirMode(CopySpec copySpec) {
return copySpec.getDirMode();
try {
return (Integer) copySpec.getClass().getMethod("getDirMode").invoke(copySpec);
}
catch (Exception ex) {
throw new RuntimeException("Failed to get dir mode from CopySpec", ex);
}
}
@SuppressWarnings("deprecation")
private @Nullable Integer getFileMode(CopySpec copySpec) {
return copySpec.getFileMode();
try {
return (Integer) copySpec.getClass().getMethod("getFileMode").invoke(copySpec);
}
catch (Exception ex) {
throw new RuntimeException("Failed to get file mode from CopySpec", ex);
}
}
private boolean isUsingDefaultLoader(Jar jar) {
@ -234,26 +231,4 @@ class BootArchiveSupport {
details.setRelativePath(details.getRelativeSourcePath());
}
/**
* {@link CopyAction} variant that sorts entries to ensure reproducible ordering.
*/
private static final class ReproducibleOrderingCopyAction implements CopyAction {
private final CopyAction delegate;
private ReproducibleOrderingCopyAction(CopyAction delegate) {
this.delegate = delegate;
}
@Override
public WorkResult execute(CopyActionProcessingStream stream) {
return this.delegate.execute((action) -> {
Map<RelativePath, FileCopyDetailsInternal> detailsByPath = new TreeMap<>();
stream.process((details) -> detailsByPath.put(details.getRelativePath(), details));
detailsByPath.values().forEach(action::processFile);
});
}
}
}

View File

@ -41,6 +41,7 @@ import org.gradle.work.DisableCachingByDefault;
import org.springframework.boot.buildpack.platform.build.BuildRequest;
import org.springframework.boot.buildpack.platform.build.Builder;
import org.springframework.boot.buildpack.platform.build.BuildpackReference;
import org.springframework.boot.buildpack.platform.build.Cache;
import org.springframework.boot.buildpack.platform.build.Creator;
import org.springframework.boot.buildpack.platform.build.PullPolicy;
import org.springframework.boot.buildpack.platform.docker.transport.DockerEngineException;
@ -460,14 +461,17 @@ public abstract class BootBuildImage extends DefaultTask {
}
private BuildRequest customizeCaches(BuildRequest request) {
if (this.buildWorkspace.asCache() != null) {
request = request.withBuildWorkspace((this.buildWorkspace.asCache()));
Cache buildWorkspaceCache = this.buildWorkspace.asCache();
if (buildWorkspaceCache != null) {
request = request.withBuildWorkspace(buildWorkspaceCache);
}
if (this.buildCache.asCache() != null) {
request = request.withBuildCache(this.buildCache.asCache());
Cache buildCache = this.buildCache.asCache();
if (buildCache != null) {
request = request.withBuildCache(buildCache);
}
if (this.launchCache.asCache() != null) {
request = request.withLaunchCache(this.launchCache.asCache());
Cache launchCache = this.launchCache.asCache();
if (launchCache != null) {
request = request.withLaunchCache(launchCache);
}
return request;
}

View File

@ -38,8 +38,6 @@ import org.gradle.api.tasks.bundling.Jar;
import org.gradle.work.DisableCachingByDefault;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.loader.tools.LoaderImplementation;
/**
* A custom {@link Jar} task that produces a Spring Boot executable jar.
*
@ -145,13 +143,12 @@ public abstract class BootJar extends Jar implements BootArchive {
@Override
protected CopyAction createCopyAction() {
LoaderImplementation loaderImplementation = getLoaderImplementation().getOrElse(LoaderImplementation.DEFAULT);
LayerResolver layerResolver = null;
if (!isLayeredDisabled()) {
layerResolver = new LayerResolver(this.resolvedDependencies, this.layered, this::isLibrary);
}
String jarmodeToolsLocation = isIncludeJarmodeTools() ? LIB_DIRECTORY : null;
return this.support.createCopyAction(this, this.resolvedDependencies, loaderImplementation, true, layerResolver,
return this.support.createCopyAction(this, this.resolvedDependencies, true, layerResolver,
jarmodeToolsLocation);
}

View File

@ -38,8 +38,6 @@ import org.gradle.api.tasks.bundling.War;
import org.gradle.work.DisableCachingByDefault;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.loader.tools.LoaderImplementation;
/**
* A custom {@link War} task that produces a Spring Boot executable war.
*
@ -119,14 +117,13 @@ public abstract class BootWar extends War implements BootArchive {
@Override
protected CopyAction createCopyAction() {
LoaderImplementation loaderImplementation = getLoaderImplementation().getOrElse(LoaderImplementation.DEFAULT);
LayerResolver layerResolver = null;
if (!isLayeredDisabled()) {
layerResolver = new LayerResolver(this.resolvedDependencies, this.layered, this::isLibrary);
}
String jarmodeToolsLocation = isIncludeJarmodeTools() ? LIB_DIRECTORY : null;
return this.support.createCopyAction(this, this.resolvedDependencies, loaderImplementation, false,
layerResolver, jarmodeToolsLocation);
return this.support.createCopyAction(this, this.resolvedDependencies, false, layerResolver,
jarmodeToolsLocation);
}
private boolean isIncludeJarmodeTools() {

View File

@ -22,13 +22,11 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.Collection;
import java.util.HashMap;
import java.util.HexFormat;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@ -62,7 +60,6 @@ import org.springframework.boot.loader.tools.JarModeLibrary;
import org.springframework.boot.loader.tools.Layer;
import org.springframework.boot.loader.tools.LayersIndex;
import org.springframework.boot.loader.tools.LibraryCoordinates;
import org.springframework.boot.loader.tools.LoaderImplementation;
import org.springframework.boot.loader.tools.NativeImageArgFile;
import org.springframework.boot.loader.tools.ReachabilityMetadataProperties;
import org.springframework.util.Assert;
@ -111,7 +108,7 @@ class BootZipCopyAction implements CopyAction {
private final Function<FileCopyDetails, ZipCompression> compressionResolver;
private final String encoding;
private final @Nullable String encoding;
private final ResolvedDependencies resolvedDependencies;
@ -119,15 +116,13 @@ class BootZipCopyAction implements CopyAction {
private final @Nullable LayerResolver layerResolver;
private final LoaderImplementation loaderImplementation;
BootZipCopyAction(File output, Manifest manifest, boolean preserveFileTimestamps, @Nullable Integer dirMode,
@Nullable Integer fileMode, boolean includeDefaultLoader, @Nullable String jarmodeToolsLocation,
Spec<FileTreeElement> requiresUnpack, Spec<FileTreeElement> exclusions,
@Nullable LaunchScriptConfiguration launchScript, Spec<FileCopyDetails> librarySpec,
Function<FileCopyDetails, ZipCompression> compressionResolver, String encoding,
Function<FileCopyDetails, ZipCompression> compressionResolver, @Nullable String encoding,
ResolvedDependencies resolvedDependencies, boolean supportsSignatureFile,
@Nullable LayerResolver layerResolver, LoaderImplementation loaderImplementation) {
@Nullable LayerResolver layerResolver) {
this.output = output;
this.manifest = manifest;
this.preserveFileTimestamps = preserveFileTimestamps;
@ -144,7 +139,6 @@ class BootZipCopyAction implements CopyAction {
this.resolvedDependencies = resolvedDependencies;
this.supportsSignatureFile = supportsSignatureFile;
this.layerResolver = layerResolver;
this.loaderImplementation = loaderImplementation;
}
@Override
@ -328,8 +322,7 @@ class BootZipCopyAction implements CopyAction {
// Always write loader entries after META-INF directory (see gh-16698)
return;
}
LoaderZipEntries loaderEntries = new LoaderZipEntries(getTime(), getDirMode(), getFileMode(),
BootZipCopyAction.this.loaderImplementation);
LoaderZipEntries loaderEntries = new LoaderZipEntries(getTime(), getDirMode(), getFileMode());
this.writtenLoaderEntries = loaderEntries.writeTo(this.out);
if (BootZipCopyAction.this.layerResolver != null) {
for (String name : this.writtenLoaderEntries.getFiles()) {
@ -390,7 +383,8 @@ class BootZipCopyAction implements CopyAction {
if (classPathIndex != null) {
Set<String> libraryNames = this.writtenLibraries.keySet();
List<String> lines = libraryNames.stream().map((line) -> "- \"" + line + "\"").toList();
ZipEntryContentWriter writer = ZipEntryContentWriter.fromLines(BootZipCopyAction.this.encoding, lines);
ZipEntryContentWriter writer = ZipEntryContentWriter.fromLines((BootZipCopyAction.this.encoding != null)
? BootZipCopyAction.this.encoding : StandardCharsets.UTF_8.name(), lines);
writeEntry(classPathIndex, writer, true);
}
}
@ -415,7 +409,8 @@ class BootZipCopyAction implements CopyAction {
}
NativeImageArgFile argFile = new NativeImageArgFile(excludes);
argFile.writeIfNecessary((lines) -> {
ZipEntryContentWriter writer = ZipEntryContentWriter.fromLines(BootZipCopyAction.this.encoding, lines);
ZipEntryContentWriter writer = ZipEntryContentWriter.fromLines((BootZipCopyAction.this.encoding != null)
? BootZipCopyAction.this.encoding : StandardCharsets.UTF_8.name(), lines);
writeEntry(NativeImageArgFile.LOCATION, writer, true);
});
}
@ -509,9 +504,13 @@ class BootZipCopyAction implements CopyAction {
? details.getPermissions().toUnixNumeric() : getMode(details);
}
@SuppressWarnings("deprecation")
private int getMode(FileCopyDetails details) {
return details.getMode();
try {
return (int) details.getClass().getMethod("getMode").invoke(details);
}
catch (Exception ex) {
throw new RuntimeException("Failed to get mode from FileCopyDetails", ex);
}
}
}
@ -587,36 +586,24 @@ class BootZipCopyAction implements CopyAction {
private static final int BUFFER_SIZE = 32 * 1024;
private final @Nullable MessageDigest messageDigest;
private final boolean unpack;
private final CRC32 crc = new CRC32();
private long size;
StoredEntryPreparator(InputStream inputStream, boolean unpack) throws IOException {
this.messageDigest = (unpack) ? sha1Digest() : null;
this.unpack = unpack;
try (inputStream) {
load(inputStream);
}
}
private static MessageDigest sha1Digest() {
try {
return MessageDigest.getInstance("SHA-1");
}
catch (NoSuchAlgorithmException ex) {
throw new IllegalStateException(ex);
}
}
private void load(InputStream inputStream) throws IOException {
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
this.crc.update(buffer, 0, bytesRead);
if (this.messageDigest != null) {
this.messageDigest.update(buffer, 0, bytesRead);
}
this.size += bytesRead;
}
}
@ -626,8 +613,8 @@ class BootZipCopyAction implements CopyAction {
entry.setCompressedSize(this.size);
entry.setCrc(this.crc.getValue());
entry.setMethod(ZipEntry.STORED);
if (this.messageDigest != null) {
entry.setComment("UNPACK:" + HexFormat.of().formatHex(this.messageDigest.digest()));
if (this.unpack) {
entry.setComment("UNPACK");
}
}

View File

@ -29,7 +29,7 @@ import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.gradle.api.file.FileTreeElement;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.loader.tools.LoaderImplementation;
import org.springframework.util.Assert;
import org.springframework.util.StreamUtils;
/**
@ -41,27 +41,22 @@ import org.springframework.util.StreamUtils;
*/
class LoaderZipEntries {
private final LoaderImplementation loaderImplementation;
private final @Nullable Long entryTime;
private final int dirMode;
private final int fileMode;
LoaderZipEntries(@Nullable Long entryTime, int dirMode, int fileMode,
@Nullable LoaderImplementation loaderImplementation) {
LoaderZipEntries(@Nullable Long entryTime, int dirMode, int fileMode) {
this.entryTime = entryTime;
this.dirMode = dirMode;
this.fileMode = fileMode;
this.loaderImplementation = (loaderImplementation != null) ? loaderImplementation
: LoaderImplementation.DEFAULT;
}
WrittenEntries writeTo(ZipArchiveOutputStream out) throws IOException {
WrittenEntries written = new WrittenEntries();
try (ZipInputStream loaderJar = new ZipInputStream(
getClass().getResourceAsStream("/" + this.loaderImplementation.getJarResourceName()))) {
getResourceAsStream("/META-INF/loader/spring-boot-loader.jar"))) {
java.util.zip.ZipEntry entry = loaderJar.getNextEntry();
while (entry != null) {
if (entry.isDirectory() && !entry.getName().equals("META-INF/")) {
@ -78,6 +73,12 @@ class LoaderZipEntries {
return written;
}
private InputStream getResourceAsStream(String name) {
InputStream stream = getClass().getResourceAsStream(name);
Assert.state(stream != null, "Resource '%s not found'".formatted(name));
return stream;
}
private void writeDirectory(ZipArchiveEntry entry, ZipArchiveOutputStream out) throws IOException {
prepareEntry(entry, this.dirMode);
out.putArchiveEntry(entry);

View File

@ -124,7 +124,7 @@ class PackagingDocumentationTests {
try (JarFile jar = new JarFile(file)) {
JarEntry entry = jar.getJarEntry("BOOT-INF/lib/jruby-complete-1.7.25.jar");
assertThat(entry).isNotNull();
assertThat(entry.getComment()).startsWith("UNPACK:");
assertThat(entry.getComment()).isEqualTo("UNPACK");
}
}

View File

@ -24,8 +24,6 @@ import java.time.format.DateTimeFormatter;
import java.util.Properties;
import org.gradle.api.Project;
import org.gradle.api.internal.project.ProjectInternal;
import org.gradle.initialization.GradlePropertiesController;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
@ -173,11 +171,7 @@ class BuildInfoTests {
private Project createProject(String projectName) {
File projectDir = new File(this.temp, projectName);
Project project = GradleProjectBuilder.builder().withProjectDir(projectDir).withName(projectName).build();
((ProjectInternal) project).getServices()
.get(GradlePropertiesController.class)
.loadGradlePropertiesFrom(projectDir, false);
return project;
return GradleProjectBuilder.builder().withProjectDir(projectDir).withName(projectName).build();
}
private BuildInfo createTask(Project project) {

View File

@ -108,16 +108,6 @@ abstract class AbstractBootArchiveIntegrationTests {
assertThat(firstHash).isEqualTo(secondHash);
}
@TestTemplate
void classicLoader() throws IOException {
assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome())
.isEqualTo(TaskOutcome.SUCCESS);
File jar = new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0];
try (JarFile jarFile = new JarFile(jar)) {
assertThat(jarFile.getEntry("org/springframework/boot/loader/LaunchedURLClassLoader.class")).isNotNull();
}
}
@TestTemplate
void upToDateWhenBuiltTwice() {
assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome())
@ -243,14 +233,8 @@ abstract class AbstractBootArchiveIntegrationTests {
.filter((entry) -> !entry.isDirectory())
.map(JarEntry::getName)
.filter((name) -> name.startsWith(this.libPath));
if (this.gradleBuild.gradleVersionIsLessThan("9.0.0-rc-1")) {
assertThat(libEntryNames).containsExactly(this.libPath + "two-1.0.jar",
this.libPath + "commons-io-2.19.0.jar");
}
else {
assertThat(libEntryNames).containsExactly(this.libPath + "commons-io-2.19.0.jar",
this.libPath + "two-1.0.jar");
}
assertThat(libEntryNames).containsExactly(this.libPath + "two-1.0.jar",
this.libPath + "commons-io-2.19.0.jar");
}
}
@ -293,6 +277,7 @@ abstract class AbstractBootArchiveIntegrationTests {
void jarTypeFilteringIsApplied() throws IOException {
File flatDirRepository = new File(this.gradleBuild.getProjectDir(), "repository");
createDependenciesStarterJar(new File(flatDirRepository, "starter.jar"));
createDependenciesDeveloperToolsJar(new File(flatDirRepository, "devonly.jar"));
createStandardJar(new File(flatDirRepository, "standard.jar"));
assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome())
.isEqualTo(TaskOutcome.SUCCESS);
@ -669,6 +654,10 @@ abstract class AbstractBootArchiveIntegrationTests {
createJar(location, (attributes) -> attributes.putValue("Spring-Boot-Jar-Type", "dependencies-starter"));
}
private void createDependenciesDeveloperToolsJar(File location) throws IOException {
createJar(location, (attributes) -> attributes.putValue("Spring-Boot-Jar-Type", "development-tool"));
}
private void createJar(File location, Consumer<Attributes> attributesConfigurer) throws IOException {
location.getParentFile().mkdirs();
Manifest manifest = new Manifest();

View File

@ -27,6 +27,8 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.nio.file.attribute.PosixFilePermission;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
@ -35,6 +37,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
@ -65,7 +68,6 @@ import org.junit.jupiter.api.io.TempDir;
import org.springframework.boot.gradle.junit.GradleProjectBuilder;
import org.springframework.boot.loader.tools.DefaultLaunchScript;
import org.springframework.boot.loader.tools.JarModeLibrary;
import org.springframework.boot.loader.tools.LoaderImplementation;
import org.springframework.util.FileCopyUtils;
import static org.assertj.core.api.Assertions.assertThat;
@ -283,17 +285,6 @@ abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
}
}
@Test
void loaderIsWrittenToTheRootOfTheJarWhenUsingClassicLoader() throws IOException {
this.task.getMainClass().set("com.example.Main");
this.task.getLoaderImplementation().set(LoaderImplementation.CLASSIC);
executeTask();
try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) {
assertThat(jarFile.getEntry("org/springframework/boot/loader/LaunchedURLClassLoader.class")).isNotNull();
assertThat(jarFile.getEntry("org/springframework/boot/loader/")).isNotNull();
}
}
@Test
void unpackCommentIsAddedToEntryIdentifiedByAPattern() throws IOException {
this.task.getMainClass().set("com.example.Main");
@ -301,7 +292,7 @@ abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
this.task.requiresUnpack("**/one.jar");
executeTask();
try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) {
assertThat(jarFile.getEntry(this.libPath + "one.jar").getComment()).startsWith("UNPACK:");
assertThat(jarFile.getEntry(this.libPath + "one.jar").getComment()).isEqualTo("UNPACK");
assertThat(jarFile.getEntry(this.libPath + "two.jar").getComment()).isNull();
}
}
@ -313,7 +304,7 @@ abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
this.task.requiresUnpack((element) -> element.getName().endsWith("two.jar"));
executeTask();
try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) {
assertThat(jarFile.getEntry(this.libPath + "two.jar").getComment()).startsWith("UNPACK:");
assertThat(jarFile.getEntry(this.libPath + "two.jar").getComment()).isEqualTo("UNPACK");
assertThat(jarFile.getEntry(this.libPath + "one.jar").getComment()).isNull();
}
}
@ -419,23 +410,46 @@ abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
}
@Test
void reproducibleOrderingCanBeEnabled() throws IOException {
void archiveIsReproducibleByDefault() throws IOException {
this.task.getMainClass().set("com.example.Main");
this.task.from(newFile("bravo.txt"), newFile("alpha.txt"), newFile("charlie.txt"));
this.task.setReproducibleFileOrder(true);
this.task.from(newFiles("files/b/bravo.txt", "files/a/alpha.txt", "files/c/charlie.txt"));
executeTask();
assertThat(this.task.getArchiveFile().get().getAsFile()).exists();
List<String> textFiles = new ArrayList<>();
List<String> files = new ArrayList<>();
try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) {
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
if (entry.getName().endsWith(".txt")) {
textFiles.add(entry.getName());
assertThat(entry.getLastModifiedTime().toMillis())
.isEqualTo(ZipEntryConstants.CONSTANT_TIME_FOR_ZIP_ENTRIES);
if (entry.getName().startsWith("files/")) {
files.add(entry.getName());
}
}
}
assertThat(files).containsExactly("files/", "files/a/", "files/a/alpha.txt", "files/b/", "files/b/bravo.txt",
"files/c/", "files/c/charlie.txt");
}
@Test
void archiveReproducibilityCanBeDisabled() throws IOException {
this.task.getMainClass().set("com.example.Main");
this.task.from(newFiles("files/b/bravo.txt", "files/a/alpha.txt", "files/c/charlie.txt"));
this.task.setPreserveFileTimestamps(true);
this.task.setReproducibleFileOrder(false);
executeTask();
assertThat(this.task.getArchiveFile().get().getAsFile()).exists();
try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) {
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
if (entry.getName().endsWith(".txt") || entry.getName().startsWith("BOOT-INF/lib/")) {
OffsetDateTime lastModifiedTime = entry.getLastModifiedTime().toInstant().atOffset(ZoneOffset.UTC);
assertThat(lastModifiedTime)
.isNotEqualTo(OffsetDateTime.of(1980, 2, 1, 0, 0, 0, 0, ZoneOffset.UTC));
}
}
}
assertThat(textFiles).containsExactly("alpha.txt", "bravo.txt", "charlie.txt");
}
@Test
@ -675,6 +689,19 @@ abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
return entryNames;
}
protected File newFiles(String... names) throws IOException {
File dir = new File(this.temp, UUID.randomUUID().toString());
dir.mkdir();
List<File> files = new ArrayList<>();
for (String name : names) {
File file = new File(dir, name);
file.getParentFile().mkdirs();
file.createNewFile();
files.add(file);
}
return dir;
}
protected File newFile(String name) throws IOException {
File file = new File(this.temp, name);
file.createNewFile();

View File

@ -30,8 +30,8 @@ import org.junit.jupiter.api.io.TempDir;
import org.springframework.boot.buildpack.platform.build.BuildRequest;
import org.springframework.boot.buildpack.platform.build.BuildpackReference;
import org.springframework.boot.buildpack.platform.build.PullPolicy;
import org.springframework.boot.buildpack.platform.docker.ImagePlatform;
import org.springframework.boot.buildpack.platform.docker.type.Binding;
import org.springframework.boot.buildpack.platform.docker.type.ImagePlatform;
import org.springframework.boot.buildpack.platform.docker.type.ImageReference;
import org.springframework.boot.gradle.junit.GradleProjectBuilder;

View File

@ -66,18 +66,10 @@ class BootJarIntegrationTests extends AbstractBootArchiveIntegrationTests {
copyClasspathApplication();
BuildResult result = this.gradleBuild.build("launch");
String output = result.getOutput();
if (this.gradleBuild.gradleVersionIsLessThan("9.0.0-rc-1")) {
assertThat(output).containsPattern("1\\. .*classes");
assertThat(output).containsPattern("2\\. .*library-1.0-SNAPSHOT.jar");
assertThat(output).containsPattern("3\\. .*commons-lang3-3.9.jar");
assertThat(output).containsPattern("4\\. .*spring-boot-jarmode-tools.*.jar");
}
else {
assertThat(output).containsPattern("1\\. .*classes");
assertThat(output).containsPattern("2\\. .*commons-lang3-3.9.jar");
assertThat(output).containsPattern("3\\. .*library-1.0-SNAPSHOT.jar");
assertThat(output).containsPattern("4\\. .*spring-boot-jarmode-tools.*.jar");
}
assertThat(output).containsPattern("1\\. .*classes");
assertThat(output).containsPattern("2\\. .*library-1.0-SNAPSHOT.jar");
assertThat(output).containsPattern("3\\. .*commons-lang3-3.9.jar");
assertThat(output).containsPattern("4\\. .*spring-boot-jarmode-tools.*.jar");
assertThat(output).doesNotContain("5. ");
}
@ -86,18 +78,10 @@ class BootJarIntegrationTests extends AbstractBootArchiveIntegrationTests {
copyClasspathApplication();
BuildResult result = this.gradleBuild.build("launch");
String output = result.getOutput();
if (this.gradleBuild.gradleVersionIsLessThan("9.0.0-rc-1")) {
assertThat(output).containsPattern("1\\. .*classes");
assertThat(output).containsPattern("2\\. .*spring-boot-jarmode-tools.*.jar");
assertThat(output).containsPattern("3\\. .*library-1.0-SNAPSHOT.jar");
assertThat(output).containsPattern("4\\. .*commons-lang3-3.9.jar");
}
else {
assertThat(output).containsPattern("1\\. .*classes");
assertThat(output).containsPattern("2\\. .*spring-boot-jarmode-tools.*.jar");
assertThat(output).containsPattern("3\\. .*commons-lang3-3.9.jar");
assertThat(output).containsPattern("4\\. .*library-1.0-SNAPSHOT.jar");
}
assertThat(output).containsPattern("1\\. .*classes");
assertThat(output).containsPattern("2\\. .*spring-boot-jarmode-tools.*.jar");
assertThat(output).containsPattern("3\\. .*library-1.0-SNAPSHOT.jar");
assertThat(output).containsPattern("4\\. .*commons-lang3-3.9.jar");
assertThat(output).doesNotContain("5. ");
}

View File

@ -22,9 +22,6 @@ import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.core.Versioned;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import com.sun.jna.Platform;
import io.spring.gradle.dependencymanagement.DependencyManagementPlugin;
import org.antlr.v4.runtime.Lexer;
@ -39,6 +36,8 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin;
import org.jetbrains.kotlin.project.model.LanguageSettings;
import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion;
import org.tomlj.Toml;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.JacksonModule;
import org.springframework.asm.ClassVisitor;
import org.springframework.boot.buildpack.platform.build.BuildRequest;
@ -103,9 +102,8 @@ public class PluginClasspathGradleBuild extends GradleBuild {
classpath.add(new File(pathOfJarContaining(HttpClientConnectionManager.class)));
classpath.add(new File(pathOfJarContaining(HttpRequest.class)));
classpath.add(new File(pathOfJarContaining(HttpVersionPolicy.class)));
classpath.add(new File(pathOfJarContaining(Module.class)));
classpath.add(new File(pathOfJarContaining(Versioned.class)));
classpath.add(new File(pathOfJarContaining(ParameterNamesModule.class)));
classpath.add(new File(pathOfJarContaining(JacksonModule.class)));
classpath.add(new File(pathOfJarContaining(JsonParser.class)));
classpath.add(new File(pathOfJarContaining("com.github.openjson.JSONObject")));
classpath.add(new File(pathOfJarContaining(JsonView.class)));
classpath.add(new File(pathOfJarContaining(Platform.class)));

View File

@ -29,7 +29,7 @@ bootJar {
baseName = 'foo'
}
else {
archiveBaseName = 'foo'
archiveBaseName = 'foo'
}
}

View File

@ -29,7 +29,7 @@ bootWar {
baseName = 'foo'
}
else {
archiveBaseName = 'foo'
archiveBaseName = 'foo'
}
}

View File

@ -42,7 +42,7 @@ dependencies {
}
task('processTestAotClasspath') {
dependsOn configurations.processTestAotClasspath
dependsOn configurations.processTestAotClasspath
doFirst {
configurations.processTestAotClasspath.files.each { println it }
}

View File

@ -42,7 +42,7 @@ dependencies {
}
task('processTestAotClasspath') {
dependsOn configurations.processTestAotClasspath
dependsOn configurations.processTestAotClasspath
doFirst {
configurations.processTestAotClasspath.files.each { println it }
}

View File

@ -33,7 +33,7 @@ bootJar {
include "*:*:*SNAPSHOT"
}
intoLayer("commons-dependencies") {
include "org.apache.commons:*"
include "org.apache.commons:*"
}
intoLayer("dependencies")
}

View File

@ -48,7 +48,7 @@ bootJar {
includeProjectDependencies()
}
intoLayer("commons-dependencies") {
include "org.apache.commons:*"
include "org.apache.commons:*"
}
intoLayer("dependencies")
}

View File

@ -21,6 +21,8 @@ plugins {
bootJar {
mainClass = 'com.example.Application'
preserveFileTimestamps = false
reproducibleFileOrder = true
if (GradleVersion.current().compareTo(GradleVersion.version("9.0.0-rc-1")) < 0) {
preserveFileTimestamps = false
reproducibleFileOrder = true
}
}

View File

@ -21,6 +21,8 @@ plugins {
bootWar {
mainClass = 'com.example.Application'
preserveFileTimestamps = false
reproducibleFileOrder = true
if (GradleVersion.current().compareTo(GradleVersion.version("9.0.0-rc-1")) < 0) {
preserveFileTimestamps = false
reproducibleFileOrder = true
}
}

View File

@ -6,7 +6,7 @@
<!-- tag::different-versions[] -->
<properties>
<slf4j.version>1.7.30</slf4j.version>
<spring-data-releasetrain.version>Moore-SR6</spring-data-releasetrain.version>
<spring-data-bom.version>2024.1.10</spring-data-bom.version>
</properties>
<!-- end::different-versions[] -->

View File

@ -24,8 +24,8 @@
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>2020.0.0-SR1</version>
<artifactId>spring-data-bom</artifactId>
<version>2024.1.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>

View File

@ -67,6 +67,9 @@ include::example$using/different-versions-pom.xml[tags=different-versions]
Browse the xref:appendix:dependency-versions/properties.adoc[Dependency Versions Properties] section in the Spring Boot reference for a complete list of dependency version properties.
WARNING: Each Spring Boot release is designed and tested against a specific set of third-party dependencies.
Overriding versions may cause compatibility issues and should be done with care.
[[using.import]]

View File

@ -159,7 +159,7 @@ abstract class AbstractArchiveIntegrationTests {
Optional<JarEntry> match = entries.filter((entry) -> entry.getName().startsWith(prefix))
.findFirst();
assertThat(match).as("Name starting with %s", prefix)
.hasValueSatisfying((entry) -> assertThat(entry.getComment()).startsWith("UNPACK:"));
.hasValueSatisfying((entry) -> assertThat(entry.getComment()).isEqualTo("UNPACK"));
});
});
return this;

View File

@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.contentOf;
* @author Stephane Nicoll
* @author Andy Wilkinson
* @author Scott Frederick
* @author Moritz Halbritter
*/
@ExtendWith(MavenBuildExtension.class)
class AotTests {
@ -102,6 +103,15 @@ class AotTests {
});
}
@TestTemplate
void whenAotRunsWithSystemPropertiesSourcesAreGenerated(MavenBuild mavenBuild) {
mavenBuild.project("aot-system-properties").goals("package").execute((project) -> {
Path aotDirectory = project.toPath().resolve("target/spring-aot/main");
assertThat(collectRelativePaths(aotDirectory.resolve("sources")))
.contains(Path.of("org", "test", "TestProfileConfiguration__BeanDefinitions.java"));
});
}
@TestTemplate
void whenAotRunsWithJvmArgumentsSourcesAreGenerated(MavenBuild mavenBuild) {
mavenBuild.project("aot-jvm-arguments").goals("package").execute((project) -> {
@ -166,6 +176,17 @@ class AotTests {
});
}
@TestTemplate
void whenAotRunsWithDevtoolsInClasspathItIsExcluded(MavenBuild mavenBuild) {
mavenBuild.project("aot-exclude-devtools").goals("package").execute((project) -> {
Path aotDirectory = project.toPath().resolve("target/spring-aot/main");
assertThat(aotDirectory).exists();
Path sourcesDirectory = aotDirectory.resolve("sources");
assertThat(sourcesDirectory).exists();
assertThat(collectRelativePaths(sourcesDirectory)).isNotEmpty();
});
}
@TestTemplate
void whenAotTestRunsSourcesAndResourcesAreGenerated(MavenBuild mavenBuild) {
mavenBuild.project("aot-test").goals("test").execute((project) -> {
@ -180,6 +201,17 @@ class AotTests {
});
}
@TestTemplate
void whenTestAotRunsWithDevtoolsInClasspathItIsExcluded(MavenBuild mavenBuild) {
mavenBuild.project("aot-test-exclude-devtools").goals("process-test-classes").execute((project) -> {
Path aotDirectory = project.toPath().resolve("target/spring-aot/test");
assertThat(aotDirectory).exists();
Path sourcesDirectory = aotDirectory.resolve("sources");
assertThat(sourcesDirectory).exists();
assertThat(collectRelativePaths(sourcesDirectory)).isNotEmpty();
});
}
List<Path> collectRelativePaths(Path sourceDirectory) {
try (Stream<Path> pathStream = Files.walk(sourceDirectory)) {
return pathStream.filter(Files::isRegularFile)

View File

@ -76,26 +76,6 @@ class JarIntegrationTests extends AbstractArchiveIntegrationTests {
});
}
@TestTemplate
void whenJarWithClassicLoaderIsRepackagedInPlaceOnlyRepackagedJarIsInstalled(MavenBuild mavenBuild) {
mavenBuild.project("jar-with-classic-loader").goals("install").execute((project) -> {
File original = new File(project, "target/jar-with-classic-loader-0.0.1.BUILD-SNAPSHOT.jar.original");
assertThat(original).isFile();
File repackaged = new File(project, "target/jar-with-classic-loader-0.0.1.BUILD-SNAPSHOT.jar");
assertThat(launchScript(repackaged)).isEmpty();
assertThat(jar(repackaged)).manifest((manifest) -> {
manifest.hasMainClass("org.springframework.boot.loader.launch.JarLauncher");
manifest.hasStartClass("some.random.Main");
manifest.hasAttribute("Not-Used", "Foo");
}).hasEntryWithName("org/springframework/boot/loader/launch/JarLauncher.class");
assertThat(buildLog(project))
.contains("Replacing main artifact " + repackaged + " with repackaged archive,")
.contains("The original artifact has been renamed to " + original)
.contains("Installing " + repackaged + " to")
.doesNotContain("Installing " + original + " to");
});
}
@TestTemplate
void whenAttachIsDisabledOnlyTheOriginalJarIsInstalled(MavenBuild mavenBuild) {
mavenBuild.project("jar-attach-disabled").goals("install").execute((project) -> {
@ -196,7 +176,40 @@ class JarIntegrationTests extends AbstractArchiveIntegrationTests {
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core")
.hasEntryWithNameStartingWith("BOOT-INF/lib/commons-logging")
.doesNotHaveEntryWithName("BOOT-INF/lib/servlet-api-2.5.jar");
.doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/servlet-api-");
});
}
@TestTemplate
void whenAnEntryIsOptionalByDefaultDoesNotAppearInTheRepackagedJar(MavenBuild mavenBuild) {
mavenBuild.project("jar-optional-default").goals("install").execute((project) -> {
File repackaged = new File(project, "target/jar-optional-default-0.0.1.BUILD-SNAPSHOT.jar");
assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core")
.doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/log4j-api-");
});
}
@TestTemplate
void whenAnEntryIsOptionalAndOptionalsIncludedAppearsInTheRepackagedJar(MavenBuild mavenBuild) {
mavenBuild.project("jar-optional-include").goals("install").execute((project) -> {
File repackaged = new File(project, "target/jar-optional-include-0.0.1.BUILD-SNAPSHOT.jar");
assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core")
.hasEntryWithNameStartingWith("BOOT-INF/lib/log4j-api-");
});
}
@TestTemplate
void whenAnEntryIsOptionalAndOptionalsExcludedDoesNotAppearInTheRepackagedJar(MavenBuild mavenBuild) {
mavenBuild.project("jar-optional-exclude").goals("install").execute((project) -> {
File repackaged = new File(project, "target/jar-optional-exclude-0.0.1.BUILD-SNAPSHOT.jar");
assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core")
.doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/log4j-api-");
});
}
@ -248,9 +261,8 @@ class JarIntegrationTests extends AbstractArchiveIntegrationTests {
File repackaged = new File(project, "target/jar-exclude-group-0.0.1.BUILD-SNAPSHOT.jar");
assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context")
.hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core")
.hasEntryWithNameStartingWith("BOOT-INF/lib/commons-logging")
.doesNotHaveEntryWithName("BOOT-INF/lib/log4j-api-2.4.1.jar");
.doesNotHaveEntryWithName("BOOT-INF/lib/log4j-api-");
});
}
@ -388,7 +400,7 @@ class JarIntegrationTests extends AbstractArchiveIntegrationTests {
assertThat(layerIndex.get("application")).contains("BOOT-INF/lib/jar-release-0.0.1.RELEASE.jar",
"BOOT-INF/lib/jar-snapshot-0.0.1.BUILD-SNAPSHOT.jar");
assertThat(layerIndex.get("dependencies"))
.anyMatch((dependency) -> dependency.startsWith("BOOT-INF/lib/log4j-api-2"));
.anyMatch((dependency) -> dependency.startsWith("BOOT-INF/lib/log4j-api-"));
}
catch (IOException ex) {
// Ignore

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>aot-exclude-devtools</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>@java.version@</maven.compiler.source>
<maven.compiler.target>@java.version@</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<goals>
<goal>process-aot</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>@project.version@</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>@project.version@</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,29 @@
/*
* Copyright 2012-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>aot-system-properties</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>@java.version@</maven.compiler.source>
<maven.compiler.target>@java.version@</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<goals>
<goal>process-aot</goal>
</goals>
<configuration>
<systemPropertyVariables>
<spring.profiles.active>abc</spring.profiles.active>
</systemPropertyVariables>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>@project.version@</version>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>@jakarta-servlet.version@</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@ -14,24 +14,18 @@
* limitations under the License.
*/
package org.springframework.boot.loader.jar;
package org.test;
/**
* Utilities for dealing with bytes from ZIP files.
*
* @author Phillip Webb
*/
final class Bytes {
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
private Bytes() {
}
@Configuration(proxyBeanMethods = false)
@Import(TestProfileConfiguration.class)
public class SampleApplication {
static long littleEndianValue(byte[] bytes, int offset, int length) {
long value = 0;
for (int i = length - 1; i >= 0; i--) {
value = ((value << 8) | (bytes[offset + i] & 0xFF));
}
return value;
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}

View File

@ -14,18 +14,19 @@
* limitations under the License.
*/
package smoketest.jersey;
package org.test;
import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Configuration(proxyBeanMethods = false)
@Profile("abc")
class TestProfileConfiguration {
@Component
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
register(Endpoint.class);
register(ReverseEndpoint.class);
@Bean
public String abc() {
return "abc";
}
}

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>aot-test-exclude-devtools</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>@java.version@</maven.compiler.source>
<maven.compiler.target>@java.version@</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<goals>
<goal>process-test-aot</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>@project.version@</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>@project.version@</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>@project.version@</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>@junit-jupiter.version@</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,29 @@
/*
* Copyright 2012-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}

View File

@ -0,0 +1,29 @@
/*
* Copyright 2012-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.test;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SampleApplicationTests {
@Test
void contextLoads() {
}
}

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>jar-optional-default</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>@java.version@</maven.compiler.source>
<maven.compiler.target>@java.version@</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>@maven-jar-plugin.version@</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>@spring-framework.version@</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>@log4j2.version@</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -3,7 +3,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>jar-with-classic-loader</artifactId>
<artifactId>jar-optional-exclude</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -22,7 +22,7 @@
<goal>repackage</goal>
</goals>
<configuration>
<loaderImplementation>CLASSIC</loaderImplementation>
<includeOptional>false</includeOptional>
</configuration>
</execution>
</executions>
@ -31,16 +31,6 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>@maven-jar-plugin.version@</version>
<configuration>
<archive>
<manifest>
<mainClass>some.random.Main</mainClass>
</manifest>
<manifestEntries>
<Not-Used>Foo</Not-Used>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
@ -51,10 +41,10 @@
<version>@spring-framework.version@</version>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>@jakarta-servlet.version@</version>
<scope>provided</scope>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>@log4j2.version@</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -14,8 +14,11 @@
* limitations under the License.
*/
package org.springframework.boot.docs.howto.jersey.springsecurity;
package org.test;
class Endpoint {
public class SampleApplication {
public static void main(String[] args) {
}
}

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot.maven.it</groupId>
<artifactId>jar-optional-include</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>@java.version@</maven.compiler.source>
<maven.compiler.target>@java.version@</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<includeOptional>true</includeOptional>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>@maven-jar-plugin.version@</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>@spring-framework.version@</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>@log4j2.version@</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -14,8 +14,11 @@
* limitations under the License.
*/
package org.springframework.boot.docs.howto.jersey.alongsideanotherwebframework;
package org.test;
class Endpoint {
public class SampleApplication {
public static void main(String[] args) {
}
}

View File

@ -47,7 +47,6 @@ import org.springframework.boot.loader.tools.Layouts.Jar;
import org.springframework.boot.loader.tools.Layouts.None;
import org.springframework.boot.loader.tools.Layouts.War;
import org.springframework.boot.loader.tools.Libraries;
import org.springframework.boot.loader.tools.LoaderImplementation;
import org.springframework.boot.loader.tools.Packager;
import org.springframework.boot.loader.tools.layer.CustomLayers;
@ -114,6 +113,13 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo
@Parameter(defaultValue = "false")
public boolean includeSystemScope;
/**
* Include optional dependencies.
* @since 3.5.7
*/
@Parameter(defaultValue = "false")
public boolean includeOptional;
/**
* Include JAR tools.
* @since 3.3.0
@ -142,15 +148,6 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo
return null;
}
/**
* Return the loader implementation that should be used.
* @return the loader implementation or {@code null}
* @since 3.2.0
*/
protected @Nullable LoaderImplementation getLoaderImplementation() {
return null;
}
/**
* Return the layout factory that will be used to determine the {@link LayoutType} if
* no explicit layout is set.
@ -168,7 +165,6 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo
*/
protected <P extends Packager> P getConfiguredPackager(Supplier<P> supplier) {
P packager = supplier.get();
packager.setLoaderImplementation(getLoaderImplementation());
packager.setLayoutFactory(getLayoutFactory());
packager.addMainClassTimeoutWarningListener(new LoggingMainClassTimeoutWarningListener(this::getLog));
packager.setMainClass(this.mainClass);
@ -231,6 +227,9 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo
if (!this.includeSystemScope) {
filters.add(new ScopeFilter(null, Artifact.SCOPE_SYSTEM));
}
if (!this.includeOptional) {
filters.add(DependencyFilter.exclude(Artifact::isOptional));
}
return filters.toArray(new ArtifactsFilter[0]);
}

View File

@ -25,6 +25,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Collectors;
@ -39,6 +40,7 @@ import org.apache.maven.toolchain.ToolchainManager;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.loader.tools.FileUtils;
import org.springframework.util.StringUtils;
/**
* Base class to run a Spring Boot application.
@ -310,17 +312,20 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
* @return a {@link RunArguments} defining the JVM arguments
*/
protected RunArguments resolveJvmArguments() {
StringBuilder stringBuilder = new StringBuilder();
List<@Nullable String> arguments = new ArrayList<>();
if (this.systemPropertyVariables != null) {
stringBuilder.append(this.systemPropertyVariables.entrySet()
.stream()
.map((e) -> SystemPropertyFormatter.format(e.getKey(), e.getValue()))
.collect(Collectors.joining(" ")));
for (Entry<String, String> systemProperty : this.systemPropertyVariables.entrySet()) {
String argument = SystemPropertyFormatter.format(systemProperty.getKey(), systemProperty.getValue());
if (StringUtils.hasText(argument)) {
arguments.add(argument);
}
}
}
if (this.jvmArguments != null) {
stringBuilder.append(" ").append(this.jvmArguments);
String[] jvmArguments = RunArguments.parseArgs(this.jvmArguments);
arguments.addAll(Arrays.asList(jvmArguments));
}
return new RunArguments(stringBuilder.toString());
return new RunArguments(arguments);
}
private void addJvmArgs(List<String> args) {
@ -427,21 +432,4 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
}
}
/**
* Format System properties.
*/
static class SystemPropertyFormatter {
static String format(@Nullable String key, @Nullable String value) {
if (key == null) {
return "";
}
if (value == null || value.isEmpty()) {
return String.format("-D%s", key);
}
return String.format("-D%s=\"%s\"", key, value);
}
}
}

View File

@ -50,7 +50,7 @@ import org.springframework.boot.loader.tools.EntryWriter;
import org.springframework.boot.loader.tools.ImagePackager;
import org.springframework.boot.loader.tools.LayoutFactory;
import org.springframework.boot.loader.tools.Libraries;
import org.springframework.boot.loader.tools.LoaderImplementation;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
@ -207,13 +207,6 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo {
@Parameter
private @Nullable LayoutType layout;
/**
* The loader implementation that should be used.
* @since 3.2.0
*/
@Parameter
private @Nullable LoaderImplementation loaderImplementation;
/**
* The layout factory that will be used to create the executable archive if no
* explicit layout is set. Alternative layouts implementations can be provided by 3rd
@ -237,11 +230,6 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo {
return this.layout;
}
@Override
protected @Nullable LoaderImplementation getLoaderImplementation() {
return this.loaderImplementation;
}
/**
* Return the layout factory that will be used to determine the
* {@link AbstractPackagerMojo.LayoutType} if no explicit layout is set.
@ -454,11 +442,12 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo {
}
}
private void write(ZipEntry jarEntry, EntryWriter entryWriter, TarArchiveOutputStream tar) {
private void write(ZipEntry jarEntry, @Nullable EntryWriter entryWriter, TarArchiveOutputStream tar) {
try {
TarArchiveEntry tarEntry = convert(jarEntry);
tar.putArchiveEntry(tarEntry);
if (tarEntry.isFile()) {
Assert.state(entryWriter != null, "'entryWriter' must not be null");
entryWriter.write(tar);
}
tar.closeArchiveEntry();

View File

@ -21,10 +21,13 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import org.jspecify.annotations.Nullable;
import org.springframework.util.StringUtils;
/**
* Helper class to build the command-line arguments of a java process.
*
@ -57,10 +60,12 @@ final class CommandLineBuilder {
CommandLineBuilder withSystemProperties(@Nullable Map<String, String> systemProperties) {
if (systemProperties != null) {
systemProperties.entrySet()
.stream()
.map((e) -> SystemPropertyFormatter.format(e.getKey(), e.getValue()))
.forEach(this.options::add);
for (Entry<String, String> systemProperty : systemProperties.entrySet()) {
String option = SystemPropertyFormatter.format(systemProperty.getKey(), systemProperty.getValue());
if (StringUtils.hasText(option)) {
this.options.add(option);
}
}
}
return this;
}
@ -90,21 +95,4 @@ final class CommandLineBuilder {
return commandLine;
}
/**
* Format System properties.
*/
private static final class SystemPropertyFormatter {
static String format(@Nullable String key, @Nullable String value) {
if (key == null) {
return "";
}
if (value == null || value.isEmpty()) {
return String.format("-D%s", key);
}
return String.format("-D%s=\"%s\"", key, value);
}
}
}

View File

@ -16,9 +16,11 @@
package org.springframework.boot.maven;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.shared.artifact.filter.collection.AbstractArtifactsFilter;
@ -81,4 +83,22 @@ public abstract class DependencyFilter extends AbstractArtifactsFilter {
return this.filters;
}
/**
* Return a new {@link DependencyFilter} the excludes artifacts based on the given
* predicate.
* @param filter the predicate used to filter the artifacts.
* @return a new {@link DependencyFilter} instance
* @since 3.5.7
*/
public static DependencyFilter exclude(Predicate<Artifact> filter) {
return new DependencyFilter(Collections.emptyList()) {
@Override
protected boolean filter(Artifact artifact) {
return filter.test(artifact);
}
};
}
}

View File

@ -34,8 +34,8 @@ import org.apache.maven.artifact.Artifact;
*/
class JarTypeFilter extends DependencyFilter {
private static final Set<String> EXCLUDED_JAR_TYPES = Collections
.unmodifiableSet(new HashSet<>(Arrays.asList("annotation-processor", "dependencies-starter")));
private static final Set<String> EXCLUDED_JAR_TYPES = Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("annotation-processor", "dependencies-starter", "development-tool")));
JarTypeFilter() {
super(Collections.emptyList());

View File

@ -130,7 +130,7 @@ public class ProcessAotMojo extends AbstractAotMojo {
private URL[] getClassPath() throws Exception {
File[] directories = new File[] { this.classesDirectory, this.generatedClasses };
return getClassPath(directories, new ExcludeTestScopeArtifactFilter());
return getClassPath(directories, new ExcludeTestScopeArtifactFilter(), DEVTOOLS_EXCLUDE_FILTER);
}
private RunArguments resolveArguments() {

View File

@ -154,7 +154,7 @@ public class ProcessTestAotMojo extends AbstractAotMojo {
protected URL[] getClassPath(boolean includeJUnitPlatformLauncher) throws Exception {
File[] directories = new File[] { this.testClassesDirectory, this.generatedTestClasses, this.classesDirectory,
this.generatedClasses };
URL[] classPath = getClassPath(directories);
URL[] classPath = getClassPath(directories, DEVTOOLS_EXCLUDE_FILTER);
if (!includeJUnitPlatformLauncher || this.project.getArtifactMap()
.containsKey(JUNIT_PLATFORM_GROUP_ID + ":" + JUNIT_PLATFORM_LAUNCHER_ARTIFACT_ID)) {
return classPath;

View File

@ -27,6 +27,8 @@ import org.apache.maven.plugins.shade.relocation.Relocator;
import org.apache.maven.plugins.shade.resource.ReproducibleResourceTransformer;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert;
/**
* Extension for the <a href="https://maven.apache.org/plugins/maven-shade-plugin/">Maven
* shade plugin</a> to allow properties files (e.g. {@literal META-INF/spring.factories})
@ -88,6 +90,7 @@ public class PropertiesMergingResourceTransformer implements ReproducibleResourc
@Override
public void modifyOutputStream(JarOutputStream os) throws IOException {
Assert.state(this.resource != null, "'resource' must not be null");
JarEntry jarEntry = new JarEntry(this.resource);
jarEntry.setTime(this.time);
os.putNextEntry(jarEntry);

View File

@ -40,7 +40,6 @@ import org.springframework.boot.loader.tools.DefaultLaunchScript;
import org.springframework.boot.loader.tools.LaunchScript;
import org.springframework.boot.loader.tools.LayoutFactory;
import org.springframework.boot.loader.tools.Libraries;
import org.springframework.boot.loader.tools.LoaderImplementation;
import org.springframework.boot.loader.tools.Repackager;
import org.springframework.lang.Contract;
import org.springframework.util.StringUtils;
@ -170,13 +169,6 @@ public class RepackageMojo extends AbstractPackagerMojo {
@Parameter(property = "spring-boot.repackage.layout")
private @Nullable LayoutType layout;
/**
* The loader implementation that should be used.
* @since 3.2.0
*/
@Parameter
private @Nullable LoaderImplementation loaderImplementation;
/**
* The layout factory that will be used to create the executable archive if no
* explicit layout is set. Alternative layouts implementations can be provided by 3rd
@ -201,11 +193,6 @@ public class RepackageMojo extends AbstractPackagerMojo {
return this.layout;
}
@Override
protected @Nullable LoaderImplementation getLoaderImplementation() {
return this.loaderImplementation;
}
/**
* Return the layout factory that will be used to determine the
* {@link AbstractPackagerMojo.LayoutType} if no explicit layout is set.

View File

@ -19,7 +19,6 @@ package org.springframework.boot.maven;
import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Objects;
import org.codehaus.plexus.util.cli.CommandLineUtils;
import org.jspecify.annotations.Nullable;
@ -39,9 +38,18 @@ class RunArguments {
this(parseArgs(arguments));
}
RunArguments(String[] args) {
@SuppressWarnings("NullAway") // Maven can't handle nullable arrays
RunArguments(@Nullable String[] args) {
this((args != null) ? Arrays.asList(args) : null);
}
RunArguments(@Nullable Iterable<@Nullable String> args) {
if (args != null) {
Arrays.stream(args).filter(Objects::nonNull).forEach(this.args::add);
for (String arg : args) {
if (arg != null) {
this.args.add(arg);
}
}
}
}
@ -53,7 +61,7 @@ class RunArguments {
return this.args.toArray(new String[0]);
}
private static String[] parseArgs(@Nullable String arguments) {
static String[] parseArgs(@Nullable String arguments) {
if (arguments == null || arguments.trim().isEmpty()) {
return NO_ARGS;
}

View File

@ -156,12 +156,12 @@ public class StartMojo extends AbstractRunMojo {
}
}
@SuppressWarnings("NullAway") // Lambda isn't detected with the correct nullability
private void doWaitForSpringApplication(MBeanServerConnection connection)
throws MojoExecutionException, MojoFailureException {
final SpringApplicationAdminClient client = new SpringApplicationAdminClient(connection, this.jmxName);
try {
execute(this.wait, this.maxAttempts, () -> (client.isReady() ? true : null));
Callable<@Nullable Boolean> isReady = () -> (client.isReady() ? true : null);
execute(this.wait, this.maxAttempts, isReady);
}
catch (ReflectionException ex) {
throw new MojoExecutionException("Unable to retrieve 'ready' attribute", ex.getCause());

View File

@ -14,21 +14,29 @@
* limitations under the License.
*/
package org.springframework.boot.loader.launch;
package org.springframework.boot.maven;
import org.jspecify.annotations.Nullable;
/**
* Repackaged {@link org.springframework.boot.loader.PropertiesLauncher}.
* Format System properties.
*
* @author Phillip Webb
* @since 3.2.0
* @author Stephane Nicoll
*/
public final class PropertiesLauncher {
final class SystemPropertyFormatter {
private PropertiesLauncher() {
private SystemPropertyFormatter() {
}
public static void main(String[] args) throws Exception {
org.springframework.boot.loader.PropertiesLauncher.main(args);
static String format(@Nullable String key, @Nullable String value) {
if (key == null) {
return "";
}
if (value == null || value.isEmpty()) {
return String.format("-D%s", key);
}
return String.format("-D%s=%s", key, value);
}
}

View File

@ -76,7 +76,7 @@ class CommandLineBuilderTests {
@Test
void buildWithSystemProperty() {
assertThat(CommandLineBuilder.forMainClass(CLASS_NAME).withSystemProperties(Map.of("flag", "enabled")).build())
.containsExactly("-Dflag=\"enabled\"", CLASS_NAME);
.containsExactly("-Dflag=enabled", CLASS_NAME);
}
@Test

View File

@ -0,0 +1,50 @@
/*
* Copyright 2012-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.maven;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link DependencyFilter}.
*
* @author Phillip Webb
*/
class DependencyFilterTests {
@Test
void excludeFiltersBasedOnPredicate() throws ArtifactFilterException {
DependencyFilter filter = DependencyFilter.exclude(Artifact::isOptional);
ArtifactHandler ah = new DefaultArtifactHandler();
VersionRange v = VersionRange.createFromVersion("1.0.0");
DefaultArtifact a1 = new DefaultArtifact("com.example", "a1", v, "compile", "jar", null, ah, false);
DefaultArtifact a2 = new DefaultArtifact("com.example", "a2", v, "compile", "jar", null, ah, true);
DefaultArtifact a3 = new DefaultArtifact("com.example", "a3", v, "compile", "jar", null, ah, false);
Set<Artifact> filtered = filter.filter(Set.of(a1, a2, a3));
assertThat(filtered).containsExactlyInAnyOrder(a1, a3);
}
}

View File

@ -31,8 +31,8 @@ import org.springframework.boot.buildpack.platform.build.BuildRequest;
import org.springframework.boot.buildpack.platform.build.BuildpackReference;
import org.springframework.boot.buildpack.platform.build.Cache;
import org.springframework.boot.buildpack.platform.build.PullPolicy;
import org.springframework.boot.buildpack.platform.docker.ImagePlatform;
import org.springframework.boot.buildpack.platform.docker.type.Binding;
import org.springframework.boot.buildpack.platform.docker.type.ImagePlatform;
import org.springframework.boot.buildpack.platform.docker.type.ImageReference;
import org.springframework.boot.buildpack.platform.io.Owner;
import org.springframework.boot.buildpack.platform.io.TarArchive;

View File

@ -60,6 +60,11 @@ class JarTypeFilterTests {
assertThat(new JarTypeFilter().filter(createArtifact("annotation-processor"))).isTrue();
}
@Test
void whenArtifactHasDevelopmentToolJarTypeThenItIsExcluded() {
assertThat(new JarTypeFilter().filter(createArtifact("development-tool"))).isTrue();
}
@Test
void whenArtifactHasNoManifestFileThenItIsIncluded() {
assertThat(new JarTypeFilter().filter(createArtifactWithNoManifest())).isFalse();

View File

@ -18,12 +18,10 @@ package org.springframework.boot.maven;
import org.junit.jupiter.api.Test;
import org.springframework.boot.maven.AbstractRunMojo.SystemPropertyFormatter;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link AbstractRunMojo.SystemPropertyFormatter}.
* Tests for {@link SystemPropertyFormatter}.
*/
class SystemPropertyFormatterTests {
@ -39,7 +37,7 @@ class SystemPropertyFormatterTests {
@Test
void parseKeyWithValue() {
assertThat(SystemPropertyFormatter.format("key1", "value1")).isEqualTo("-Dkey1=\"value1\"");
assertThat(SystemPropertyFormatter.format("key1", "value1")).isEqualTo("-Dkey1=value1");
}
@Test
@ -49,7 +47,7 @@ class SystemPropertyFormatterTests {
@Test
void parseKeyWithOnlySpaces() {
assertThat(SystemPropertyFormatter.format("key1", " ")).isEqualTo("-Dkey1=\" \"");
assertThat(SystemPropertyFormatter.format("key1", " ")).isEqualTo("-Dkey1= ");
}
}

View File

@ -43,16 +43,16 @@ dependencies {
checkstyle("com.puppycrawl.tools:checkstyle:${checkstyle.toolVersion}")
checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:${javaFormatVersion}")
implementation(platform("com.fasterxml.jackson:jackson-bom:${jacksonVersion}"))
implementation(platform("com.fasterxml.jackson:jackson-bom:${jackson2Version}"))
implementation(platform("tools.jackson:jackson-bom:${jacksonVersion}"))
implementation(platform("org.springframework:spring-framework-bom:${springFrameworkVersion}"))
implementation("com.fasterxml.jackson.core:jackson-databind")
implementation("com.github.node-gradle:gradle-node-plugin:3.5.1")
implementation("com.gradle:develocity-gradle-plugin:3.17.2")
implementation("com.tngtech.archunit:archunit:1.4.1")
implementation("commons-codec:commons-codec:${commonsCodecVersion}")
implementation("de.undercouch.download:de.undercouch.download.gradle.plugin:5.5.0")
implementation("dev.adamko.dokkatoo:dokkatoo-plugin:2.3.1")
implementation("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.8")
implementation("dev.detekt:detekt-gradle-plugin:2.0.0-alpha.0")
implementation("io.spring.gradle.antora:spring-antora-plugin:0.0.1")
implementation("io.spring.javaformat:spring-javaformat-gradle-plugin:${javaFormatVersion}")
implementation("io.spring.nohttp:nohttp-gradle:0.0.11")
@ -65,6 +65,7 @@ dependencies {
implementation("org.springframework:spring-web")
implementation("org.yaml:snakeyaml:${snakeYamlVersion}")
implementation("io.spring.gradle.nullability:nullability-plugin:${nullabilityPluginVersion}")
implementation("tools.jackson.core:jackson-databind")
testImplementation(platform("org.junit:junit-bom:${junitJupiterVersion}"))
testImplementation("org.assertj:assertj-core:${assertjVersion}")
@ -132,10 +133,6 @@ gradlePlugin {
id = "org.springframework.boot.integration-test"
implementationClass = "org.springframework.boot.build.test.IntegrationTestPlugin"
}
systemTestPlugin {
id = "org.springframework.boot.system-test"
implementationClass = "org.springframework.boot.build.test.SystemTestPlugin"
}
mavenPluginPlugin {
id = "org.springframework.boot.maven-plugin"
implementationClass = "org.springframework.boot.build.mavenplugin.MavenPluginPlugin"
@ -152,10 +149,22 @@ gradlePlugin {
id = "org.springframework.boot.starter"
implementationClass = "org.springframework.boot.build.starters.StarterPlugin"
}
systemTestPlugin {
id = "org.springframework.boot.system-test"
implementationClass = "org.springframework.boot.build.test.SystemTestPlugin"
}
testAutoConfigurationPlugin {
id = "org.springframework.boot.test-auto-configuration"
implementationClass = "org.springframework.boot.build.test.autoconfigure.TestAutoConfigurationPlugin"
}
testFailuresPlugin {
id = "org.springframework.boot.test-failures"
implementationClass = "org.springframework.boot.build.testing.TestFailuresPlugin"
}
testSlicePlugin {
id = "org.springframework.boot.test-slice"
implementationClass = "org.springframework.boot.build.test.autoconfigure.TestSlicePlugin"
}
}
}

View File

@ -6,4 +6,11 @@
<module name="io.spring.javaformat.checkstyle.SpringChecks">
<property name="excludes" value="com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocPackageCheck" />
</module>
</module>
<module name="com.puppycrawl.tools.checkstyle.TreeWalker">
<module name="com.puppycrawl.tools.checkstyle.checks.imports.IllegalImportCheck">
<property name="regexp" value="true" />
<property name="illegalPkgs"
value="^com\.fasterxml\.jackson(?!\.annotation).*" />
</module>
</module>
</module>

View File

@ -17,8 +17,6 @@
package org.springframework.boot.build;
import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@ -26,7 +24,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.gradle.node.NodeExtension;
import com.github.gradle.node.npm.task.NpmInstallTask;
import io.spring.gradle.antora.GenerateAntoraYmlPlugin;
@ -44,6 +41,7 @@ import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.Copy;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.TaskProvider;
import tools.jackson.databind.ObjectMapper;
import org.springframework.boot.build.antora.AntoraAsciidocAttributes;
import org.springframework.boot.build.antora.GenerateAntoraPlaybook;
@ -198,18 +196,13 @@ public class AntoraConventions {
}
private String getUiBundleUrl(Project project) {
try {
File packageJson = project.getRootProject().file("antora/package.json");
ObjectMapper objectMapper = new ObjectMapper();
Map<?, ?> json = objectMapper.readerFor(Map.class).readValue(packageJson);
Map<?, ?> config = (json != null) ? (Map<?, ?>) json.get("config") : null;
String url = (config != null) ? (String) config.get("ui-bundle-url") : null;
Assert.state(StringUtils.hasText(url.toString()), "package.json has not ui-bundle-url config");
return url;
}
catch (IOException ex) {
throw new UncheckedIOException(ex);
}
File packageJson = project.getRootProject().file("antora/package.json");
ObjectMapper objectMapper = new ObjectMapper();
Map<?, ?> json = objectMapper.readerFor(Map.class).readValue(packageJson);
Map<?, ?> config = (json != null) ? (Map<?, ?>) json.get("config") : null;
String url = (config != null) ? (String) config.get("ui-bundle-url") : null;
Assert.state(StringUtils.hasText(url.toString()), "package.json has not ui-bundle-url config");
return url;
}
private void configureNodeExtension(Project project, NodeExtension nodeExtension) {

View File

@ -20,9 +20,9 @@ import java.net.URI;
import dev.adamko.dokkatoo.DokkatooExtension;
import dev.adamko.dokkatoo.formats.DokkatooHtmlPlugin;
import io.gitlab.arturbosch.detekt.Detekt;
import io.gitlab.arturbosch.detekt.DetektPlugin;
import io.gitlab.arturbosch.detekt.extensions.DetektExtension;
import dev.detekt.gradle.Detekt;
import dev.detekt.gradle.extensions.DetektExtension;
import dev.detekt.gradle.plugin.DetektPlugin;
import org.gradle.api.Project;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
@ -76,6 +76,7 @@ class KotlinConventions {
private void configureDokkatoo(Project project) {
DokkatooExtension dokkatoo = project.getExtensions().getByType(DokkatooExtension.class);
dokkatoo.getVersions().getJetbrainsDokka().set("2.1.0-Beta");
dokkatoo.getDokkatooSourceSets().configureEach((sourceSet) -> {
if (SourceSet.MAIN_SOURCE_SET_NAME.equals(sourceSet.getName())) {
sourceSet.getSourceRoots().setFrom(project.file("src/main/kotlin"));
@ -103,7 +104,9 @@ class KotlinConventions {
project.getPlugins().apply(DetektPlugin.class);
DetektExtension detekt = project.getExtensions().getByType(DetektExtension.class);
detekt.getConfig().setFrom(project.getRootProject().file("config/detekt/config.yml"));
project.getTasks().withType(Detekt.class).configureEach((task) -> task.setJvmTarget(JVM_TARGET.getTarget()));
project.getTasks()
.withType(Detekt.class)
.configureEach((task) -> task.getJvmTarget().set(JVM_TARGET.getTarget()));
}
}

View File

@ -162,10 +162,9 @@ public class AntoraAsciidocAttributes {
attributes.put("version-native-build-tools", (String) this.projectProperties.get("nativeBuildToolsVersion"));
attributes.put("version-graal", (String) this.projectProperties.get("graalVersion"));
addDependencyVersion(attributes, "jackson-annotations", "com.fasterxml.jackson.core:jackson-annotations");
addDependencyVersion(attributes, "jackson-core", "com.fasterxml.jackson.core:jackson-core");
addDependencyVersion(attributes, "jackson-databind", "com.fasterxml.jackson.core:jackson-databind");
addDependencyVersion(attributes, "jackson-dataformat-xml",
"com.fasterxml.jackson.dataformat:jackson-dataformat-xml");
addDependencyVersion(attributes, "jackson-core", "tools.jackson.core:jackson-core");
addDependencyVersion(attributes, "jackson-databind", "tools.jackson.core:jackson-databind");
addDependencyVersion(attributes, "jackson-dataformat-xml", "tools.jackson.dataformat:jackson-dataformat-xml");
addSpringDataDependencyVersion(attributes, internal, "spring-data-commons");
addSpringDataDependencyVersion(attributes, internal, "spring-data-couchbase");
addSpringDataDependencyVersion(attributes, internal, "spring-data-cassandra");

View File

@ -80,6 +80,13 @@ final class ArchitectureRules {
private static final String AUTOCONFIGURATION_ANNOTATION = "org.springframework.boot.autoconfigure.AutoConfiguration";
private static final String TEST_AUTOCONFIGURATION_ANNOTATION = "org.springframework.boot.test.autoconfigure.TestAutoConfiguration";
private static final Predicate<JavaPackage> NULL_MARKED_PACKAGE_FILTER = (candidate) -> !List
.of("org.springframework.boot.cli.json", "org.springframework.boot.configurationmetadata.json",
"org.springframework.boot.configurationprocessor.json")
.contains(candidate.getName());
private ArchitectureRules() {
}
@ -112,6 +119,7 @@ final class ArchitectureRules {
rules.add(allConfigurationPropertiesBindingBeanMethodsShouldBeStatic());
rules.add(autoConfigurationClassesShouldBePublicAndFinal());
rules.add(autoConfigurationClassesShouldHaveNoPublicMembers());
rules.add(testAutoConfigurationClassesShouldBePackagePrivateAndFinal());
return List.copyOf(rules);
}
@ -130,7 +138,12 @@ final class ArchitectureRules {
}
private static ArchRule allPackagesShouldBeFreeOfTangles() {
return SlicesRuleDefinition.slices().matching("(**)").should().beFreeOfCycles();
return SlicesRuleDefinition.slices()
.matching("(**)")
.should()
.beFreeOfCycles()
.ignoreDependency("org.springframework.boot.env.EnvironmentPostProcessor",
"org.springframework.boot.SpringApplication");
}
private static ArchRule allBeanPostProcessorBeanMethodsShouldBeStaticAndNotCausePrematureInitialization() {
@ -250,7 +263,9 @@ final class ArchitectureRules {
}
static ArchRule packagesShouldBeAnnotatedWithNullMarked() {
return ArchRuleDefinition.all(packages()).should(beAnnotatedWithNullMarked()).allowEmptyShould(true);
return ArchRuleDefinition.all(packages(NULL_MARKED_PACKAGE_FILTER))
.should(beAnnotatedWithNullMarked())
.allowEmptyShould(true);
}
private static ArchCondition<? super JavaMethod> notSpecifyOnlyATypeThatIsTheSameAsTheMethodReturnType() {
@ -353,8 +368,7 @@ final class ArchitectureRules {
private static ArchRule autoConfigurationClassesShouldBePublicAndFinal() {
return ArchRuleDefinition.classes()
.that()
.areAnnotatedWith(AUTOCONFIGURATION_ANNOTATION)
.that(areRegularAutoConfiguration())
.should()
.bePublic()
.andShould()
@ -365,8 +379,7 @@ final class ArchitectureRules {
private static ArchRule autoConfigurationClassesShouldHaveNoPublicMembers() {
return ArchRuleDefinition.members()
.that()
.areDeclaredInClassesThat()
.areAnnotatedWith(AUTOCONFIGURATION_ANNOTATION)
.areDeclaredInClassesThat(areRegularAutoConfiguration())
.and(areNotDefaultConstructors())
.and(areNotConstants())
.and(dontOverridePublicMethods())
@ -375,6 +388,24 @@ final class ArchitectureRules {
.allowEmptyShould(true);
}
private static ArchRule testAutoConfigurationClassesShouldBePackagePrivateAndFinal() {
return ArchRuleDefinition.classes()
.that()
.areAnnotatedWith(TEST_AUTOCONFIGURATION_ANNOTATION)
.should()
.bePackagePrivate()
.andShould()
.haveModifier(JavaModifier.FINAL)
.allowEmptyShould(true);
}
private static DescribedPredicate<JavaClass> areRegularAutoConfiguration() {
return DescribedPredicate.describe("Regular @AutoConfiguration",
(javaClass) -> javaClass.isMetaAnnotatedWith(AUTOCONFIGURATION_ANNOTATION)
&& !javaClass.isMetaAnnotatedWith(TEST_AUTOCONFIGURATION_ANNOTATION)
&& !javaClass.isAnnotation());
}
private static DescribedPredicate<? super JavaMember> dontOverridePublicMethods() {
OverridesPublicMethod<JavaMember> predicate = new OverridesPublicMethod<>();
return DescribedPredicate.describe("don't override public methods", (member) -> !predicate.test(member));
@ -480,11 +511,11 @@ final class ArchitectureRules {
return string + " should be used instead";
}
static ClassesTransformer<JavaPackage> packages() {
static ClassesTransformer<JavaPackage> packages(Predicate<JavaPackage> filter) {
return new AbstractClassesTransformer<>("packages") {
@Override
public Iterable<JavaPackage> doTransform(JavaClasses collection) {
return collection.stream().map(JavaClass::getPackage).collect(Collectors.toSet());
return collection.stream().map(JavaClass::getPackage).filter(filter).collect(Collectors.toSet());
}
};
}

View File

@ -19,6 +19,7 @@ package org.springframework.boot.build.autoconfigure;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.util.ArrayList;
import java.util.Collections;
@ -54,8 +55,8 @@ public record AutoConfigurationClass(String name, List<String> before, List<Stri
attributes.getOrDefault("afterName", Collections.emptyList()));
}
static AutoConfigurationClass of(File classFile) {
try (FileInputStream input = new FileInputStream(classFile)) {
public static AutoConfigurationClass of(InputStream input) {
try {
ClassReader classReader = new ClassReader(input);
AutoConfigurationClassVisitor visitor = new AutoConfigurationClassVisitor();
classReader.accept(visitor, ClassReader.SKIP_DEBUG | ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES);
@ -66,6 +67,15 @@ public record AutoConfigurationClass(String name, List<String> before, List<Stri
}
}
static AutoConfigurationClass of(File classFile) {
try (InputStream input = new FileInputStream(classFile)) {
return of(input);
}
catch (IOException ex) {
throw new UncheckedIOException(ex);
}
}
private static final class AutoConfigurationClassVisitor extends ClassVisitor {
private AutoConfigurationClass autoConfigurationClass;

View File

@ -38,7 +38,10 @@ import org.gradle.api.tasks.SkipWhenEmpty;
*/
public abstract class AutoConfigurationImportsTask extends DefaultTask {
static final String IMPORTS_FILE = "META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports";
/**
* The path of the {@code AutoConfiguration.imports} file.
*/
public static final String IMPORTS_FILE = "META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports";
private FileCollection sourceFiles = getProject().getObjects().fileCollection();

View File

@ -136,15 +136,17 @@ public abstract class CheckAutoConfigurationClasses extends AutoConfigurationImp
private List<File> classFiles() {
List<File> classFiles = new ArrayList<>();
for (File root : this.classpath.getFiles()) {
try (Stream<Path> files = Files.walk(root.toPath())) {
files.forEach((file) -> {
if (Files.isRegularFile(file) && file.getFileName().toString().endsWith(".class")) {
classFiles.add(file.toFile());
}
});
}
catch (IOException ex) {
throw new UncheckedIOException(ex);
if (root.exists()) {
try (Stream<Path> files = Files.walk(root.toPath())) {
files.forEach((file) -> {
if (Files.isRegularFile(file) && file.getFileName().toString().endsWith(".class")) {
classFiles.add(file.toFile());
}
});
}
catch (IOException ex) {
throw new UncheckedIOException(ex);
}
}
}
return classFiles;

View File

@ -40,6 +40,7 @@ import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
import org.springframework.util.FileSystemUtils;
import org.springframework.util.StringUtils;
/**
@ -66,6 +67,7 @@ public abstract class DocumentAutoConfigurationClasses extends DefaultTask {
@TaskAction
void documentAutoConfigurationClasses() throws IOException {
FileSystemUtils.deleteRecursively(getOutputDir().getAsFile().get());
List<AutoConfiguration> autoConfigurations = load();
autoConfigurations.forEach(this::writeModuleAdoc);
for (File metadataFile : this.autoConfiguration) {

View File

@ -25,10 +25,8 @@ import java.net.URI;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper;
/**
* A resolved bom.
@ -42,10 +40,9 @@ public record ResolvedBom(Id id, List<ResolvedLibrary> libraries) {
private static final ObjectMapper objectMapper;
static {
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT)
.setDefaultPropertyInclusion(Include.NON_EMPTY);
mapper.configOverride(List.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
objectMapper = mapper;
objectMapper = JsonMapper.builder()
.changeDefaultPropertyInclusion((value) -> value.withContentInclusion(Include.NON_EMPTY))
.build();
}
public static ResolvedBom readFrom(File file) {
@ -58,12 +55,7 @@ public record ResolvedBom(Id id, List<ResolvedLibrary> libraries) {
}
public void writeTo(Writer writer) {
try {
objectMapper.writeValue(writer, this);
}
catch (IOException ex) {
throw new UncheckedIOException(ex);
}
objectMapper.writeValue(writer, this);
}
public record ResolvedLibrary(String name, String version, String versionProperty, List<Id> managedDependencies,

View File

@ -16,6 +16,8 @@
package org.springframework.boot.build.bom.bomr;
import java.util.List;
import javax.inject.Inject;
import org.gradle.api.Task;
@ -24,6 +26,7 @@ import org.gradle.api.artifacts.dsl.RepositoryHandler;
import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
import org.springframework.boot.build.bom.BomExtension;
import org.springframework.boot.build.bom.Library;
import org.springframework.boot.build.properties.BuildProperties;
/**
@ -63,4 +66,25 @@ public abstract class UpgradeBom extends UpgradeDependencies {
return issueTitle(upgrade) + "\n\nCloses gh-" + issueNumber;
}
@Override
protected void upgradesApplied(List<Upgrade> upgrades) {
if (upgrades.isEmpty()) {
return;
}
System.out.println();
System.out.println("Upgrade release notes:");
System.out.println();
for (Upgrade upgrade : upgrades) {
Library library = upgrade.toRelease();
String releaseNotes = library.getLinkUrl("releaseNotes");
if (releaseNotes != null) {
System.out.println("* " + releaseNotes + "[" + library.getNameAndVersion() + "]");
}
else {
System.out.println("* " + library.getNameAndVersion());
}
}
System.out.println();
}
}

View File

@ -102,6 +102,12 @@ public abstract class UpgradeDependencies extends DefaultTask {
@Option(option = "libraries", description = "Regular expression that identifies the libraries to upgrade")
public abstract Property<String> getLibraries();
@Input
@Optional
@Option(option = "dry-run-upgrades",
description = "Whether to perform a dry run that doesn't open issues or change the bom")
public abstract Property<Boolean> getDryRun();
@Input
abstract ListProperty<String> getRepositoryNames();
@ -112,7 +118,14 @@ public abstract class UpgradeDependencies extends DefaultTask {
List<String> issueLabels = verifyLabels(repository);
Milestone milestone = determineMilestone(repository);
List<Upgrade> upgrades = resolveUpgrades(milestone);
applyUpgrades(repository, issueLabels, milestone, upgrades);
if (!getDryRun().getOrElse(false)) {
applyUpgrades(repository, issueLabels, milestone, upgrades);
}
upgradesApplied(upgrades);
}
protected void upgradesApplied(List<Upgrade> upgrades) {
}
private void applyUpgrades(GitHubRepository repository, List<String> issueLabels, Milestone milestone,

View File

@ -19,10 +19,8 @@ package org.springframework.boot.build.bom.bomr.github;
import java.util.Base64;
import java.util.Collections;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.DefaultUriBuilderFactory;
import org.springframework.web.util.UriTemplateHandler;
@ -60,9 +58,9 @@ final class StandardGitHub implements GitHub {
return new StandardGitHubRepository(restTemplate);
}
@SuppressWarnings("removal")
@SuppressWarnings({ "deprecation", "removal" })
private RestTemplate createRestTemplate() {
return new RestTemplate(Collections.singletonList(new MappingJackson2HttpMessageConverter(new ObjectMapper())));
return new RestTemplate(Collections.singletonList(new JacksonJsonHttpMessageConverter()));
}
}

View File

@ -28,9 +28,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.gradle.api.file.FileTree;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.tasks.InputFiles;
@ -40,6 +37,7 @@ import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SourceTask;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException;
import tools.jackson.databind.ObjectMapper;
/**
* {@link SourceTask} that checks additional Spring configuration metadata files.
@ -65,7 +63,7 @@ public abstract class CheckAdditionalSpringConfigurationMetadata extends SourceT
}
@TaskAction
void check() throws JsonParseException, IOException {
void check() throws IOException {
Report report = createReport();
File reportFile = getReportLocation().get().getAsFile();
Files.write(reportFile.toPath(), report, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
@ -76,7 +74,7 @@ public abstract class CheckAdditionalSpringConfigurationMetadata extends SourceT
}
@SuppressWarnings("unchecked")
private Report createReport() throws IOException, JsonParseException, JsonMappingException {
private Report createReport() {
ObjectMapper objectMapper = new ObjectMapper();
Report report = new Report();
for (File file : getSource().getFiles()) {

View File

@ -26,9 +26,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.ListProperty;
@ -40,6 +37,7 @@ import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SourceTask;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException;
import tools.jackson.databind.ObjectMapper;
/**
* {@link SourceTask} that checks {@code spring-configuration-metadata.json} files.
@ -65,7 +63,7 @@ public abstract class CheckSpringConfigurationMetadata extends DefaultTask {
public abstract ListProperty<String> getExclusions();
@TaskAction
void check() throws JsonParseException, IOException {
void check() throws IOException {
Report report = createReport();
File reportFile = getReportLocation().get().getAsFile();
Files.write(reportFile.toPath(), report, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
@ -76,7 +74,7 @@ public abstract class CheckSpringConfigurationMetadata extends DefaultTask {
}
@SuppressWarnings("unchecked")
private Report createReport() throws IOException, JsonParseException, JsonMappingException {
private Report createReport() {
ObjectMapper objectMapper = new ObjectMapper();
File file = getMetadataLocation().get().getAsFile();
Report report = new Report(this.projectRoot.relativize(file.toPath()));

View File

@ -17,7 +17,6 @@
package org.springframework.boot.build.context.properties;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
@ -25,7 +24,7 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
/**
* Configuration properties read from one or more
@ -56,20 +55,15 @@ final class ConfigurationProperties {
@SuppressWarnings("unchecked")
static ConfigurationProperties fromFiles(Iterable<File> files) {
try {
ObjectMapper objectMapper = new ObjectMapper();
List<ConfigurationProperty> properties = new ArrayList<>();
for (File file : files) {
Map<String, Object> json = objectMapper.readValue(file, Map.class);
for (Map<String, Object> property : (List<Map<String, Object>>) json.get("properties")) {
properties.add(ConfigurationProperty.fromJsonProperties(property));
}
ObjectMapper objectMapper = new ObjectMapper();
List<ConfigurationProperty> properties = new ArrayList<>();
for (File file : files) {
Map<String, Object> json = objectMapper.readValue(file, Map.class);
for (Map<String, Object> property : (List<Map<String, Object>>) json.get("properties")) {
properties.add(ConfigurationProperty.fromJsonProperties(property));
}
return new ConfigurationProperties(properties);
}
catch (IOException ex) {
throw new RuntimeException("Failed to load configuration metadata", ex);
}
return new ConfigurationProperties(properties);
}
}

View File

@ -65,7 +65,7 @@ public class ConfigurationPropertiesPlugin implements Plugin<Project> {
public static final String CHECK_ADDITIONAL_SPRING_CONFIGURATION_METADATA_TASK_NAME = "checkAdditionalSpringConfigurationMetadata";
/**
* Name of the {@link CheckAdditionalSpringConfigurationMetadata} task.
* Name of the {@link CheckSpringConfigurationMetadata} task.
*/
public static final String CHECK_SPRING_CONFIGURATION_METADATA_TASK_NAME = "checkSpringConfigurationMetadata";

View File

@ -118,6 +118,7 @@ public abstract class DocumentConfigurationProperties extends DefaultTask {
private void jsonPrefixes(Config config) {
config.accept("spring.jackson");
config.accept("spring.gson");
config.accept("spring.kotlin.serialization");
}
private void dataPrefixes(Config config) {
@ -129,7 +130,7 @@ public abstract class DocumentConfigurationProperties extends DefaultTask {
config.accept("spring.ldap");
config.accept("spring.mongodb");
config.accept("spring.neo4j");
config.accept("spring.dao");
config.accept("spring.persistence");
config.accept("spring.data");
config.accept("spring.datasource");
config.accept("spring.jooq");

View File

@ -41,7 +41,7 @@ public class OptionalDependenciesPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
Configuration optional = project.getConfigurations().create("optional");
optional.setCanBeConsumed(false);
optional.setCanBeConsumed(true);
optional.setCanBeResolved(false);
project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> {
SourceSetContainer sourceSets = project.getExtensions()

Some files were not shown because too many files have changed in this diff Show More