diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml index b45040d0348f..f1ac0393b980 100644 --- a/.github/actions/build/action.yml +++ b/.github/actions/build/action.yml @@ -35,7 +35,7 @@ inputs: java-version: description: 'Java version to compile and test with' required: false - default: '17' + default: '25' publish: description: 'Whether to publish artifacts ready for deployment to Artifactory' required: false diff --git a/.github/actions/prepare-gradle-build/action.yml b/.github/actions/prepare-gradle-build/action.yml index cb0c1b7f4dcf..316b932dfcb1 100644 --- a/.github/actions/prepare-gradle-build/action.yml +++ b/.github/actions/prepare-gradle-build/action.yml @@ -23,7 +23,7 @@ inputs: java-version: description: 'Java version to use for the build' required: false - default: '17' + default: '25' runs: using: composite steps: @@ -39,7 +39,7 @@ runs: distribution: ${{ inputs.java-early-access == 'true' && 'temurin' || (inputs.java-distribution || 'liberica') }} java-version: | ${{ inputs.java-early-access == 'true' && format('{0}-ea', inputs.java-version) || inputs.java-version }} - ${{ inputs.java-toolchain == 'true' && '17' || '' }} + ${{ inputs.java-toolchain == 'true' && '25' || '' }} - name: Set Up Gradle With Read/Write Cache if: ${{ inputs.cache-read-only == 'false' }} uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 diff --git a/.github/actions/publish-gradle-plugin/action.yml b/.github/actions/publish-gradle-plugin/action.yml index 78857f0ef032..5d767fc7bf6a 100644 --- a/.github/actions/publish-gradle-plugin/action.yml +++ b/.github/actions/publish-gradle-plugin/action.yml @@ -21,7 +21,7 @@ runs: using: composite steps: - name: Set Up JFrog CLI - uses: jfrog/setup-jfrog-cli@e5d3afdd1d75e4aa14a4f217cca93a2a9b5b846d # v4.8.0 + uses: jfrog/setup-jfrog-cli@5b06f730cc5a6f55d78b30753f8583454b08c0aa # v4.8.1 env: JF_ENV_SPRING: ${{ inputs.jfrog-cli-config-token }} - name: Download Artifacts diff --git a/.github/actions/sync-to-maven-central/action.yml b/.github/actions/sync-to-maven-central/action.yml index 5743d76cf222..fad14ea8e5a3 100644 --- a/.github/actions/sync-to-maven-central/action.yml +++ b/.github/actions/sync-to-maven-central/action.yml @@ -17,17 +17,19 @@ runs: using: composite steps: - name: Set Up JFrog CLI - uses: jfrog/setup-jfrog-cli@e5d3afdd1d75e4aa14a4f217cca93a2a9b5b846d # v4.8.0 + uses: jfrog/setup-jfrog-cli@5b06f730cc5a6f55d78b30753f8583454b08c0aa # v4.8.1 env: JF_ENV_SPRING: ${{ inputs.jfrog-cli-config-token }} - name: Download Release Artifacts shell: bash run: jf rt download --spec ${{ format('{0}/artifacts.spec', github.action_path) }} --spec-vars 'buildName=${{ format('spring-boot-{0}', inputs.spring-boot-version) }};buildNumber=${{ github.run_number }}' - name: Sync - uses: spring-io/central-publish-action@0cdd90d12e6876341e82860d951e1bcddc1e51b6 # v0.2.0 + uses: spring-io/central-publish-action@0c03960e9b16fdfe70e2443e1d5393cbc3a35622 # v0.3.0 with: token: ${{ inputs.central-token-password }} token-name: ${{ inputs.central-token-username }} + ignore-already-exists-error: true + timeout: "90m" - name: Await uses: ./.github/actions/await-http-resource with: diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index 153e305c4077..eba36d98baff 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -3,7 +3,7 @@ on: workflow_dispatch: push: branches: - - '3.5.x' + - 'main' permissions: contents: read concurrency: @@ -28,15 +28,16 @@ jobs: gradle-cache-read-only: false publish: true - name: Deploy - uses: spring-io/artifactory-deploy-action@dc1913008c0599f0c4b1fdafb6ff3c502b3565ea # v0.0.2 + uses: spring-io/artifactory-deploy-action@926d7f7cc810569395346bf3a4d91b380b3e355b # v0.0.4 with: - build-name: ${{ vars.COMMERCIAL && format('spring-boot-commercial-{0}', '3.5.x') || format('spring-boot-{0}', '3.5.x') }} + build-name: ${{ vars.COMMERCIAL && format('spring-boot-commercial-{0}', '4.0.x') || format('spring-boot-{0}', '4.0.x') }} folder: 'deployment-repository' password: ${{ vars.COMMERCIAL && secrets.COMMERCIAL_ARTIFACTORY_PASSWORD || secrets.ARTIFACTORY_PASSWORD }} project: ${{ vars.COMMERCIAL && 'spring' }} repository: ${{ vars.COMMERCIAL && 'spring-enterprise-maven-dev-local' || 'libs-snapshot-local' }} signing-key: ${{ secrets.GPG_PRIVATE_KEY }} signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} + threads: 8 uri: ${{ vars.COMMERCIAL_DEPLOY_REPO_URL || 'https://repo.spring.io' }} username: ${{ vars.COMMERCIAL && secrets.COMMERCIAL_ARTIFACTORY_USERNAME || secrets.ARTIFACTORY_USERNAME }} - name: Send Notification @@ -44,7 +45,7 @@ jobs: uses: ./.github/actions/send-notification with: build-scan-url: ${{ steps.build-and-publish.outputs.build-scan-url }} - run-name: ${{ format('{0} | Linux | Java 17', github.ref_name) }} + run-name: ${{ format('{0} | Linux | Java 25', github.ref_name) }} status: ${{ job.status }} webhook-url: ${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }} outputs: diff --git a/.github/workflows/build-pull-request.yml b/.github/workflows/build-pull-request.yml index 865f20aa3a23..372965914e62 100644 --- a/.github/workflows/build-pull-request.yml +++ b/.github/workflows/build-pull-request.yml @@ -18,7 +18,7 @@ jobs: uses: ./.github/actions/print-jvm-thread-dumps - name: Upload Build Reports if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: build-reports path: '**/build/reports/' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a2e2e6156e36..647e1d5c4c61 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,7 +2,7 @@ name: CI on: push: branches: - - '3.5.x' + - 'main' permissions: contents: read jobs: @@ -20,16 +20,16 @@ jobs: name: Windows java: - version: 17 - toolchain: false + toolchain: true - version: 21 - toolchain: false - - version: 25 toolchain: true + - version: 25 + toolchain: false exclude: - os: name: Linux java: - version: 17 + version: 25 - os: name: ${{ github.repository == 'spring-projects/spring-boot-commercial' && 'Windows' }} steps: diff --git a/.github/workflows/release-milestone.yml b/.github/workflows/release-milestone.yml new file mode 100644 index 000000000000..092995d8b79a --- /dev/null +++ b/.github/workflows/release-milestone.yml @@ -0,0 +1,131 @@ +name: Release Milestone +on: + push: + tags: + - v4.0.0-M[0-9] + - v4.0.0-RC[0-9] +permissions: + contents: read +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} +jobs: + build-and-stage-release: + name: Build and Stage Release + if: ${{ github.repository == 'spring-projects/spring-boot' }} + runs-on: ${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} + steps: + - name: Check Out Code + uses: actions/checkout@v5 + - name: Build and Publish + id: build-and-publish + uses: ./.github/actions/build + with: + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + gradle-cache-read-only: false + publish: true + - name: Stage Release + uses: spring-io/artifactory-deploy-action@926d7f7cc810569395346bf3a4d91b380b3e355b # v0.0.4 + with: + build-name: ${{ format('spring-boot-{0}', steps.build-and-publish.outputs.version)}} + folder: 'deployment-repository' + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + repository: 'libs-staging-local' + signing-key: ${{ secrets.GPG_PRIVATE_KEY }} + signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} + threads: 8 + uri: 'https://repo.spring.io' + username: ${{ secrets.ARTIFACTORY_USERNAME }} + outputs: + version: ${{ steps.build-and-publish.outputs.version }} + verify: + name: Verify + needs: build-and-stage-release + uses: ./.github/workflows/verify.yml + secrets: + commercial-repository-password: ${{ secrets.COMMERCIAL_ARTIFACTORY_RO_PASSWORD }} + commercial-repository-username: ${{ secrets.COMMERCIAL_ARTIFACTORY_RO_USERNAME }} + google-chat-webhook-url: ${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }} + opensource-repository-password: ${{ secrets.ARTIFACTORY_PASSWORD }} + opensource-repository-username: ${{ secrets.ARTIFACTORY_USERNAME }} + token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} + with: + staging: true + version: ${{ needs.build-and-stage-release.outputs.version }} + sync-to-maven-central: + name: Sync to Maven Central + if: ${{ !vars.COMMERCIAL }} + needs: + - build-and-stage-release + - verify + runs-on: ${{ vars.UBUNTU_SMALL || 'ubuntu-latest' }} + steps: + - name: Check Out Code + uses: actions/checkout@v5 + - name: Sync to Maven Central + uses: ./.github/actions/sync-to-maven-central + with: + central-token-password: ${{ secrets.CENTRAL_TOKEN_PASSWORD }} + central-token-username: ${{ secrets.CENTRAL_TOKEN_USERNAME }} + jfrog-cli-config-token: ${{ secrets.JF_ARTIFACTORY_SPRING }} + spring-boot-version: ${{ needs.build-and-stage-release.outputs.version }} + promote-release: + name: Promote Release + needs: + - build-and-stage-release + - sync-to-maven-central + runs-on: ${{ vars.UBUNTU_SMALL || 'ubuntu-latest' }} + steps: + - name: Set up JFrog CLI + uses: jfrog/setup-jfrog-cli@5b06f730cc5a6f55d78b30753f8583454b08c0aa # v4.8.1 + env: + JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} + - name: Promote build + run: jfrog rt build-promote ${{ format('spring-boot-{0}', needs.build-and-stage-release.outputs.version)}} ${{ github.run_number }} libs-milestone-local + publish-gradle-plugin: + name: Publish Gradle Plugin + if: ${{ !vars.COMMERCIAL }} + needs: + - build-and-stage-release + - sync-to-maven-central + runs-on: ${{ vars.UBUNTU_SMALL || 'ubuntu-latest' }} + steps: + - name: Check Out Code + uses: actions/checkout@v5 + - name: Publish + uses: ./.github/actions/publish-gradle-plugin + with: + gradle-plugin-publish-key: ${{ secrets.GRADLE_PLUGIN_PUBLISH_KEY }} + gradle-plugin-publish-secret: ${{ secrets.GRADLE_PLUGIN_PUBLISH_SECRET }} + jfrog-cli-config-token: ${{ secrets.JF_ARTIFACTORY_SPRING }} + plugin-version: ${{ needs.build-and-stage-release.outputs.version }} + trigger-docs-build: + name: Trigger Docs Build + needs: + - build-and-stage-release + - sync-to-maven-central + permissions: + actions: write + runs-on: ubuntu-latest + steps: + - name: Run Deploy Docs Workflow + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh workflow run deploy-docs.yml --repo ${{ github.repository }} -r docs-build -f build-refname=${{ github.ref_name }} -f build-version=${{ needs.build-and-stage-release.outputs.version }} + create-github-release: + name: Create GitHub Release + needs: + - build-and-stage-release + - promote-release + - publish-gradle-plugin + - trigger-docs-build + runs-on: ${{ vars.UBUNTU_SMALL || 'ubuntu-latest' }} + steps: + - name: Check Out Code + uses: actions/checkout@v5 + - name: Create GitHub Release + uses: ./.github/actions/create-github-release + with: + commercial: ${{ vars.COMMERCIAL }} + milestone: ${{ needs.build-and-stage-release.outputs.version }} + pre-release: true + token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 039b4f223972..60533077bc04 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ name: Release on: push: tags: - - v3.5.[0-9]+ + - v4.0.[0-9]+ permissions: contents: read concurrency: @@ -27,7 +27,7 @@ jobs: gradle-cache-read-only: false publish: true - name: Stage Release - uses: spring-io/artifactory-deploy-action@dc1913008c0599f0c4b1fdafb6ff3c502b3565ea # v0.0.2 + uses: spring-io/artifactory-deploy-action@926d7f7cc810569395346bf3a4d91b380b3e355b # v0.0.4 with: build-name: ${{ vars.COMMERCIAL && format('spring-boot-commercial-{0}', steps.build-and-publish.outputs.version) || format('spring-boot-{0}', steps.build-and-publish.outputs.version) }} folder: 'deployment-repository' @@ -36,6 +36,7 @@ jobs: repository: ${{ vars.COMMERCIAL && 'spring-enterprise-maven-stage-local' || 'libs-staging-local' }} signing-key: ${{ secrets.GPG_PRIVATE_KEY }} signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} + threads: 8 uri: ${{ vars.COMMERCIAL_DEPLOY_REPO_URL || 'https://repo.spring.io' }} username: ${{ vars.COMMERCIAL && secrets.COMMERCIAL_ARTIFACTORY_USERNAME || secrets.ARTIFACTORY_USERNAME }} - name: Send Notification @@ -86,7 +87,7 @@ jobs: runs-on: ${{ vars.UBUNTU_SMALL || 'ubuntu-latest' }} steps: - name: Set up JFrog CLI - uses: jfrog/setup-jfrog-cli@e5d3afdd1d75e4aa14a4f217cca93a2a9b5b846d # v4.8.0 + uses: jfrog/setup-jfrog-cli@5b06f730cc5a6f55d78b30753f8583454b08c0aa # v4.8.1 env: JF_ENV_SPRING: ${{ vars.COMMERCIAL && secrets.COMMERCIAL_JF_ARTIFACTORY_SPRING || secrets.JF_ARTIFACTORY_SPRING }} - name: Promote open source build diff --git a/.github/workflows/run-system-tests.yml b/.github/workflows/run-system-tests.yml index a290c3ea5c91..78d315beedd2 100644 --- a/.github/workflows/run-system-tests.yml +++ b/.github/workflows/run-system-tests.yml @@ -2,7 +2,7 @@ name: Run System Tests on: push: branches: - - '3.5.x' + - 'main' permissions: contents: read jobs: @@ -14,7 +14,7 @@ jobs: matrix: java: - version: 17 - toolchain: false + toolchain: true - version: 21 toolchain: true steps: diff --git a/.github/workflows/trigger-docs-build.yml b/.github/workflows/trigger-docs-build.yml index c87f4cd5504c..1cafae2f762a 100644 --- a/.github/workflows/trigger-docs-build.yml +++ b/.github/workflows/trigger-docs-build.yml @@ -1,7 +1,7 @@ name: Trigger Docs Build on: push: - branches: '3.5.x' + branches: 'main' paths: [ 'antora/*' ] workflow_dispatch: inputs: diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 65d4b1a65f7b..dfb55fe4cdfe 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -79,7 +79,7 @@ jobs: run: ./gradlew spring-boot-release-verification-tests:test - name: Upload Build Reports on Failure if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: build-reports path: '**/build/reports/' diff --git a/.gitignore b/.gitignore index 1198c2da875d..d5e93a54c629 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ secrets.yml .sts4-cache .git-hooks/ node_modules +/.kotlin/ diff --git a/.sdkmanrc b/.sdkmanrc index c23d38be4c92..20a43d7a9cfd 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=17.0.16-librca +java=25.0.1-librca diff --git a/README.adoc b/README.adoc index 135b16680888..c34f35703612 100755 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -= Spring Boot image:https://github.com/spring-projects/spring-boot/actions/workflows/build-and-deploy-snapshot.yml?query=branch%3A3.5.x["Build Status", link="https://github.com/spring-projects/spring-boot/actions/workflows/build-and-deploy-snapshot.yml?query=branch%3A3.5.x"] image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A["Revved up by Develocity", link="https://ge.spring.io/scans?&search.rootProjectNames=Spring%20Boot%20Build&search.rootProjectNames=spring-boot-build"] += Spring Boot image:https://github.com/spring-projects/spring-boot/actions/workflows/build-and-deploy-snapshot.yml/badge.svg?branch=main["Build Status", link="https://github.com/spring-projects/spring-boot/actions/workflows/build-and-deploy-snapshot.yml?query=branch%3Amain"] image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A["Revved up by Develocity", link="https://ge.spring.io/scans?&search.rootProjectNames=Spring%20Boot%20Build&search.rootProjectNames=spring-boot-build"] :docs: https://docs.spring.io/spring-boot :github: https://github.com/spring-projects/spring-boot @@ -86,7 +86,7 @@ We like to know the Spring Boot version, operating system, and JVM version you'r == Building from Source You don't need to build from source to use Spring Boot (binaries in https://repo.spring.io[repo.spring.io]), but if you want to try out the latest and greatest, Spring Boot can be built and published to your local Maven cache using the https://docs.gradle.org/current/userguide/gradle_wrapper.html[Gradle wrapper]. -You also need JDK 17. +You also need JDK 24. [source,shell] ---- @@ -116,7 +116,7 @@ The main library providing features that support the other parts of Spring Boot. * The `SpringApplication` class, providing static convenience methods that can be used to write a stand-alone Spring Application. Its sole job is to create and refresh an appropriate Spring `ApplicationContext`. -* Embedded web applications with a choice of container (Tomcat, Jetty, or Undertow). +* Embedded web applications with a choice of container (Tomcat, Jetty). * First-class externalized configuration support. * Convenience `ApplicationContext` initializers, including support for sensible logging defaults. diff --git a/antora/package-lock.json b/antora/package-lock.json index 55e5297e2e05..13613467481e 100644 --- a/antora/package-lock.json +++ b/antora/package-lock.json @@ -4,38 +4,38 @@ "requires": true, "packages": { "": { - "hasInstallScript": true, "dependencies": { - "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/cli": "3.2.0-alpha.4", - "@antora/site-generator": "3.2.0-alpha.4", + "@antora/atlas-extension": "1.0.0-alpha.5", + "@antora/cli": "3.2.0-alpha.10", + "@antora/site-generator": "3.2.0-alpha.10", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.11.1", - "@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.1" + "@springio/antora-extensions": "1.14.7", + "@springio/antora-xref-extension": "1.0.0-alpha.5", + "@springio/antora-zip-contents-collector-extension": "1.0.0-alpha.10", + "@springio/asciidoctor-extensions": "1.0.0-alpha.17" } }, "node_modules/@antora/asciidoc-loader": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/asciidoc-loader/-/asciidoc-loader-3.2.0-alpha.4.tgz", - "integrity": "sha512-FRNq3ErMFMJPHxYQxHyuMdX4YULs9aXc+njmAoMGbyO9SNAYCwzirOBXVQegefcGDn85Y/3zLU6BanZNpxCaXQ==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/asciidoc-loader/-/asciidoc-loader-3.2.0-alpha.10.tgz", + "integrity": "sha512-cfvouFTjHh/FqoCoYfPGHN6jInBSI7yjUObhjJfZWlwXGlnJEK2wnqtsnA8/xxQ1EJYaSywlHy2NmoT8d5aHtQ==", + "license": "MPL-2.0", "dependencies": { - "@antora/logger": "3.2.0-alpha.4", - "@antora/user-require-helper": "~2.0", + "@antora/logger": "3.2.0-alpha.10", + "@antora/user-require-helper": "~3.0", "@asciidoctor/core": "~2.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/atlas-extension": { - "version": "1.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/@antora/atlas-extension/-/atlas-extension-1.0.0-alpha.2.tgz", - "integrity": "sha512-tOQy3eQjvoYGV3UnDaOjkaCehbWSpjQWRdCCYXx8c2Do4rysclOVVN4t4AsfeOHK+BoWlKqa7mldb1DCYOBQTw==", + "version": "1.0.0-alpha.5", + "resolved": "https://registry.npmjs.org/@antora/atlas-extension/-/atlas-extension-1.0.0-alpha.5.tgz", + "integrity": "sha512-zuewa8wp4AqgU+oug/GK2n0k/l40Pd72rF6pkUlNnAcY11nUUbtWAGWNbLWFalKJmZ5BTpLUnlCu1QluLiBcuw==", + "license": "MPL-2.0", "dependencies": { - "@antora/expand-path-helper": "~2.0", + "@antora/expand-path-helper": "~3.0", "cache-directory": "~2.0", "node-gzip": "~1.1", "simple-get": "~4.0" @@ -44,71 +44,93 @@ "node": ">=16.0.0" } }, + "node_modules/@antora/atlas-extension/node_modules/@antora/expand-path-helper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-3.0.0.tgz", + "integrity": "sha512-7PdEIhk97v85/CSm3HynCsX14TR6oIVz1s233nNLsiWubE8tTnpPt4sNRJR+hpmIZ6Bx9c6QDp3XIoiyu/WYYA==", + "license": "MPL-2.0", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@antora/cli": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/cli/-/cli-3.2.0-alpha.4.tgz", - "integrity": "sha512-tRTdO1Cp5hmV4sZZbD/Y0bZ+fQSCcESc1Y8txmCG+25lFC8PefjKC0mgWOq25RAjNxlUZ390DU35NNR9McjUsA==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/cli/-/cli-3.2.0-alpha.10.tgz", + "integrity": "sha512-7camaWi34Z2WtienCY6RX/LqIPIoNGmDA1wGuBNP58XGT6UVlE109fjeCkY0H1fKDKZ68hmnSnAMFLj+wTKUZw==", + "license": "MPL-2.0", "dependencies": { - "@antora/logger": "3.2.0-alpha.4", - "@antora/playbook-builder": "3.2.0-alpha.4", - "@antora/user-require-helper": "~2.0", - "commander": "~10.0" + "@antora/logger": "3.2.0-alpha.10", + "@antora/playbook-builder": "3.2.0-alpha.10", + "@antora/user-require-helper": "~3.0", + "commander": "~12.1" }, "bin": { "antora": "bin/antora" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/content-aggregator": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/content-aggregator/-/content-aggregator-3.2.0-alpha.4.tgz", - "integrity": "sha512-+Y6WybHnNN7bw/MFUPL8ca6SiNqT2AUZCI1NRhwYym2JD6dBIwGedNEh76a7MGTObQXKjlBrmm025FHBWg4j5Q==", - "dependencies": { - "@antora/expand-path-helper": "~2.0", - "@antora/logger": "3.2.0-alpha.4", - "@antora/user-require-helper": "~2.0", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/content-aggregator/-/content-aggregator-3.2.0-alpha.10.tgz", + "integrity": "sha512-wvo3/lIMKlpkKGgzhPKDvVYlbFY4ga/bbvbLTLFHPZuNDQ57+HQA/cCLsyYURkuiJFTmkw4CnmggAv8uwvW98g==", + "license": "MPL-2.0", + "dependencies": { + "@antora/expand-path-helper": "~3.0", + "@antora/logger": "3.2.0-alpha.10", + "@antora/user-require-helper": "~3.0", "braces": "~3.0", "cache-directory": "~2.0", - "glob-stream": "~7.0", + "fast-glob": "~3.3", "hpagent": "~1.2", "isomorphic-git": "~1.25", "js-yaml": "~4.1", "multi-progress": "~4.0", - "picomatch": "~2.3", + "picomatch": "~4.0", "progress": "~2.0", "should-proxy": "~1.0", "simple-get": "~4.0", - "vinyl": "~2.2" + "vinyl": "~3.0" }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@antora/content-aggregator/node_modules/@antora/expand-path-helper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-3.0.0.tgz", + "integrity": "sha512-7PdEIhk97v85/CSm3HynCsX14TR6oIVz1s233nNLsiWubE8tTnpPt4sNRJR+hpmIZ6Bx9c6QDp3XIoiyu/WYYA==", + "license": "MPL-2.0", "engines": { "node": ">=16.0.0" } }, "node_modules/@antora/content-classifier": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/content-classifier/-/content-classifier-3.2.0-alpha.4.tgz", - "integrity": "sha512-XN5JzSum/nxv1fEb7j8vFG1FLaEnBXnPxzY+hC1/pGODXVVlFVyRoxR35fx91oJ8TgVIHI+bLvymsF/MJYYmbQ==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/content-classifier/-/content-classifier-3.2.0-alpha.10.tgz", + "integrity": "sha512-ixjJDSEUIOx7Lyd6dUFWcVTTuUTsWELA0Roh8bBizaBPwgzvH7aKx89TclUVMhFkfGtZao0ePMSNxT1CLv93mA==", + "license": "MPL-2.0", "dependencies": { - "@antora/asciidoc-loader": "3.2.0-alpha.4", - "@antora/logger": "3.2.0-alpha.4", + "@antora/asciidoc-loader": "3.2.0-alpha.10", + "@antora/logger": "3.2.0-alpha.10", "mime-types": "~2.1", - "vinyl": "~2.2" + "vinyl": "~3.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/document-converter": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/document-converter/-/document-converter-3.2.0-alpha.4.tgz", - "integrity": "sha512-Wbh76FELpHBfqvnKiAPvXtxkTeGP0Fk/2nZBkmTTWbpBSs98o7YfNWnVQ9Ky86jdXGmxM+LMNFoXKVIzNbpd3g==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/document-converter/-/document-converter-3.2.0-alpha.10.tgz", + "integrity": "sha512-Zn1GGILyo3ET6AltscOjjmyN+spB0/IrqFyGjEig4nn9YPUsz2EBSlCYpVGsF7BR9Qv8QTVbnLXwEePWIoOf9g==", + "license": "MPL-2.0", "dependencies": { - "@antora/asciidoc-loader": "3.2.0-alpha.4" + "@antora/asciidoc-loader": "3.2.0-alpha.10" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/expand-path-helper": { @@ -120,166 +142,227 @@ } }, "node_modules/@antora/file-publisher": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/file-publisher/-/file-publisher-3.2.0-alpha.4.tgz", - "integrity": "sha512-DqH5RpdcshVhA4Xq2JQ2M7Rk3IhrOtV5ivI+oXU4yQlQW7IqchJnCmsOa885xPo8f5v2fpXRaZ5iyvRBUMaH2A==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/file-publisher/-/file-publisher-3.2.0-alpha.10.tgz", + "integrity": "sha512-srTsC8mDJaK1s3nVvfrOWUtKqWVRJrMEt0Pp82OjutkckW7VB6XzzPouPD83PqD0DI0GFiOofddDgtSFcD+LDg==", + "license": "MPL-2.0", "dependencies": { - "@antora/expand-path-helper": "~2.0", - "@antora/user-require-helper": "~2.0", - "@vscode/gulp-vinyl-zip": "~2.5", - "vinyl": "~2.2", - "vinyl-fs": "~3.0" + "@antora/expand-path-helper": "~3.0", + "@antora/user-require-helper": "~3.0", + "vinyl": "~3.0", + "yazl": "~2.5" }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@antora/file-publisher/node_modules/@antora/expand-path-helper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-3.0.0.tgz", + "integrity": "sha512-7PdEIhk97v85/CSm3HynCsX14TR6oIVz1s233nNLsiWubE8tTnpPt4sNRJR+hpmIZ6Bx9c6QDp3XIoiyu/WYYA==", + "license": "MPL-2.0", "engines": { "node": ">=16.0.0" } }, "node_modules/@antora/logger": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/logger/-/logger-3.2.0-alpha.4.tgz", - "integrity": "sha512-ph+vIUVvZQHLA3EreBaViAB01IYzq0yjdcUSp5CVcqxU9+CnuuBKDvix6Pll7LJwgFJ8i3UX4mVVW1lI3h2tYg==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/logger/-/logger-3.2.0-alpha.10.tgz", + "integrity": "sha512-/Tg6/xmy5q9JgAWyDodtmn03s+JaFKMrEk26V5Vofb9NM965vQ1vxcmL9GNJyi6dLxfR1NNdYSVrtNakCvEK9g==", + "license": "MPL-2.0", "dependencies": { - "@antora/expand-path-helper": "~2.0", - "pino": "~8.14", - "pino-pretty": "~10.0", - "sonic-boom": "~3.3" + "@antora/expand-path-helper": "~3.0", + "pino": "~9.2", + "pino-pretty": "~11.2", + "sonic-boom": "~4.0" }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@antora/logger/node_modules/@antora/expand-path-helper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-3.0.0.tgz", + "integrity": "sha512-7PdEIhk97v85/CSm3HynCsX14TR6oIVz1s233nNLsiWubE8tTnpPt4sNRJR+hpmIZ6Bx9c6QDp3XIoiyu/WYYA==", + "license": "MPL-2.0", "engines": { "node": ">=16.0.0" } }, "node_modules/@antora/navigation-builder": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/navigation-builder/-/navigation-builder-3.2.0-alpha.4.tgz", - "integrity": "sha512-qoF57QOIi2RvmqSYuaetA2IRoHizPXIs5kUKmk/uqiMq6akWaklSI9QHPhq6VsNgLdWaUomQ+gJCvnhjQQkw5w==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/navigation-builder/-/navigation-builder-3.2.0-alpha.10.tgz", + "integrity": "sha512-0WFJu9iWeLGGh5aHkXOLQJx6tZMkS+giE7qK1vXiBSSxG0/0St2e1I3zJLViaFXxlAlHqqal5yi7WMMNo40/iA==", + "license": "MPL-2.0", "dependencies": { - "@antora/asciidoc-loader": "3.2.0-alpha.4" + "@antora/asciidoc-loader": "3.2.0-alpha.10" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/page-composer": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/page-composer/-/page-composer-3.2.0-alpha.4.tgz", - "integrity": "sha512-LAbNdUYomqx9iCT+mP1bF17U5vIoBObD0VAtjF6IMD+b5xyDN1O82rZgHhDByn8R6es0oA6DrkQMwPH+oxR7fQ==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/page-composer/-/page-composer-3.2.0-alpha.10.tgz", + "integrity": "sha512-Wz21yPYGgKnGhooBQDbrQeziF+u9oeooHUgX21zWmAlC7GZncYdEMrP9adiu1rMN5a1Em9L+l4wbLGUNCGM7qA==", + "license": "MPL-2.0", "dependencies": { - "@antora/logger": "3.2.0-alpha.4", + "@antora/logger": "3.2.0-alpha.10", "handlebars": "~4.7", "require-from-string": "~2.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/playbook-builder": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/playbook-builder/-/playbook-builder-3.2.0-alpha.4.tgz", - "integrity": "sha512-79ERFWrOAaxr1iEW8qS7rMpjyYD9Lwt53Y18qIGLf0jtqgIVmmgJtaSR1qwrO/rYd2GIqWpm+s12NWzqJLZAog==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/playbook-builder/-/playbook-builder-3.2.0-alpha.10.tgz", + "integrity": "sha512-p2BwoNuFKvPosqHQMDICJVykVfgYkvHZk2tBtcsK+2k7/Gx+OBbOawGN23LUjJmZ74MbA5T9GVUxz7uJdPS8tg==", + "license": "MPL-2.0", "dependencies": { "@iarna/toml": "~2.2", "convict": "~6.2", "js-yaml": "~4.1", - "json5": "~2.2" + "json5": "~2.2", + "yargs-parser": "~20.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/redirect-producer": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/redirect-producer/-/redirect-producer-3.2.0-alpha.4.tgz", - "integrity": "sha512-BMm0l6jGdKN7r5xCP8cQmHy+owTwT0pXlsx1ZmTXZiq66Ec0H6ykKNQhx7scezbytlg18bwXUYNAtEQg/6c2AA==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/redirect-producer/-/redirect-producer-3.2.0-alpha.10.tgz", + "integrity": "sha512-KX9Xks3T7Tyub3qCixn7B0/pRj5P32FVpWwmYAXggYMLEQssXwwdERi+H2O1erevU45+GooL/CNzzVsVXESyjg==", + "license": "MPL-2.0", "dependencies": { - "vinyl": "~2.2" + "vinyl": "~3.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/site-generator": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/site-generator/-/site-generator-3.2.0-alpha.4.tgz", - "integrity": "sha512-QYaq9TMyPLHnUnyiO4AzRnU7igGE6Kc41j9ff8ijrGEK/YqxRmDTG74r8VdgdtotpSjcnXTQPJ46neJKExcKvg==", - "dependencies": { - "@antora/asciidoc-loader": "3.2.0-alpha.4", - "@antora/content-aggregator": "3.2.0-alpha.4", - "@antora/content-classifier": "3.2.0-alpha.4", - "@antora/document-converter": "3.2.0-alpha.4", - "@antora/file-publisher": "3.2.0-alpha.4", - "@antora/logger": "3.2.0-alpha.4", - "@antora/navigation-builder": "3.2.0-alpha.4", - "@antora/page-composer": "3.2.0-alpha.4", - "@antora/playbook-builder": "3.2.0-alpha.4", - "@antora/redirect-producer": "3.2.0-alpha.4", - "@antora/site-mapper": "3.2.0-alpha.4", - "@antora/site-publisher": "3.2.0-alpha.4", - "@antora/ui-loader": "3.2.0-alpha.4", - "@antora/user-require-helper": "~2.0" - }, - "engines": { - "node": ">=16.0.0" + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/site-generator/-/site-generator-3.2.0-alpha.10.tgz", + "integrity": "sha512-jloVAjCNoVjT1jBU+HKuJvSIEs4ZQhRSuZUZwFBppxJsLxUKyYIyo6wj37VrjejvdzQBaiNOnOMONgFk32tbnA==", + "license": "MPL-2.0", + "dependencies": { + "@antora/asciidoc-loader": "3.2.0-alpha.10", + "@antora/content-aggregator": "3.2.0-alpha.10", + "@antora/content-classifier": "3.2.0-alpha.10", + "@antora/document-converter": "3.2.0-alpha.10", + "@antora/file-publisher": "3.2.0-alpha.10", + "@antora/logger": "3.2.0-alpha.10", + "@antora/navigation-builder": "3.2.0-alpha.10", + "@antora/page-composer": "3.2.0-alpha.10", + "@antora/playbook-builder": "3.2.0-alpha.10", + "@antora/redirect-producer": "3.2.0-alpha.10", + "@antora/site-mapper": "3.2.0-alpha.10", + "@antora/site-publisher": "3.2.0-alpha.10", + "@antora/ui-loader": "3.2.0-alpha.10", + "@antora/user-require-helper": "~3.0" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@antora/site-mapper": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/site-mapper/-/site-mapper-3.2.0-alpha.4.tgz", - "integrity": "sha512-9SD2HOxqYjNQ88qg4QDVbIvSyd3aYeVAUwdA50eRvWLgnToTwDorjt/nfZnbRXGNszWil9nOZ+F8+LV2BkPpTw==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/site-mapper/-/site-mapper-3.2.0-alpha.10.tgz", + "integrity": "sha512-WsswwfKdvbfyYlJlVWNhswbl74qE/5FgXy4Q1dSdvBANKCi2bUzzj4KdZmPN6l/k3QvVxGAyed0tnFTLg90lYA==", + "license": "MPL-2.0", "dependencies": { - "@antora/content-classifier": "3.2.0-alpha.4", - "vinyl": "~2.2" + "@antora/content-classifier": "3.2.0-alpha.10", + "vinyl": "~3.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/site-publisher": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/site-publisher/-/site-publisher-3.2.0-alpha.4.tgz", - "integrity": "sha512-GiakkrGR/eTjh7o/ZISoYDUcDSXn/zodXTiX++fqHSrzscWTOcId4IC3Lj8oRDmISrh7U3la6Ydtld4xMbtSsQ==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/site-publisher/-/site-publisher-3.2.0-alpha.10.tgz", + "integrity": "sha512-hNz6KuOLeI0emlKjRCW0akYuACj+8e9Sk3RI6XHvx13uuDH3+ieJReNsIOjw4j4KSY6sm4CZPgnfmk2WeIoOCw==", + "license": "MPL-2.0", "dependencies": { - "@antora/file-publisher": "3.2.0-alpha.4" + "@antora/file-publisher": "3.2.0-alpha.10" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@antora/ui-loader": { - "version": "3.2.0-alpha.4", - "resolved": "https://registry.npmjs.org/@antora/ui-loader/-/ui-loader-3.2.0-alpha.4.tgz", - "integrity": "sha512-I7srOOR/tsORa+L+xIkPCVR365yQKO1JEylDkQbaMhbuPFhTmRV4mQXgUeLsfprtVXiSoaFw960SrWd77TX/dA==", + "version": "3.2.0-alpha.10", + "resolved": "https://registry.npmjs.org/@antora/ui-loader/-/ui-loader-3.2.0-alpha.10.tgz", + "integrity": "sha512-VADaSzV4VvMLRb5gymrHSg1p2tQ4CnZ5YAdQxV+w7Mg0bImXlBhwRqPLJ51tNZCAnRewn8gvpyoe1AxIyDoTog==", + "license": "MPL-2.0", "dependencies": { - "@antora/expand-path-helper": "~2.0", - "@vscode/gulp-vinyl-zip": "~2.5", + "@antora/expand-path-helper": "~3.0", "braces": "~3.0", "cache-directory": "~2.0", - "glob-stream": "~7.0", + "fast-glob": "~3.3", "hpagent": "~1.2", "js-yaml": "~4.1", - "picomatch": "~2.3", + "picomatch": "~4.0", "should-proxy": "~1.0", "simple-get": "~4.0", - "vinyl": "~2.2" + "vinyl": "~3.0", + "yauzl": "~3.1" }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@antora/ui-loader/node_modules/@antora/expand-path-helper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-3.0.0.tgz", + "integrity": "sha512-7PdEIhk97v85/CSm3HynCsX14TR6oIVz1s233nNLsiWubE8tTnpPt4sNRJR+hpmIZ6Bx9c6QDp3XIoiyu/WYYA==", + "license": "MPL-2.0", "engines": { "node": ">=16.0.0" } }, + "node_modules/@antora/ui-loader/node_modules/yauzl": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.3.tgz", + "integrity": "sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@antora/user-require-helper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@antora/user-require-helper/-/user-require-helper-2.0.0.tgz", - "integrity": "sha512-5fMfBZfw4zLoFdDAPMQX6Frik90uvfD8rXOA4UpXPOUikkX4uT1Rk6m0/4oi8oS3fcjiIl0k/7Nc+eTxW5TcQQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/user-require-helper/-/user-require-helper-3.0.0.tgz", + "integrity": "sha512-KIXb8WYhnrnwH7Jj21l1w+et9k5GvcgcqvLOwxqWLEd0uVZOiMFdqFjqbVm3M+zcrs1JXWMeh2LLvxBbQs3q/Q==", + "license": "MPL-2.0", "dependencies": { - "@antora/expand-path-helper": "~2.0" + "@antora/expand-path-helper": "~3.0" }, "engines": { - "node": ">=10.17.0" + "node": ">=16.0.0" + } + }, + "node_modules/@antora/user-require-helper/node_modules/@antora/expand-path-helper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-3.0.0.tgz", + "integrity": "sha512-7PdEIhk97v85/CSm3HynCsX14TR6oIVz1s233nNLsiWubE8tTnpPt4sNRJR+hpmIZ6Bx9c6QDp3XIoiyu/WYYA==", + "license": "MPL-2.0", + "engines": { + "node": ">=16.0.0" } }, "node_modules/@asciidoctor/core": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.7.tgz", - "integrity": "sha512-63cfnV606vXNUnh/zcuUi5e3tY5qTzaYY5pGP4p9sRk8CcCmX4Z8OfU0BkfM8/k2Y7Cz/jZqxL+vzHjrLQa8tw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.8.tgz", + "integrity": "sha512-oozXk7ZO1RAd/KLFLkKOhqTcG4GO3CV44WwOFg2gMcCsqCUTarvMT7xERIoWW2WurKbB0/ce+98r01p8xPOlBw==", + "license": "MIT", "dependencies": { "asciidoctor-opal-runtime": "0.3.3", "unxhr": "1.0.1" @@ -313,12 +396,49 @@ "node_modules/@iarna/toml": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "license": "ISC" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } }, "node_modules/@springio/antora-extensions": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@springio/antora-extensions/-/antora-extensions-1.11.1.tgz", - "integrity": "sha512-mS5w7Nq1AGUEmOqhohRUG6qIBkYaG+ApKshqbb+e+Slg8ZnPsjrNeAJumXwLsv1CrEFJRWdxq6owXiK/21Rzyw==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/@springio/antora-extensions/-/antora-extensions-1.14.7.tgz", + "integrity": "sha512-lu++qtzSTAAznFvUEegoyaDfSJXQK1Ftk8NHxWhqzvPAx0t8oO3kNQE1C/5m1qs97QRtKh0UbJ26qEfEQDEcpQ==", + "license": "ASL-2.0", "dependencies": { "@antora/expand-path-helper": "~2.0", "archiver": "^5.3.1", @@ -326,7 +446,7 @@ "cache-directory": "~2.0", "ci": "^2.3.0", "decompress": "4.2.1", - "fast-xml-parser": "latest", + "fast-xml-parser": "^4.5.2", "handlebars": "latest" }, "engines": { @@ -334,17 +454,19 @@ } }, "node_modules/@springio/antora-xref-extension": { - "version": "1.0.0-alpha.4", - "resolved": "https://registry.npmjs.org/@springio/antora-xref-extension/-/antora-xref-extension-1.0.0-alpha.4.tgz", - "integrity": "sha512-ybIqQaNgK2pjAkOAd/A+IXK5AmxDZcKfpsp528UXIG2N3L4KFwvwljhANHktS0HHiN5QMZp0PuD0WZsClpenhQ==", + "version": "1.0.0-alpha.5", + "resolved": "https://registry.npmjs.org/@springio/antora-xref-extension/-/antora-xref-extension-1.0.0-alpha.5.tgz", + "integrity": "sha512-X7gjjMffHYr/Bz9CR1Dpc44NjkOFLTAzNHzxOxj+RUZHhrbbcnj4h3tBDxSUffiddKcqQ/AEHV+SoAngW/pavA==", + "license": "Apache-2.0", "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@springio/antora-zip-contents-collector-extension": { - "version": "1.0.0-alpha.8", - "resolved": "https://registry.npmjs.org/@springio/antora-zip-contents-collector-extension/-/antora-zip-contents-collector-extension-1.0.0-alpha.8.tgz", - "integrity": "sha512-pp1hozg/UGQpkrJ17NImrcRd5b8hxIsLXHDYeBBR/vtzR7uiokxA1JxtL6PTfPAdjnrYf+2ApXdCgzLdNI7Rgg==", + "version": "1.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/@springio/antora-zip-contents-collector-extension/-/antora-zip-contents-collector-extension-1.0.0-alpha.10.tgz", + "integrity": "sha512-0O4eksIv7Y6N6VvGq6r92AyjpPfauLFOkXU283Y1r0RwfvohuSGO8OmnAv9h+t7v+G3ILwDrRV4vJ8oHh0gErw==", + "license": "Apache-2.0", "dependencies": { "@antora/expand-path-helper": "~2.0", "cache-directory": "~2.0", @@ -400,32 +522,11 @@ "node": ">=16.0.0" } }, - "node_modules/@vscode/gulp-vinyl-zip": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@vscode/gulp-vinyl-zip/-/gulp-vinyl-zip-2.5.0.tgz", - "integrity": "sha512-PP/xkOoLBSY3V04HmzRxF+NOxkRJ/m2D0YwWpfx1FCFv5G8+sZUGPvxX+LRgdJ5vQcR1RHck5x1IkHi75Qjdbw==", - "dependencies": { - "queue": "^4.2.1", - "through": "^2.3.8", - "through2": "^2.0.3", - "vinyl": "^2.0.2", - "vinyl-fs": "^3.0.3", - "yauzl": "^2.2.1", - "yazl": "^2.2.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" - }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -433,31 +534,6 @@ "node": ">=6.5" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/archiver": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", @@ -531,6 +607,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.3.tgz", "integrity": "sha512-/CEVNiOia8E5BMO9FLooo+Kv18K4+4JBFRJp8vUy/N5dMRAg+fRNV4HA+o6aoSC79jVU/aT5XvUpxSxSsTS8FQ==", + "license": "MIT", "dependencies": { "glob": "7.1.3", "unxhr": "1.0.1" @@ -543,6 +620,8 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -578,6 +657,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -597,11 +677,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -645,6 +753,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -697,17 +806,6 @@ "node": "*" } }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -771,21 +869,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/ci": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/ci/-/ci-2.3.0.tgz", @@ -797,20 +880,6 @@ "url": "https://github.com/privatenumber/ci?sponsor=1" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "node_modules/clean-git-ref": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", @@ -820,87 +889,24 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/cloneable-readable/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/cloneable-readable/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/cloneable-readable/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" }, "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/compress-commons": { @@ -922,15 +928,11 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, "node_modules/convict": { "version": "6.2.4", "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz", "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==", + "license": "Apache-2.0", "dependencies": { "lodash.clonedeep": "^4.5.0", "yargs-parser": "^20.2.7" @@ -967,19 +969,6 @@ "node": ">= 10" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -989,6 +978,7 @@ "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "license": "MIT", "engines": { "node": "*" } @@ -1165,22 +1155,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/diff3": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", @@ -1252,6 +1226,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -1260,10 +1235,20 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1272,12 +1257,48 @@ "node_modules/fast-copy": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", - "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/fast-redact": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", "engines": { "node": ">=6" } @@ -1285,29 +1306,36 @@ "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" }, "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { - "strnum": "^1.0.5" + "strnum": "^1.1.1" }, "bin": { "fxparser": "src/cli/cli.js" } }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -1328,6 +1356,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1335,55 +1364,11 @@ "node": ">=8" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "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", + "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" }, @@ -1399,32 +1384,6 @@ "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": "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": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1574,14 +1533,6 @@ "uglify-js": "^3.1.4" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -1632,56 +1583,16 @@ } }, "node_modules/help-me": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", - "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", - "dependencies": { - "glob": "^8.0.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/help-me/node_modules/brace-expansion": { - "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" - } - }, - "node_modules/help-me/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/help-me/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" }, "node_modules/hpagent": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "license": "MIT", "engines": { "node": ">=14" } @@ -1739,11 +1650,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "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", @@ -1756,20 +1662,6 @@ "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", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1806,6 +1698,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -1855,19 +1748,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -1876,31 +1756,16 @@ "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, "node_modules/isomorphic-git": { "version": "1.25.10", "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.25.10.tgz", "integrity": "sha512-IxGiaKBwAdcgBXwIcxJU6rHLk+NrzYaaPKXXQffcA0GW3IUrQXdUPDXDo+hkGVcYruuz/7JlGBiuaeTCgIgivQ==", + "license": "MIT", "dependencies": { "async-lock": "^1.4.1", "clean-git-ref": "^2.0.1", @@ -1925,6 +1790,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", "engines": { "node": ">=6" } @@ -1933,14 +1799,16 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1948,37 +1816,16 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/json-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", - "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", - "dependencies": { - "call-bind": "^1.0.5", - "isarray": "^2.0.5", - "jsonify": "^0.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, - "node_modules/json-stable-stringify/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -1986,34 +1833,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "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" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -2052,21 +1871,11 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" }, "node_modules/lodash.defaults": { "version": "4.2.0", @@ -2121,10 +1930,20 @@ "node": ">= 0.4" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -2133,10 +1952,23 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2145,6 +1977,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -2194,6 +2027,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/multi-progress/-/multi-progress-4.0.0.tgz", "integrity": "sha512-9zcjyOou3FFCKPXsmkbC3ethv51SFPoA4dJD6TscIp2pUmy26kBDZW6h9XofPELrzseSkuD7r0V+emGEeo39Pg==", + "license": "MIT", "peerDependencies": { "progress": "^2.0.0" } @@ -2216,17 +2050,6 @@ "node": ">=0.10.0" } }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2235,35 +2058,11 @@ "node": ">=0.10.0" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/on-exit-leak-free": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -2276,21 +2075,6 @@ "wrappy": "1" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", @@ -2331,40 +2115,6 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, - "node_modules/patch-package": { - "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": "^10.0.0", - "json-stable-stringify": "^1.0.2", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "semver": "^7.5.3", - "slash": "^2.0.0", - "tmp": "^0.2.4", - "yaml": "^2.2.2" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "node": ">=14", - "npm": ">5" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2373,25 +2123,18 @@ "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -2425,30 +2168,32 @@ } }, "node_modules/pino": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.14.2.tgz", - "integrity": "sha512-zKu9aWeSWTy1JgvxIpZveJKKsAr4+6uNMZ0Vf0KRwzl/UNZA3XjHiIl/0WwqLMkDwuHuDkT5xAgPA2jpKq4whA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.2.0.tgz", + "integrity": "sha512-g3/hpwfujK5a4oVbaefoJxezLzsDgLcNJeITvC6yrfwYeT9la+edCK42j5QpEQSQCZgTKapXvnQIdgZwvRaZug==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.0.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^2.0.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^3.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.1.0", - "thread-stream": "^2.0.0" + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "node_modules/pino-abstract-transport": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", - "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "license": "MIT", "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" @@ -2472,15 +2217,17 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "node_modules/pino-abstract-transport/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -2493,15 +2240,16 @@ } }, "node_modules/pino-pretty": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.0.1.tgz", - "integrity": "sha512-yrn00+jNpkvZX/NrPVCPIVHAfTDy3ahF0PND9tKqZk4j9s+loK8dpzrJj4dGb7i+WLuR50ussuTAiWoMWU+qeA==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.2.2.tgz", + "integrity": "sha512-2FnyGir8nAJAqD3srROdrF1J5BIcMT4nwj7hHSc60El6Uxlym00UbCCd8pYIterstVBFlMyF1yFV8XdGIPbj4A==", + "license": "MIT", "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", - "fast-copy": "^3.0.0", + "fast-copy": "^3.0.2", "fast-safe-stringify": "^2.1.1", - "help-me": "^4.0.1", + "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", @@ -2509,7 +2257,7 @@ "pump": "^3.0.0", "readable-stream": "^4.0.0", "secure-json-parse": "^2.4.0", - "sonic-boom": "^3.0.0", + "sonic-boom": "^4.0.1", "strip-json-comments": "^3.1.1" }, "bin": { @@ -2534,15 +2282,17 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "node_modules/pino-pretty/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -2555,9 +2305,10 @@ } }, "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" }, "node_modules/possible-typed-array-names": { "version": "1.1.0", @@ -2572,6 +2323,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -2582,14 +2334,16 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/process-warning": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz", - "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -2613,18 +2367,31 @@ "pump": "^3.0.0" } }, - "node_modules/queue": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz", - "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==", - "dependencies": { - "inherits": "~2.0.0" - } + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" }, "node_modules/readable-stream": { "version": "3.6.2", @@ -2671,6 +2438,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", "engines": { "node": ">= 12.13.0" } @@ -2680,61 +2448,60 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" }, "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">= 10" } }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/resolve-options": { + "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", - "dependencies": { - "value-or-function": "^3.0.0" - }, + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", "engines": { - "node": ">= 0.10" + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { @@ -2757,9 +2524,10 @@ ] }, "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", "engines": { "node": ">=10" } @@ -2767,7 +2535,8 @@ "node_modules/secure-json-parse": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" }, "node_modules/seek-bzip": { "version": "1.0.6", @@ -2786,17 +2555,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/seroval": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.2.1.tgz", @@ -2854,29 +2612,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, "node_modules/should-proxy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz", - "integrity": "sha512-RPQhIndEIVUCjkfkQ6rs6sOR6pkxJWCNdxtfG5pP0RVgUYbK5911kLTF0TNcCC0G3YCGd492rMollFT2aTd9iQ==" + "integrity": "sha512-RPQhIndEIVUCjkfkQ6rs6sOR6pkxJWCNdxtfG5pP0RVgUYbK5911kLTF0TNcCC0G3YCGd492rMollFT2aTd9iQ==", + "license": "MIT" }, "node_modules/simple-concat": { "version": "1.0.1", @@ -2921,14 +2661,6 @@ "simple-concat": "^1.0.0" } }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "engines": { - "node": ">=6" - } - }, "node_modules/solid-js": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.5.tgz", @@ -2941,9 +2673,10 @@ } }, "node_modules/sonic-boom": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", - "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz", + "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } @@ -2960,6 +2693,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } @@ -2969,6 +2703,17 @@ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -2989,6 +2734,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -2997,20 +2743,16 @@ } }, "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" }, "node_modules/tar-stream": { "version": "2.2.0", @@ -3027,10 +2769,29 @@ "node": ">=6" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/thread-stream": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", - "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", "dependencies": { "real-require": "^0.2.0" } @@ -3085,15 +2846,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/tmp": { - "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": ">=14.14" - } - }, "node_modules/to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", @@ -3130,6 +2882,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3137,17 +2890,6 @@ "node": ">=8.0" } }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", - "dependencies": { - "through2": "^2.0.3" - }, - "engines": { - "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", @@ -3200,19 +2942,11 @@ "through2-filter": "^3.0.0" } }, - "node_modules/universalify": { - "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" - } - }, "node_modules/unxhr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", + "license": "MIT", "engines": { "node": ">=8.11" } @@ -3222,194 +2956,19 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs/node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/vinyl-fs/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/vinyl-fs/node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vinyl-fs/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/vinyl-fs/node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/vinyl-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/vinyl-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/vinyl-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" }, "engines": { - "node": ">= 8" + "node": ">=10.13.0" } }, "node_modules/which-typed-array": { @@ -3459,21 +3018,11 @@ "node": ">=0.4" } }, - "node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", "engines": { "node": ">=10" } @@ -3491,6 +3040,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3" } diff --git a/antora/package.json b/antora/package.json index c01ccaebe63d..ccea3540ba2e 100644 --- a/antora/package.json +++ b/antora/package.json @@ -1,20 +1,18 @@ { "scripts": { - "antora": "node npm/antora.js", - "postinstall": "patch-package" + "antora": "node npm/antora.js" }, "dependencies": { - "@antora/cli": "3.2.0-alpha.4", - "@antora/site-generator": "3.2.0-alpha.4", - "@antora/atlas-extension": "1.0.0-alpha.2", - "@springio/antora-extensions": "1.11.1", - "@springio/antora-xref-extension": "1.0.0-alpha.4", - "@springio/antora-zip-contents-collector-extension": "1.0.0-alpha.8", + "@antora/cli": "3.2.0-alpha.10", + "@antora/site-generator": "3.2.0-alpha.10", + "@antora/atlas-extension": "1.0.0-alpha.5", + "@springio/antora-extensions": "1.14.7", + "@springio/antora-xref-extension": "1.0.0-alpha.5", + "@springio/antora-zip-contents-collector-extension": "1.0.0-alpha.10", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/asciidoctor-extensions": "1.0.0-alpha.17", - "patch-package": "^8.0.1" + "@springio/asciidoctor-extensions": "1.0.0-alpha.17" }, "config": { - "ui-bundle-url": "https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.18/ui-bundle.zip" + "ui-bundle-url": "https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.21/ui-bundle.zip" } } diff --git a/antora/patches/@vscode+gulp-vinyl-zip+2.5.0.patch b/antora/patches/@vscode+gulp-vinyl-zip+2.5.0.patch deleted file mode 100644 index c47c0a27efa2..000000000000 --- a/antora/patches/@vscode+gulp-vinyl-zip+2.5.0.patch +++ /dev/null @@ -1,285 +0,0 @@ -diff --git a/node_modules/@vscode/gulp-vinyl-zip/lib/src/index.js b/node_modules/@vscode/gulp-vinyl-zip/lib/src/index.js -index 17d902d..0448dec 100644 ---- a/node_modules/@vscode/gulp-vinyl-zip/lib/src/index.js -+++ b/node_modules/@vscode/gulp-vinyl-zip/lib/src/index.js -@@ -1,135 +1,157 @@ --'use strict'; -- --var fs = require('fs'); --var constants = fs.constants; --var yauzl = require('yauzl'); --var File = require('../vinyl-zip'); --var queue = require('queue'); --var through = require('through'); --var map = require('through2').obj; -- --function modeFromEntry(entry) { -- var attr = entry.externalFileAttributes >> 16 || 33188; -- -- // The following constants are not available on all platforms: -- // 448 = constants.S_IRWXU, 56 = constants.S_IRWXG, 7 = constants.S_IRWXO -- return [448, 56, 7] -- .map(function (mask) { return attr & mask; }) -- .reduce(function (a, b) { return a + b; }, attr & constants.S_IFMT); -+'use strict' -+ -+// This is fork of vinyl-zip with the following updates: -+// - unzipFile has an additional `.on('error'` handler -+// - toStream has an additional `zip.on('error'` handler -+ -+const fs = require('fs') -+const constants = fs.constants -+const yauzl = require('yauzl') -+const File = require('vinyl') -+const queue = require('queue') -+const through = require('through') -+const map = require('through2').obj -+ -+function modeFromEntry (entry) { -+ const attr = entry.externalFileAttributes >> 16 || 33188 -+ return [448, 56, 7] -+ .map(function (mask) { -+ return attr & mask -+ }) -+ .reduce(function (a, b) { -+ return a + b -+ }, attr & constants.S_IFMT) - } - --function mtimeFromEntry(entry) { -- return yauzl.dosDateTimeToDate(entry.lastModFileDate, entry.lastModFileTime); -+function mtimeFromEntry (entry) { -+ return yauzl.dosDateTimeToDate(entry.lastModFileDate, entry.lastModFileTime) - } - --function toStream(zip) { -- var result = through(); -- var q = queue(); -- var didErr = false; -- -- q.on('error', function (err) { -- didErr = true; -- result.emit('error', err); -- }); -- -- zip.on('entry', function (entry) { -- if (didErr) { return; } -- -- var stat = new fs.Stats(); -- stat.mode = modeFromEntry(entry); -- stat.mtime = mtimeFromEntry(entry); -- -- // directories -- if (/\/$/.test(entry.fileName)) { -- stat.mode = (stat.mode & ~constants.S_IFMT) | constants.S_IFDIR; -- } -- -- var file = { -- path: entry.fileName, -- stat: stat -- }; -- -- if (stat.isFile()) { -- stat.size = entry.uncompressedSize; -- if (entry.uncompressedSize === 0) { -- file.contents = Buffer.alloc(0); -- result.emit('data', new File(file)); -- } else { -- q.push(function (cb) { -- zip.openReadStream(entry, function (err, readStream) { -- if (err) { return cb(err); } -- file.contents = readStream; -- result.emit('data', new File(file)); -- cb(); -- }); -- }); -- -- q.start(); -- } -- } else if (stat.isSymbolicLink()) { -- stat.size = entry.uncompressedSize; -- q.push(function (cb) { -- zip.openReadStream(entry, function (err, readStream) { -- if (err) { return cb(err); } -- file.symlink = ''; -- readStream.on('data', function (c) { file.symlink += c; }); -- readStream.on('error', cb); -- readStream.on('end', function () { -- result.emit('data', new File(file)); -- cb(); -- }); -- }); -- }); -- -- q.start(); -- } else if (stat.isDirectory()) { -- result.emit('data', new File(file)); -- } else { -- result.emit('data', new File(file)); -- } -- }); -- -- zip.on('end', function () { -- if (didErr) { -- return; -- } -- -- if (q.length === 0) { -- result.end(); -- } else { -- q.on('end', function () { -- result.end(); -- }); -- } -- }); -- -- return result; -+function toStream (zip) { -+ const result = through() -+ const q = queue() -+ let didErr = false -+ -+ q.on('error', function (err) { -+ didErr = true -+ result.emit('error', err) -+ }) -+ -+ zip.on('error', function (err) { -+ didErr = true -+ result.emit('error', err) -+ }) -+ -+ zip.on('entry', function (entry) { -+ if (didErr) { -+ return -+ } -+ -+ const stat = new fs.Stats() -+ stat.mode = modeFromEntry(entry) -+ stat.mtime = mtimeFromEntry(entry) -+ -+ // directories -+ if (/\/$/.test(entry.fileName)) { -+ stat.mode = (stat.mode & ~constants.S_IFMT) | constants.S_IFDIR -+ } -+ -+ const file = { -+ path: entry.fileName, -+ stat, -+ } -+ -+ if (stat.isFile()) { -+ stat.size = entry.uncompressedSize -+ if (entry.uncompressedSize === 0) { -+ file.contents = Buffer.alloc(0) -+ result.emit('data', new File(file)) -+ } else { -+ q.push(function (cb) { -+ zip.openReadStream(entry, function (err, readStream) { -+ if (err) { -+ return cb(err) -+ } -+ file.contents = readStream -+ result.emit('data', new File(file)) -+ cb() -+ }) -+ }) -+ -+ q.start() -+ } -+ } else if (stat.isSymbolicLink()) { -+ stat.size = entry.uncompressedSize -+ q.push(function (cb) { -+ zip.openReadStream(entry, function (err, readStream) { -+ if (err) { -+ return cb(err) -+ } -+ file.symlink = '' -+ readStream.on('data', function (c) { -+ file.symlink += c -+ }) -+ readStream.on('error', cb) -+ readStream.on('end', function () { -+ result.emit('data', new File(file)) -+ cb() -+ }) -+ }) -+ }) -+ -+ q.start() -+ } else if (stat.isDirectory()) { -+ result.emit('data', new File(file)) -+ } else { -+ result.emit('data', new File(file)) -+ } -+ }) -+ -+ zip.on('end', function () { -+ if (didErr) { -+ return -+ } -+ -+ if (q.length === 0) { -+ result.end() -+ } else { -+ q.on('end', function () { -+ result.end() -+ }) -+ } -+ }) -+ -+ return result - } - --function unzipFile(zipPath) { -- var result = through(); -- yauzl.open(zipPath, function (err, zip) { -- if (err) { return result.emit('error', err); } -- toStream(zip).pipe(result); -- }); -- return result; -+function unzipFile (zipPath) { -+ const result = through() -+ yauzl.open(zipPath, function (err, zip) { -+ if (err) { -+ return result.emit('error', err) -+ } -+ toStream(zip) -+ .on('error', (err) => result.emit('error', err)) -+ .pipe(result) -+ }) -+ return result - } - --function unzip() { -- return map(function (file, enc, next) { -- if (!file.isBuffer()) return next(new Error('Only supports buffers')); -- yauzl.fromBuffer(file.contents, (err, zip) => { -- if (err) return this.emit('error', err); -- toStream(zip) -- .on('error', next) -- .on('data', (data) => this.push(data)) -- .on('end', next); -- }); -- }); -+function unzip () { -+ return map(function (file, enc, next) { -+ if (!file.isBuffer()) return next(new Error('Only supports buffers')) -+ yauzl.fromBuffer(file.contents, (err, zip) => { -+ if (err) return this.emit('error', err) -+ toStream(zip) -+ .on('error', next) -+ .on('data', (data) => this.push(data)) -+ .on('end', next) -+ }) -+ }) - } - --function src(zipPath) { -- return zipPath ? unzipFile(zipPath) : unzip(); -+function src (zipPath) { -+ return zipPath ? unzipFile(zipPath) : unzip() - } - --module.exports = src; -+module.exports = src diff --git a/build-plugin/spring-boot-antlib/build.gradle b/build-plugin/spring-boot-antlib/build.gradle new file mode 100644 index 000000000000..928f57dd1de8 --- /dev/null +++ b/build-plugin/spring-boot-antlib/build.gradle @@ -0,0 +1,92 @@ +/* + * 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. + */ + +plugins { + id "java-library" + id "org.springframework.boot.deployed" +} + +description = "Spring Boot Antlib" + +ext { + antVersion = "1.10.7" +} + +configurations { + antUnit + antIvy +} + +dependencies { + antUnit "org.apache.ant:ant-antunit:1.3" + + antIvy "org.apache.ivy:ivy:2.5.0" + + compileOnly(project(":loader:spring-boot-loader")) + compileOnly("org.apache.ant:ant:${antVersion}") + + implementation(project(":loader:spring-boot-loader-tools")) + implementation("org.springframework:spring-core") +} + +tasks.register("syncIntegrationTestSources", Sync) { + destinationDir = file(layout.buildDirectory.dir("it")) + from file("src/it") + filter(springRepositoryTransformers.ant()) +} + +processResources { + def version = project.version + eachFile { + filter { it.replace('${spring-boot.version}', version) } + } + inputs.property "version", version +} + +tasks.register("integrationTest") { + dependsOn syncIntegrationTestSources, jar + def resultsDir = file(layout.buildDirectory.dir("test-results/integrationTest")) + inputs.dir(file("src/it")).withPathSensitivity(PathSensitivity.RELATIVE).withPropertyName("source") + inputs.files(sourceSets.main.runtimeClasspath).withNormalizer(ClasspathNormalizer).withPropertyName("classpath") + outputs.dirs resultsDir + doLast { + ant.with { + taskdef(resource: "org/apache/ant/antunit/antlib.xml", + classpath: configurations.antUnit.asPath) + taskdef(resource: "org/apache/ivy/ant/antlib.xml", + classpath: configurations.antIvy.asPath) + taskdef(resource: "org/springframework/boot/ant/antlib.xml", + classpath: sourceSets.main.runtimeClasspath.asPath, + uri: "antlib:org.springframework.boot.ant") + ant.property(name: "ivy.class.path", value: configurations.antIvy.asPath) + ant.property(name: "antunit.class.path", value: configurations.antUnit.asPath) + antunit { + propertyset { + ant.propertyref(name: "build.compiler") + ant.propertyref(name: "antunit.class.path") + ant.propertyref(name: "ivy.class.path") + } + plainlistener() + xmllistener(toDir: resultsDir) + fileset(dir: layout.buildDirectory.dir("it").get().asFile.toString(), includes: "**/build.xml") + } + } + } +} + +check { + dependsOn integrationTest +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/build.xml b/build-plugin/spring-boot-antlib/src/it/sample/build.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/build.xml rename to build-plugin/spring-boot-antlib/src/it/sample/build.xml diff --git a/build-plugin/spring-boot-antlib/src/it/sample/ivysettings.xml b/build-plugin/spring-boot-antlib/src/it/sample/ivysettings.xml new file mode 100644 index 000000000000..470a19bc53b1 --- /dev/null +++ b/build-plugin/spring-boot-antlib/src/it/sample/ivysettings.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-antlib/src/it/sample/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-antlib/src/it/sample/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/src/main/resources/foo b/build-plugin/spring-boot-antlib/src/it/sample/src/main/resources/foo similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/src/main/resources/foo rename to build-plugin/spring-boot-antlib/src/it/sample/src/main/resources/foo diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/main/java/org/springframework/boot/ant/FindMainClass.java b/build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/FindMainClass.java similarity index 93% rename from spring-boot-project/spring-boot-tools/spring-boot-antlib/src/main/java/org/springframework/boot/ant/FindMainClass.java rename to build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/FindMainClass.java index 1b231ff66c36..2ce55cc3a54d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/main/java/org/springframework/boot/ant/FindMainClass.java +++ b/build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/FindMainClass.java @@ -23,6 +23,7 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.MainClassFinder; import org.springframework.util.StringUtils; @@ -37,11 +38,11 @@ public class FindMainClass extends Task { private static final String SPRING_BOOT_APPLICATION_CLASS_NAME = "org.springframework.boot.autoconfigure.SpringBootApplication"; - private String mainClass; + private @Nullable String mainClass; - private File classesRoot; + private @Nullable File classesRoot; - private String property; + private @Nullable String property; public FindMainClass(Project project) { setProject(project); @@ -59,7 +60,7 @@ public void execute() throws BuildException { handle(mainClass); } - private String findMainClass() { + private @Nullable String findMainClass() { if (this.classesRoot == null) { throw new BuildException("one of @mainClass or @classesRoot must be specified"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/main/java/org/springframework/boot/ant/ShareAntlibLoader.java b/build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/ShareAntlibLoader.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-antlib/src/main/java/org/springframework/boot/ant/ShareAntlibLoader.java rename to build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/ShareAntlibLoader.java index 224d2cd66fb2..ad739764c75d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/main/java/org/springframework/boot/ant/ShareAntlibLoader.java +++ b/build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/ShareAntlibLoader.java @@ -19,6 +19,7 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; +import org.jspecify.annotations.Nullable; import org.springframework.util.StringUtils; @@ -30,7 +31,7 @@ */ public class ShareAntlibLoader extends Task { - private String refid; + private @Nullable String refid; public ShareAntlibLoader(Project project) { setProject(project); @@ -44,7 +45,7 @@ public void execute() throws BuildException { getProject().addReference(this.refid, getClass().getClassLoader()); } - public void setRefid(String refid) { + public void setRefid(@Nullable String refid) { this.refid = refid; } diff --git a/build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/package-info.java b/build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/package-info.java new file mode 100644 index 000000000000..2ac1dbb84e41 --- /dev/null +++ b/build-plugin/spring-boot-antlib/src/main/java/org/springframework/boot/ant/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Support for building Spring Boot applications using Ant. + */ +@NullMarked +package org.springframework.boot.ant; + +import org.jspecify.annotations.NullMarked; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/main/resources/org/springframework/boot/ant/antlib.xml b/build-plugin/spring-boot-antlib/src/main/resources/org/springframework/boot/ant/antlib.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-antlib/src/main/resources/org/springframework/boot/ant/antlib.xml rename to build-plugin/spring-boot-antlib/src/main/resources/org/springframework/boot/ant/antlib.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/.gitignore b/build-plugin/spring-boot-gradle-plugin/.gitignore similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/.gitignore rename to build-plugin/spring-boot-gradle-plugin/.gitignore diff --git a/build-plugin/spring-boot-gradle-plugin/build.gradle b/build-plugin/spring-boot-gradle-plugin/build.gradle new file mode 100644 index 000000000000..99058c2c1d2a --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/build.gradle @@ -0,0 +1,172 @@ +/* + * 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. + */ + +import org.gradle.plugins.ide.eclipse.model.Classpath +import org.gradle.plugins.ide.eclipse.model.Library + +plugins { + id "java-gradle-plugin" + id "maven-publish" + id "org.springframework.boot.antora-contributor" + id "org.springframework.boot.docker-test" + id "org.springframework.boot.maven-repository" + id "org.springframework.boot.optional-dependencies" +} + +description = "Spring Boot Gradle Plugins" + +configurations { + "testCompileClasspath" { + // Downgrade SLF4J is required for tests to run in Eclipse + resolutionStrategy.force("org.slf4j:slf4j-api:1.7.36") + } +} + +dependencies { + dockerTestImplementation(project(":test-support:spring-boot-gradle-test-support")) + dockerTestImplementation(project(":test-support:spring-boot-docker-test-support")) + dockerTestImplementation(gradleTestKit()) + dockerTestImplementation("org.assertj:assertj-core") + dockerTestImplementation("org.junit.jupiter:junit-jupiter") + dockerTestImplementation("org.testcontainers:testcontainers-junit-jupiter") + + implementation(project(":buildpack:spring-boot-buildpack-platform")) + implementation(project(":loader:spring-boot-loader-tools")) + implementation("io.spring.gradle:dependency-management-plugin") + implementation("org.apache.commons:commons-compress") + implementation("org.springframework:spring-core") + + optional("org.graalvm.buildtools:native-gradle-plugin") + optional("org.cyclonedx:cyclonedx-gradle-plugin") { + exclude(group: "javax.annotation", module: "javax.annotation-api") + exclude(group: "javax.inject", module: "javax.inject") + } + optional("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + + testImplementation(project(":test-support:spring-boot-gradle-test-support")) + testImplementation(project(":test-support:spring-boot-test-support")) + testImplementation("com.tngtech.archunit:archunit-junit5:1.4.0") + testImplementation("net.java.dev.jna:jna-platform") + testImplementation("org.apache.commons:commons-compress") + testImplementation("org.apache.httpcomponents.client5:httpclient5") + testImplementation("org.graalvm.buildtools:native-gradle-plugin") + testImplementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + 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 { + gradlePluginPortal() { + content { + includeGroup("org.cyclonedx") + } + } +} + +gradlePlugin { + plugins { + springBootPlugin { + id = "org.springframework.boot" + displayName = "Spring Boot Gradle Plugin" + description = "Spring Boot Gradle Plugin" + implementationClass = "org.springframework.boot.gradle.plugin.SpringBootPlugin" + } + springBootAotPlugin { + id = "org.springframework.boot.aot" + displayName = "Spring Boot AOT Gradle Plugin" + description = "Spring Boot AOT Gradle Plugin" + implementationClass = "org.springframework.boot.gradle.plugin.SpringBootAotPlugin" + } + } +} + +tasks.register("preparePluginValidationClasses", Copy) { + destinationDir = layout.buildDirectory.dir("classes/java/pluginValidation").get().asFile + from(sourceSets.main.output.classesDirs) { + exclude "**/CreateBootStartScripts.class" + } +} + +validatePlugins { + classes.setFrom preparePluginValidationClasses + enableStricterValidation = true +} + +tasks.named('test') { + inputs.dir('src/docs/antora/modules/gradle-plugin/examples').withPathSensitivity(PathSensitivity.RELATIVE).withPropertyName('buildScripts') +} + +javadoc { + options { + author = true + docTitle = "Spring Boot Gradle Plugin ${project.version} API" + encoding = "UTF-8" + memberLevel = "protected" + outputLevel = "quiet" + splitIndex = true + use = true + windowTitle = "Spring Boot Gradle Plugin ${project.version} API" + links "https://docs.gradle.org/$gradle.gradleVersion/javadoc" + links "https://docs.oracle.com/en/java/javase/17/docs/api" + } +} + +antoraContributions { + 'gradle-plugin' { + catalogContent { + from(javadoc) { + into("api/java") + } + } + localAggregateContent { + from(tasks.named("generateAntoraYml")) { + into "modules" + } + } + source() + } +} + +tasks.named("generateAntoraPlaybook") { + antoraExtensions.xref.stubs = ["appendix:.*", "api:.*", "reference:.*"] + asciidocExtensions.excludeJavadocExtension = true +} + +plugins.withType(EclipsePlugin) { + eclipse { + classpath.file { merger -> + merger.whenMerged { content -> + if (content instanceof Classpath) { + content.entries.each { entry -> + if (entry instanceof Library && (entry.path.contains("gradle-api-") || entry.path.contains("groovy-"))) { + entry.entryAttributes.remove("test") + } + } + } + } + } + } +} + +tasks.named("compileTestJava") { + options.nullability.checking = "tests" +} + +tasks.named("compileDockerTestJava") { + options.nullability.checking = "tests" +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java similarity index 86% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java index db3268d4cb59..c533fc2ad804 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java @@ -34,6 +34,7 @@ import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.condition.EnabledOnOs; @@ -67,6 +68,7 @@ @DisabledIfDockerUnavailable class BootBuildImageIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate @@ -75,7 +77,9 @@ void buildsImageWithDefaultBuilder() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("Running detector"); assertThat(result.getOutput()).contains("Running builder"); @@ -91,7 +95,9 @@ void buildsImageWithTrustBuilder() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("Running creator"); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); @@ -106,7 +112,9 @@ void buildsImageWithWarPackaging() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage", "-PapplyWarPlugin"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -122,7 +130,9 @@ void buildsImageWithWarPackagingAndJarConfiguration() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -137,7 +147,9 @@ void buildsImageWithCustomName() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("example/test-image-name"); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -149,7 +161,9 @@ void buildsImageWithCustomBuilderAndRunImage() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("example/test-image-custom"); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -164,7 +178,9 @@ void buildsImageWithCommandLineOptions() throws IOException { "--imageName=example/test-image-cmd", "--builder=ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2", "--trustBuilder", "--runImage=paketobuildpacks/run-noble-tiny", "--createdDate=2020-07-01T12:34:56Z", "--applicationDirectory=/application"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("example/test-image-cmd"); assertThat(result.getOutput()).contains("Running creator"); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); @@ -180,10 +196,14 @@ void buildsImageWithPullPolicy() throws IOException { writeLongNameResource(); String projectName = this.gradleBuild.getProjectDir().getName(); BuildResult result = this.gradleBuild.build("bootBuildImage"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("Pulled builder image").contains("Pulled run image"); result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).doesNotContain("Pulled builder image").doesNotContain("Pulled run image"); removeImages(projectName); } @@ -194,7 +214,9 @@ void buildsImageWithBuildpackFromBuilder() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building") .contains("---> Test Info buildpack done"); @@ -209,7 +231,9 @@ void buildsImageWithBuildpackFromDirectory() throws IOException { writeBuildpackContent(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Hello World buildpack"); removeImages(projectName); @@ -224,7 +248,9 @@ void buildsImageWithBuildpackFromTarGzip() throws IOException { tarGzipBuildpackContent(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Hello World buildpack"); removeImages(projectName); @@ -236,7 +262,9 @@ void buildsImageWithBuildpacksFromImages() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building") .contains("---> Test Info buildpack done"); @@ -250,7 +278,9 @@ void buildsImageWithBinding() throws IOException { writeCertificateBindingFiles(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("binding: certificates/type=ca-certificates"); @@ -266,7 +296,9 @@ void buildsImageWithTag() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -274,26 +306,15 @@ void buildsImageWithTag() throws IOException { removeImages(projectName, "example.com/myapp:latest"); } - @TestTemplate - void buildsImageWithLaunchScript() throws IOException { - writeMainClass(); - writeLongNameResource(); - BuildResult result = this.gradleBuild.build("bootBuildImage"); - String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(result.getOutput()).contains("docker.io/library/" + projectName); - assertThat(result.getOutput()).contains("---> Test Info buildpack building"); - assertThat(result.getOutput()).contains("---> Test Info buildpack done"); - removeImages(projectName); - } - @TestTemplate void buildsImageWithNetworkModeNone() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("Network status: curl failed"); @@ -307,7 +328,9 @@ void buildsImageWithVolumeCaches() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -323,7 +346,9 @@ void buildsImageWithBindCaches() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -352,7 +377,9 @@ void buildsImageWithCreatedDate() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -367,7 +394,9 @@ void buildsImageWithCurrentCreatedDate() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -386,7 +415,9 @@ void buildsImageWithApplicationDirectory() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -399,7 +430,9 @@ void buildsImageWithEmptySecurityOptions() throws IOException { writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); @@ -418,7 +451,9 @@ void buildsImageOnLinuxArmWithImagePlatformLinuxArm() throws IOException { removeImages(builderImage, runImage, buildpackImage); BuildResult result = this.gradleBuild.build("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()) .contains("Pulling builder image '" + builderImage + "' for platform 'linux/arm64'"); @@ -446,7 +481,9 @@ void failsWhenBuildingOnLinuxAmdWithImagePlatformLinuxArm() throws IOException { removeImages(builderImage, runImage, buildpackImage); BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage"); String projectName = this.gradleBuild.getProjectDir().getName(); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()) .contains("Pulling builder image '" + builderImage + "' for platform 'linux/arm64'"); @@ -462,7 +499,9 @@ void failsWithInvalidCreatedDate() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); assertThat(result.getOutput()).contains("Error parsing 'invalid date' as an image created date"); } @@ -471,7 +510,9 @@ void failsWithBuilderError() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); assertThat(result.getOutput()).contains("Forced builder failure"); assertThat(result.getOutput()).containsPattern("Builder lifecycle '.*' failed with status code"); } @@ -481,7 +522,9 @@ void failsWithInvalidImageName() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage", "--imageName=example/Invalid-Image-Name"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); assertThat(result.getOutput()).containsPattern("must be an image reference") .containsPattern("example/Invalid-Image-Name"); } @@ -491,7 +534,9 @@ void failsWithBuildpackNotInBuilder() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); assertThat(result.getOutput()).contains("'urn:cnb:builder:example/does-not-exist:0.0.1' not found in builder"); } @@ -500,7 +545,9 @@ void failsWithInvalidTag() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); assertThat(result.getOutput()).containsPattern("must be an image reference") .containsPattern("example/Invalid-Tag-Name"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.java similarity index 94% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.java index 0874ed67c2db..1b454b924136 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.java @@ -22,6 +22,7 @@ import java.io.PrintWriter; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; @@ -55,6 +56,7 @@ class BootBuildImageRegistryIntegrationTests { String registryAddress; + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @BeforeEach @@ -69,7 +71,9 @@ void buildsImageAndPublishesToRegistry() throws IOException { String repoName = "test-image"; String imageName = this.registryAddress + "/" + repoName; BuildResult result = this.gradleBuild.build("bootBuildImage", "--imageName=" + imageName); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootBuildImage"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("Building image") .contains("Successfully built image") .contains("Pushing image '" + imageName + ":latest" + "'") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageOnLinuxArmWithImagePlatformLinuxArm.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageOnLinuxArmWithImagePlatformLinuxArm.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageOnLinuxArmWithImagePlatformLinuxArm.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageOnLinuxArmWithImagePlatformLinuxArm.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithApplicationDirectory.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithApplicationDirectory.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithApplicationDirectory.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithApplicationDirectory.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBindCaches.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBindCaches.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBindCaches.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBindCaches.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBinding.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBinding.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBinding.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBinding.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromBuilder.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromBuilder.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromBuilder.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromBuilder.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromDirectory.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromDirectory.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromDirectory.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromDirectory.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromTarGzip.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromTarGzip.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromTarGzip.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromTarGzip.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpacksFromImages.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpacksFromImages.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpacksFromImages.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpacksFromImages.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCommandLineOptions.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCommandLineOptions.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCommandLineOptions.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCommandLineOptions.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCreatedDate.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCreatedDate.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCreatedDate.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCreatedDate.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCurrentCreatedDate.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCurrentCreatedDate.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCurrentCreatedDate.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCurrentCreatedDate.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomBuilderAndRunImage.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomBuilderAndRunImage.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomBuilderAndRunImage.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomBuilderAndRunImage.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomName.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomName.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomName.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomName.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithEmptySecurityOptions.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithEmptySecurityOptions.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithEmptySecurityOptions.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithEmptySecurityOptions.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithNetworkModeNone.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithNetworkModeNone.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithNetworkModeNone.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithNetworkModeNone.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithPullPolicy.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithPullPolicy.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithPullPolicy.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithPullPolicy.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithTag.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithTag.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithTag.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithTag.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithTrustBuilder.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithTrustBuilder.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithTrustBuilder.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithTrustBuilder.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithVolumeCaches.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithVolumeCaches.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithVolumeCaches.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithVolumeCaches.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithWarPackagingAndJarConfiguration.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithWarPackagingAndJarConfiguration.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithWarPackagingAndJarConfiguration.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithWarPackagingAndJarConfiguration.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWhenBuildingOnLinuxAmdWithImagePlatformLinuxArm.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWhenBuildingOnLinuxAmdWithImagePlatformLinuxArm.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWhenBuildingOnLinuxAmdWithImagePlatformLinuxArm.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWhenBuildingOnLinuxAmdWithImagePlatformLinuxArm.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWhenCachesAreConfiguredTwice.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWhenCachesAreConfiguredTwice.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWhenCachesAreConfiguredTwice.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWhenCachesAreConfiguredTwice.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuilderError.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuilderError.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuilderError.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuilderError.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuildpackNotInBuilder.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuildpackNotInBuilder.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuildpackNotInBuilder.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuildpackNotInBuilder.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithIncompatiblePlatform.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithIncompatiblePlatform.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithIncompatiblePlatform.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithIncompatiblePlatform.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithInvalidCreatedDate.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithInvalidCreatedDate.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithInvalidCreatedDate.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithInvalidCreatedDate.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithInvalidTag.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithInvalidTag.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithInvalidTag.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithInvalidTag.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/dockerTest/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageRegistryIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/antora.yml b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/antora.yml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/antora.yml rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/antora.yml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/local-nav.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/local-nav.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/local-nav.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/local-nav.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/aot/apply-native-image-plugin.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/aot/apply-native-image-plugin.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/aot/apply-native-image-plugin.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/aot/apply-native-image-plugin.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/aot/apply-native-image-plugin.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/aot/apply-native-image-plugin.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/aot/apply-native-image-plugin.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/aot/apply-native-image-plugin.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-commercial.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-commercial.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-commercial.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-commercial.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-commercial.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-commercial.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-commercial.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-commercial.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-release.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-release.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-release.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-release.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-release.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-release.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-release.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-release.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-snapshot.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-snapshot.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-snapshot.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/apply-plugin-snapshot.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/milestone-settings.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/milestone-settings.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/milestone-settings.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/milestone-settings.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/milestone-settings.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/milestone-settings.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/milestone-settings.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/milestone-settings.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/snapshot-settings.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/snapshot-settings.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/snapshot-settings.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/snapshot-settings.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/snapshot-settings.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/snapshot-settings.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/snapshot-settings.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/snapshot-settings.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/typical-plugins.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/typical-plugins.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/typical-plugins.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/typical-plugins.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/typical-plugins.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/typical-plugins.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/typical-plugins.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/getting-started/typical-plugins.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-additional.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-additional.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-additional.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-additional.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-additional.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-additional.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-additional.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-additional.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-basic.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-basic.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-basic.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-basic.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-basic.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-basic.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-basic.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-basic.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-custom-values.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-custom-values.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-custom-values.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-custom-values.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-custom-values.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-custom-values.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-custom-values.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-custom-values.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-exclude-time.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-exclude-time.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-exclude-time.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-exclude-time.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-exclude-time.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-exclude-time.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-exclude-time.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/integrating-with-actuator/build-info-exclude-time.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom-with-plugins.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom-with-plugins.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom-with-plugins.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom-with-plugins.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-bom.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-platform.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-platform.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-platform.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-platform.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-platform.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-platform.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-platform.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/configure-platform.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version-with-platform.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version-with-platform.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version-with-platform.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version-with-platform.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version-with-platform.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version-with-platform.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version-with-platform.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version-with-platform.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/custom-version.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-commercial.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-commercial.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-commercial.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-commercial.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-commercial.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-commercial.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-commercial.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-commercial.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-milestone.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-milestone.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-milestone.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-milestone.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-release.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-release.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-release.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-release.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-release.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-release.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-release.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-release.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-snapshot.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-snapshot.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-snapshot.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/depend-on-plugin-snapshot.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/dependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/dependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/dependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/dependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/dependencies.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/dependencies.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/dependencies.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/managing-dependencies/dependencies.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/application-plugin-main-class.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/application-plugin-main-class.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/application-plugin-main-class.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/application-plugin-main-class.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/application-plugin-main-class.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/application-plugin-main-class.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/application-plugin-main-class.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/application-plugin-main-class.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle.kts similarity index 82% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle.kts index 4b7dac528828..629d61b20558 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle.kts +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-bind-caches.gradle.kts @@ -27,8 +27,8 @@ tasks.named("bootBuildImage") { tasks.register("bootBuildImageCaches") { doFirst { - println("buildWorkspace=" + tasks.getByName("bootBuildImage").buildWorkspace.asCache().bind.source) - println("buildCache=" + tasks.getByName("bootBuildImage").buildCache.asCache().bind.source) - println("launchCache=" + tasks.getByName("bootBuildImage").launchCache.asCache().bind.source) + println("buildWorkspace=" + tasks.getByName("bootBuildImage").buildWorkspace.asCache()?.bind?.source) + println("buildCache=" + tasks.getByName("bootBuildImage").buildCache.asCache()?.bind?.source) + println("launchCache=" + tasks.getByName("bootBuildImage").launchCache.asCache()?.bind?.source) } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-builder.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-builder.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-builder.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-builder.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-builder.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-builder.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-builder.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-builder.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-buildpacks.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-buildpacks.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-buildpacks.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-buildpacks.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-buildpacks.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-buildpacks.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-buildpacks.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-buildpacks.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle.kts similarity index 85% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle.kts index 6b7c7e3c01dd..702005fb58b0 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle.kts +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-caches.gradle.kts @@ -22,7 +22,7 @@ tasks.named("bootBuildImage") { tasks.register("bootBuildImageCaches") { doFirst { - println("buildCache=" + tasks.getByName("bootBuildImage").buildCache.asCache().volume.name) - println("launchCache=" + tasks.getByName("bootBuildImage").launchCache.asCache().volume.name) + println("buildCache=" + tasks.getByName("bootBuildImage").buildCache.asCache()?.volume?.name) + println("launchCache=" + tasks.getByName("bootBuildImage").launchCache.asCache()?.volume?.name) } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-token.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-token.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-token.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-token.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-token.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-token.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-token.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-token.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-user.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-user.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-user.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-user.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-user.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-user.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-user.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-auth-user.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-colima.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-colima.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-colima.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-colima.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-colima.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-colima.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-colima.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-colima.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-podman.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-podman.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-podman.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-podman.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-podman.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-podman.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-podman.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host-podman.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-docker-host.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-proxy.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-proxy.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-proxy.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-proxy.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-proxy.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-proxy.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-proxy.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-proxy.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-runtime.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-runtime.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-runtime.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-runtime.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-runtime.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-runtime.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-runtime.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env-runtime.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-env.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-name.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-name.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-name.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-name.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-name.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-name.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-name.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-name.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-publish.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-publish.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-publish.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-publish.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-publish.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-publish.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-publish.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-build-image-publish.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-and-jar-classifiers.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-and-jar-classifiers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-and-jar-classifiers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-and-jar-classifiers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-and-jar-classifiers.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-and-jar-classifiers.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-and-jar-classifiers.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-and-jar-classifiers.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-custom.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-custom.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-custom.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-custom.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-custom.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-custom.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-custom.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-custom.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-disabled.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-disabled.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-disabled.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-disabled.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-disabled.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-disabled.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-disabled.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-disabled.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-exclude-tools.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-exclude-tools.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-exclude-tools.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-exclude-tools.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-exclude-tools.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-exclude-tools.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-exclude-tools.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-layered-exclude-tools.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-main-class.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-main-class.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-main-class.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-main-class.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-main-class.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-main-class.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-main-class.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-main-class.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-manifest-main-class.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-manifest-main-class.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-manifest-main-class.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-manifest-main-class.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-manifest-main-class.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-manifest-main-class.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-manifest-main-class.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-manifest-main-class.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-requires-unpack.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-requires-unpack.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-requires-unpack.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-requires-unpack.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-requires-unpack.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-requires-unpack.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-requires-unpack.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-jar-requires-unpack.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-include-devtools.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-include-devtools.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-include-devtools.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-include-devtools.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-include-devtools.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-include-devtools.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-include-devtools.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-include-devtools.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-properties-launcher.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-properties-launcher.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-properties-launcher.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-properties-launcher.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-properties-launcher.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-properties-launcher.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-properties-launcher.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/boot-war-properties-launcher.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/only-boot-jar.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/only-boot-jar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/only-boot-jar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/only-boot-jar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/only-boot-jar.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/only-boot-jar.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/only-boot-jar.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/only-boot-jar.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/spring-boot-dsl-main-class.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/spring-boot-dsl-main-class.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/spring-boot-dsl-main-class.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/spring-boot-dsl-main-class.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/spring-boot-dsl-main-class.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/spring-boot-dsl-main-class.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/spring-boot-dsl-main-class.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/spring-boot-dsl-main-class.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle index e2671455c501..8fe601a425ba 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle @@ -23,7 +23,7 @@ apply plugin: 'io.spring.dependency-management' // tag::dependencies[] dependencies { - implementation('org.springframework.boot:spring-boot-starter-web') - providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') + implementation('org.springframework.boot:spring-boot-starter-webmvc') + providedRuntime('org.springframework.boot:spring-boot-starter-tomcat-runtime') } // end::dependencies[] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle.kts similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle.kts index 2463bb906268..60f7df8a9345 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle.kts +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/packaging/war-container-dependency.gradle.kts @@ -8,6 +8,6 @@ apply(plugin = "io.spring.dependency-management") // tag::dependencies[] dependencies { implementation("org.springframework.boot:spring-boot-starter-web") - providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") + providedRuntime("org.springframework.boot:spring-boot-starter-tomcat-runtime") } // end::dependencies[] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/publishing/maven-publish.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/publishing/maven-publish.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/publishing/maven-publish.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/publishing/maven-publish.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/publishing/maven-publish.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/publishing/maven-publish.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/publishing/maven-publish.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/publishing/maven-publish.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/application-plugin-main-class-name.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/application-plugin-main-class-name.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/application-plugin-main-class-name.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/application-plugin-main-class-name.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/application-plugin-main-class-name.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/application-plugin-main-class-name.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/application-plugin-main-class-name.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/application-plugin-main-class-name.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-disable-optimized-launch.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-disable-optimized-launch.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-disable-optimized-launch.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-disable-optimized-launch.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-disable-optimized-launch.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-disable-optimized-launch.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-disable-optimized-launch.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-disable-optimized-launch.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-main.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-main.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-main.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-main.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-main.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-main.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-main.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-main.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-source-resources.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-source-resources.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-source-resources.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-source-resources.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-source-resources.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-source-resources.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-source-resources.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-source-resources.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle index 0286be7110a8..c16039557d4c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle @@ -27,7 +27,7 @@ tasks.named("bootRun") { tasks.register("configuredSystemProperties") { doLast { - bootRun.systemProperties.each { k, v -> + bootRun.systemProperties.each { k, v -> println "$k = $v" } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/boot-run-system-property.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/spring-boot-dsl-main-class-name.gradle b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/spring-boot-dsl-main-class-name.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/spring-boot-dsl-main-class-name.gradle rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/spring-boot-dsl-main-class-name.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/spring-boot-dsl-main-class-name.gradle.kts b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/spring-boot-dsl-main-class-name.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/spring-boot-dsl-main-class-name.gradle.kts rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/examples/running/spring-boot-dsl-main-class-name.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/aot.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/aot.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/aot.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/aot.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/getting-started.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/getting-started.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/getting-started.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/getting-started.adoc diff --git a/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/index.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/index.adoc new file mode 100644 index 000000000000..2eadcab838d0 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/index.adoc @@ -0,0 +1,8 @@ +[[gradle-plugin]] += Gradle Plugin + +The Spring Boot Gradle Plugin provides Spring Boot support in https://gradle.org[Gradle]. +It allows you to package executable jar or war archives, run Spring Boot applications, and use the dependency management provided by `spring-boot-dependencies`. +Spring Boot's Gradle plugin requires Gradle 8.x (8.14 or later) or 9.x and can be used with Gradle's {url-gradle-docs}/configuration_cache.html[configuration cache]. + +In addition to this user guide, xref:api/java/index.html[API documentation] is also available. diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/integrating-with-actuator.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/integrating-with-actuator.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/integrating-with-actuator.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/integrating-with-actuator.adoc diff --git a/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/introduction.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/introduction.adoc new file mode 100644 index 000000000000..199750408b3c --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/introduction.adoc @@ -0,0 +1,8 @@ +[[introduction]] += Introduction + +The Spring Boot Gradle Plugin provides Spring Boot support in https://gradle.org[Gradle]. +It allows you to package executable jar or war archives, run Spring Boot applications, and use the dependency management provided by `spring-boot-dependencies`. +Spring Boot's Gradle plugin requires Gradle 8.x (8.14 or later) or 9.x and can be used with Gradle's {url-gradle-docs}/configuration_cache.html[configuration cache]. + +In addition to this user guide, xref:api/java/index.html[API documentation] is also available. diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/managing-dependencies.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/managing-dependencies.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/managing-dependencies.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/managing-dependencies.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging-oci-image.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging-oci-image.adoc similarity index 99% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging-oci-image.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging-oci-image.adoc index b0ba6231ac00..e3ad3b050a94 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging-oci-image.adoc +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging-oci-image.adoc @@ -264,7 +264,7 @@ When using the default Paketo builder and buildpacks, the plugin instructs the b You can override this behavior as shown in the xref:packaging-oci-image.adoc#build-image.examples.builder-configuration[builder configuration] examples. NOTE: The default builder `paketobuildpacks/builder-noble-java-tiny:latest` contains a reduced set of system libraries and does not include a shell. -Applications that require a shell to run a start script, as might be the case when the {url-gradle-docs-application-plugin}[`application` plugin] has been applied to generate a distribution zip archive, or that depend upon a system library that is not present, should override the `runImage` configuration to use one that includes a shell and a broader set of system libraries, such as `paketobuildpacks/ubuntu-noble-run-base:latest`. +Applications that require a shell to run a start script, as might be the case when the {url-gradle-docs-application-plugin}[`application` plugin] has been applied to generate a distribution zip archive, or that depend upon a system library that is not present, should override the `runImage` configuration to use one that includes a shell and a broader set of system libraries, such as `paketobuildpacks/ubuntu-noble-run:latest`. diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging.adoc similarity index 84% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging.adoc index 86a13d1761fd..af873a18b1fc 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging.adoc +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/packaging.adoc @@ -27,7 +27,7 @@ The `assemble` task is automatically configured to depend upon the `bootWar` tas === Packaging Executable and Deployable Wars A war file can be packaged such that it can be executed using `java -jar` and deployed to an external container. -To do so, the embedded servlet container dependencies should be added to the `providedRuntime` configuration, for example: +To do so, the embedded servlet container runtime should be added to the `providedRuntime` configuration, for example: [tabs] ====== @@ -45,7 +45,7 @@ include::example$packaging/war-container-dependency.gradle.kts[tags=dependencies ---- ====== -This ensures that they are package in the war file's `WEB-INF/lib-provided` directory from where they will not conflict with the external container's own classes. +This ensures that the runtime jars are packaged in the war file's `WEB-INF/lib-provided` directory from where they will not conflict with the external container's own classes. NOTE: `providedRuntime` is preferred to Gradle's `compileOnly` configuration as, among other limitations, `compileOnly` dependencies are not on the test classpath so any web-based integration tests will fail. @@ -246,75 +246,6 @@ The closure is passed a `FileTreeElement` and should return a `boolean` indicati -[[packaging-executable.configuring.launch-script]] -=== Making an Archive Fully Executable - -Spring Boot provides support for fully executable archives. -An archive is made fully executable by prepending a shell script that knows how to launch the application. -On Unix-like platforms, this launch script allows the archive to be run directly like any other executable or to be installed as a service. - -NOTE: Currently, some tools do not accept this format so you may not always be able to use this technique. -For example, `jar -xf` may silently fail to extract a jar or war that has been made fully-executable. -It is recommended that you only enable this option if you intend to execute it directly, rather than running it with `java -jar` or deploying it to a servlet container. - -To use this feature, the inclusion of the launch script must be enabled: - -[tabs] -====== -Groovy:: -+ -[source,groovy,indent=0,subs="verbatim,attributes"] ----- -include::example$packaging/boot-jar-include-launch-script.gradle[tags=include-launch-script] ----- -Kotlin:: -+ -[source,kotlin,indent=0,subs="verbatim,attributes"] ----- -include::example$packaging/boot-jar-include-launch-script.gradle.kts[tags=include-launch-script] ----- -====== - -This will add Spring Boot's default launch script to the archive. -The default launch script includes several properties with sensible default values. -The values can be customized using the `properties` property: - -[tabs] -====== -Groovy:: -+ -[source,groovy,indent=0,subs="verbatim,attributes"] ----- -include::example$packaging/boot-jar-launch-script-properties.gradle[tags=launch-script-properties] ----- -Kotlin:: -+ -[source,kotlin,indent=0,subs="verbatim,attributes"] ----- -include::example$packaging/boot-jar-launch-script-properties.gradle.kts[tags=launch-script-properties] ----- -====== - -If the default launch script does not meet your needs, the `script` property can be used to provide a custom launch script: - -[tabs] -====== -Groovy:: -+ -[source,groovy,indent=0,subs="verbatim,attributes"] ----- -include::example$packaging/boot-jar-custom-launch-script.gradle[tags=custom-launch-script] ----- -Kotlin:: -+ -[source,kotlin,indent=0,subs="verbatim,attributes"] ----- -include::example$packaging/boot-jar-custom-launch-script.gradle.kts[tags=custom-launch-script] ----- -====== - - - [[packaging-executable.configuring.properties-launcher]] === Using the PropertiesLauncher diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/publishing.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/publishing.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/publishing.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/publishing.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/reacting.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/reacting.adoc similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/reacting.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/reacting.adoc index e1e2e2b29598..d1ec0b5817b5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/reacting.adoc +++ b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/reacting.adoc @@ -87,7 +87,6 @@ When the {url-native-build-tools-docs-gradle-plugin}[GraalVM Native Image plugin . Adds the output of the `aot` source set to the classpath of the `main` GraalVM native binary. . Adds the output of the `aotTest` source set to the classpath of the `test` GraalVM native binary. . Configures the GraalVM extension to disable Toolchain detection. -. Configures each GraalVM native binary to require GraalVM 22.3 or later. . Configures the `bootJar` task to include the reachability metadata produced by the `collectReachabilityMetadata` task in its jar. . Configures the `bootJar` task to add the `Spring-Boot-Native-Processed: true` manifest entry. @@ -98,6 +97,10 @@ When the {url-native-build-tools-docs-gradle-plugin}[GraalVM Native Image plugin When the {url-cyclonedx-docs-gradle-plugin}[CycloneDX plugin] is applied to a project, the Spring Boot plugin: -. Configures the `cyclonedxBom` task to use the `application` project type and output the SBOM to the `application.cdx` file in JSON format without full license texts. +. Configures the `cyclonedxBom` task to: +.. Use the `application` project type. +.. Output a JSON-format SBOM to the `application.cdx.json` file. +.. Disable the XML-format SBOM. +.. Disable full license texts. . Adds the SBOM under `META-INF/sbom` in the generated jar or war file. . Adds the `Sbom-Format` and `Sbom-Location` to the manifest of the jar or war file. diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/running.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/running.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/running.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/pages/running.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/partials/nav-gradle-plugin.adoc b/build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/partials/nav-gradle-plugin.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/partials/nav-gradle-plugin.adoc rename to build-plugin/spring-boot-gradle-plugin/src/docs/antora/modules/gradle-plugin/partials/nav-gradle-plugin.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java index 1b18bd62551c..e6f42863de59 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java @@ -28,8 +28,10 @@ import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskProvider; import org.gradle.api.tasks.bundling.Jar; +import org.jspecify.annotations.Nullable; import org.springframework.boot.gradle.tasks.buildinfo.BuildInfo; +import org.springframework.util.Assert; /** * Entry point to Spring Boot's Gradle DSL. @@ -85,7 +87,7 @@ public void buildInfo() { * artifact will be the base name of the {@code bootWar} or {@code bootJar} task. * @param configurer the task configurer */ - public void buildInfo(Action configurer) { + public void buildInfo(@Nullable Action configurer) { TaskContainer tasks = this.project.getTasks(); TaskProvider bootBuildInfo = tasks.register("bootBuildInfo", BuildInfo.class, this::configureBuildInfoTask); @@ -109,20 +111,22 @@ private void configureBuildInfoTask(BuildInfo task) { } private File determineMainSourceSetResourcesOutputDir() { - return this.project.getExtensions() + File resourcesDir = this.project.getExtensions() .getByType(JavaPluginExtension.class) .getSourceSets() .getByName(SourceSet.MAIN_SOURCE_SET_NAME) .getOutput() .getResourcesDir(); + Assert.state(resourcesDir != null, "'resourcesDir' must not be null"); + return resourcesDir; } - private String determineArtifactBaseName() { + private @Nullable String determineArtifactBaseName() { Jar artifactTask = findArtifactTask(); return (artifactTask != null) ? artifactTask.getArchiveBaseName().get() : null; } - private Jar findArtifactTask() { + private @Nullable Jar findArtifactTask() { Jar artifactTask = (Jar) this.project.getTasks().findByName("bootWar"); if (artifactTask != null) { return artifactTask; diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/package-info.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/package-info.java new file mode 100644 index 000000000000..8eab4a604a1c --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Spring Boot Gradle DSL. + */ +@NullMarked +package org.springframework.boot.gradle.dsl; + +import org.jspecify.annotations.NullMarked; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java similarity index 89% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java index 3ba1990a45a2..294893424c7d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java @@ -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.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. @@ -70,8 +72,8 @@ private void applyApplicationDefaultJvmArgsToRunTasks(TaskContainer tasks, JavaA private void applyApplicationDefaultJvmArgsToRunTask(TaskContainer tasks, JavaApplication javaApplication, String taskName) { tasks.named(taskName, BootRun.class) - .configure((bootRun) -> bootRun.getConventionMapping() - .map("jvmArgs", javaApplication::getApplicationDefaultJvmArgs)); + .configure( + (bootRun) -> bootRun.getJvmArguments().convention(javaApplication.getApplicationDefaultJvmArgs())); } private void configureCreateStartScripts(Project project, JavaApplication javaApplication, @@ -110,7 +112,7 @@ public Class> getPluginClass() { } 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 @@ private String loadResource(String name) { } } + 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 @@ private void configureFilePermissions(CopySpec copySpec, int mode) { } } - @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); + } } } diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/CyclonedxPluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/CyclonedxPluginAction.java new file mode 100644 index 000000000000..330e6c272b8a --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/CyclonedxPluginAction.java @@ -0,0 +1,134 @@ +/* + * 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.gradle.plugin; + +import org.cyclonedx.gradle.CyclonedxAggregateTask; +import org.cyclonedx.gradle.CyclonedxPlugin; +import org.cyclonedx.model.Component; +import org.gradle.api.Action; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.Copy; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.TaskProvider; +import org.gradle.api.tasks.bundling.Jar; + +import org.springframework.boot.gradle.tasks.bundling.BootJar; +import org.springframework.boot.gradle.tasks.bundling.BootWar; + +/** + * {@link Action} that is executed in response to the {@link CyclonedxPlugin} being + * applied. + * + * @author Moritz Halbritter + * @author Andy Wilkinson + */ +final class CyclonedxPluginAction implements PluginApplicationAction { + + @Override + public Class> getPluginClass() { + return CyclonedxPlugin.class; + } + + @Override + public void execute(Project project) { + TaskProvider cycloneDxTaskProvider = project.getTasks() + .named("cyclonedxBom", CyclonedxAggregateTask.class); + configureCycloneDxTask(cycloneDxTaskProvider, project); + configureJavaPlugin(project, cycloneDxTaskProvider); + configureSpringBootPlugin(project, cycloneDxTaskProvider); + } + + private void configureCycloneDxTask(TaskProvider taskProvider, Project project) { + taskProvider.configure((task) -> { + task.getProjectType().convention(Component.Type.APPLICATION); + task.getXmlOutput().unsetConvention(); + task.getJsonOutput() + .convention(project.getLayout().getBuildDirectory().file("reports/cyclonedx/application.cdx.json")); + task.getIncludeLicenseText().convention(false); + }); + } + + private void configureJavaPlugin(Project project, TaskProvider cycloneDxTaskProvider) { + configurePlugin(project, JavaPlugin.class, (javaPlugin) -> { + JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class); + SourceSet main = javaPluginExtension.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME); + configureTask(project, main.getProcessResourcesTaskName(), Copy.class, (copy) -> { + copy.dependsOn(cycloneDxTaskProvider); + Provider sbomFileName = cycloneDxTaskProvider.flatMap( + (cycloneDxTask) -> cycloneDxTask.getJsonOutput().map((file) -> file.getAsFile().getName())); + copy.from(cycloneDxTaskProvider, + (spec) -> spec.include((element) -> element.getName().equals(sbomFileName.get())) + .into("META-INF/sbom")); + }); + }); + } + + private void configureSpringBootPlugin(Project project, + TaskProvider cycloneDxTaskProvider) { + configurePlugin(project, SpringBootPlugin.class, (springBootPlugin) -> { + configureBootJarTask(project, cycloneDxTaskProvider); + configureBootWarTask(project, cycloneDxTaskProvider); + }); + } + + private void configureBootJarTask(Project project, TaskProvider cycloneDxTaskProvider) { + configureTask(project, SpringBootPlugin.BOOT_JAR_TASK_NAME, BootJar.class, + (bootJar) -> configureBootJarTask(bootJar, cycloneDxTaskProvider)); + } + + private void configureBootWarTask(Project project, TaskProvider cycloneDxTaskProvider) { + configureTask(project, SpringBootPlugin.BOOT_WAR_TASK_NAME, BootWar.class, + (bootWar) -> configureBootWarTask(bootWar, cycloneDxTaskProvider)); + } + + private void configureBootJarTask(BootJar task, TaskProvider cycloneDxTaskProvider) { + configureJarTask(task, cycloneDxTaskProvider, ""); + } + + private void configureBootWarTask(BootWar task, TaskProvider cycloneDxTaskProvider) { + configureJarTask(task, cycloneDxTaskProvider, "WEB-INF/classes/"); + } + + private void configureJarTask(Jar task, TaskProvider cycloneDxTaskProvider, + String sbomLocationPrefix) { + Provider sbomFileName = cycloneDxTaskProvider + .map((cycloneDxTask) -> "META-INF/sbom/" + cycloneDxTask.getJsonOutput().get().getAsFile().getName()); + task.manifest((manifest) -> { + manifest.getAttributes().put("Sbom-Format", "CycloneDX"); + manifest.getAttributes() + .put("Sbom-Location", sbomFileName.map((fileName) -> sbomLocationPrefix + fileName)); + }); + } + + private void configureTask(Project project, String name, Class type, Action action) { + project.getTasks().withType(type).configureEach((task) -> { + if (task.getName().equals(name)) { + action.execute(task); + } + }); + } + + private > void configurePlugin(Project project, Class plugin, Action action) { + project.getPlugins().withType(plugin, action); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginAction.java similarity index 80% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginAction.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginAction.java index 3b0584e3ac30..464931ad67d9 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginAction.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginAction.java @@ -22,6 +22,8 @@ import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.springframework.util.Assert; + /** * {@link Action} that is performed in response to the {@link DependencyManagementPlugin} * being applied. @@ -32,9 +34,10 @@ final class DependencyManagementPluginAction implements PluginApplicationAction @Override public void execute(Project project) { - project.getExtensions() - .findByType(DependencyManagementExtension.class) - .imports((importsHandler) -> importsHandler.mavenBom(SpringBootPlugin.BOM_COORDINATES)); + DependencyManagementExtension extension = project.getExtensions() + .findByType(DependencyManagementExtension.class); + Assert.state(extension != null, "'extension' must not be null"); + extension.imports((importsHandler) -> importsHandler.mavenBom(SpringBootPlugin.BOM_COORDINATES)); } @Override diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JarTypeFileSpec.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JarTypeFileSpec.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JarTypeFileSpec.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JarTypeFileSpec.java index eab3f3d24730..ca1b75877d00 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JarTypeFileSpec.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JarTypeFileSpec.java @@ -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 @@ */ class JarTypeFileSpec implements Spec { - private static final Set EXCLUDED_JAR_TYPES = Collections.singleton("dependencies-starter"); + private static final Set EXCLUDED_JAR_TYPES = Set.of("dependencies-starter", "development-tool"); @Override public boolean isSatisfiedBy(File file) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java similarity index 94% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java index c40bdfa8a1f7..a78263c8b8da 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java @@ -44,11 +44,13 @@ import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.jvm.toolchain.JavaToolchainService; import org.gradle.jvm.toolchain.JavaToolchainSpec; +import org.jspecify.annotations.Nullable; import org.springframework.boot.gradle.dsl.SpringBootExtension; import org.springframework.boot.gradle.tasks.bundling.BootBuildImage; import org.springframework.boot.gradle.tasks.bundling.BootJar; import org.springframework.boot.gradle.tasks.run.BootRun; +import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -123,6 +125,7 @@ private TaskProvider configureResolveMainClassNameTask(Pro } SpringBootExtension springBootExtension = project.getExtensions() .findByType(SpringBootExtension.class); + Assert.state(springBootExtension != null, "'springBootExtension' must not be null"); return springBootExtension.getMainClass().getOrNull(); })); resolveMainClassName.getOutputFile() @@ -147,7 +150,7 @@ private TaskProvider configureResolveMainTestClassNameTask }); } - private static String getJavaApplicationMainClass(ExtensionContainer extensions) { + private static @Nullable String getJavaApplicationMainClass(ExtensionContainer extensions) { JavaApplication javaApplication = extensions.findByType(JavaApplication.class); if (javaApplication == null) { return null; @@ -200,10 +203,12 @@ private void configureArtifactPublication(TaskProvider bootJar) { } private void configureBootRunTask(Project project, TaskProvider resolveMainClassName) { - Callable classpath = () -> javaPluginExtension(project).getSourceSets() - .findByName(SourceSet.MAIN_SOURCE_SET_NAME) - .getRuntimeClasspath() - .filter(new JarTypeFileSpec()); + Callable classpath = () -> { + SourceSet mainSourceSet = javaPluginExtension(project).getSourceSets() + .findByName(SourceSet.MAIN_SOURCE_SET_NAME); + Assert.state(mainSourceSet != null, "'mainSourceSet' must not be null"); + return mainSourceSet.getRuntimeClasspath().filter(new JarTypeFileSpec()); + }; project.getTasks().register(SpringBootPlugin.BOOT_RUN_TASK_NAME, BootRun.class, (run) -> { run.setDescription("Runs this project as a Spring Boot application."); run.setGroup(ApplicationPlugin.APPLICATION_GROUP); @@ -214,10 +219,12 @@ private void configureBootRunTask(Project project, TaskProvider resolveMainClassName) { - Callable classpath = () -> javaPluginExtension(project).getSourceSets() - .findByName(SourceSet.TEST_SOURCE_SET_NAME) - .getRuntimeClasspath() - .filter(new JarTypeFileSpec()); + Callable classpath = () -> { + SourceSet testSourceSet = javaPluginExtension(project).getSourceSets() + .findByName(SourceSet.TEST_SOURCE_SET_NAME); + Assert.state(testSourceSet != null, "'testSourceSet' must not be null"); + return testSourceSet.getRuntimeClasspath().filter(new JarTypeFileSpec()); + }; project.getTasks().register("bootTestRun", BootRun.class, (run) -> { run.setDescription("Runs this project as a Spring Boot application using the test runtime classpath."); run.setGroup(ApplicationPlugin.APPLICATION_GROUP); @@ -278,7 +285,6 @@ private void configureAdditionalMetadataLocations(JavaCompile compile) { 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) -> { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java index b02e0dc209a8..728f6bc6e1e6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java @@ -54,7 +54,7 @@ private String getKotlinVersion(Project project) { private void enableJavaParametersOption(Project project) { project.getTasks() .withType(KotlinCompile.class) - .configureEach((compile) -> compile.getKotlinOptions().setJavaParameters(true)); + .configureEach((compile) -> compile.getCompilerOptions().getJavaParameters().set(true)); } private void repairDamageToAotCompileConfigurations(Project project) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/NativeImagePluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/NativeImagePluginAction.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/NativeImagePluginAction.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/NativeImagePluginAction.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/PluginApplicationAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/PluginApplicationAction.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/PluginApplicationAction.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/PluginApplicationAction.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java index 8b596856048f..37ab371d9e3d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ResolveMainClassName.java @@ -40,8 +40,10 @@ import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; import org.gradle.work.DisableCachingByDefault; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.MainClassFinder; +import org.springframework.util.Assert; /** * {@link Task} for resolving the name of the application's main class. @@ -58,7 +60,7 @@ public class ResolveMainClassName extends DefaultTask { private final Property configuredMainClass; - private FileCollection classpath; + private @Nullable FileCollection classpath; /** * Creates a new instance of the {@code ResolveMainClassName} task. @@ -75,6 +77,7 @@ public ResolveMainClassName() { */ @Classpath public FileCollection getClasspath() { + Assert.state(this.classpath != null, "'classpath' must not be null"); return this.classpath; } @@ -140,7 +143,7 @@ private String resolveMainClassName() { .orElse(""); } - private String findMainClass(File file) { + private @Nullable String findMainClass(File file) { try { return MainClassFinder.findSingleMainClass(file, SPRING_BOOT_APPLICATION_CLASS_NAME); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SinglePublishedArtifact.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SinglePublishedArtifact.java similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SinglePublishedArtifact.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SinglePublishedArtifact.java index 4778c13e894f..4a14bc1084aa 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SinglePublishedArtifact.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SinglePublishedArtifact.java @@ -24,6 +24,7 @@ import org.gradle.api.tasks.TaskDependency; import org.gradle.api.tasks.TaskProvider; import org.gradle.api.tasks.bundling.Jar; +import org.jspecify.annotations.Nullable; import org.springframework.boot.gradle.tasks.bundling.BootJar; import org.springframework.boot.gradle.tasks.bundling.BootWar; @@ -41,7 +42,7 @@ final class SinglePublishedArtifact implements Buildable { private final ArtifactHandler handler; - private PublishArtifact currentArtifact; + private @Nullable PublishArtifact currentArtifact; SinglePublishedArtifact(Configuration configuration, ArtifactHandler handler) { this.configuration = configuration; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java similarity index 89% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java index 6536f49936d6..9c9d9e026c31 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootPlugin.java @@ -20,9 +20,12 @@ import java.util.List; import java.util.function.Consumer; +import org.gradle.api.GradleException; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; +import org.gradle.util.GradleVersion; +import org.jspecify.annotations.Nullable; import org.springframework.boot.gradle.dsl.SpringBootExtension; import org.springframework.boot.gradle.tasks.bundling.BootBuildImage; @@ -42,7 +45,8 @@ */ public class SpringBootPlugin implements Plugin { - private static final String SPRING_BOOT_VERSION = VersionExtractor.forClass(DependencyManagementPluginAction.class); + private static final @Nullable String SPRING_BOOT_VERSION = VersionExtractor + .forClass(DependencyManagementPluginAction.class); /** * The name of the {@link Configuration} that contains Spring Boot archives. @@ -113,11 +117,20 @@ public class SpringBootPlugin implements Plugin { @Override public void apply(Project project) { + verifyGradleVersion(); createExtension(project); Configuration bootArchives = createBootArchivesConfiguration(project); registerPluginActions(project, bootArchives); } + private void verifyGradleVersion() { + GradleVersion currentVersion = GradleVersion.current(); + if (currentVersion.compareTo(GradleVersion.version("8.14")) < 0) { + throw new GradleException("Spring Boot plugin requires Gradle 8.x (8.14 or later) or 9.x. " + + "The current version is " + currentVersion); + } + } + private void createExtension(Project project) { project.getExtensions().create("springBoot", SpringBootExtension.class, project); } @@ -135,7 +148,7 @@ private void registerPluginActions(Project project, Configuration bootArchives) List actions = Arrays.asList(new JavaPluginAction(singlePublishedArtifact), new WarPluginAction(singlePublishedArtifact), new DependencyManagementPluginAction(), new ApplicationPluginAction(), new KotlinPluginAction(), new NativeImagePluginAction(), - new CycloneDxPluginAction()); + new CyclonedxPluginAction()); for (PluginApplicationAction action : actions) { withPluginClassOfAction(action, (pluginClass) -> project.getPlugins().withType(pluginClass, (plugin) -> action.execute(project))); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java index 4401f4307228..da9689e58d81 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java @@ -86,6 +86,8 @@ private TaskProvider configureBootWarTask(Project project) { .minus((developmentOnly.minus(productionRuntimeClasspath))) .minus((testAndDevelopmentOnly.minus(productionRuntimeClasspath))) .filter(new JarTypeFileSpec()); + Callable providedClasspath = () -> providedRuntimeConfiguration(project) + .filter(new JarTypeFileSpec()); TaskProvider resolveMainClassName = project.getTasks() .named(SpringBootPlugin.RESOLVE_MAIN_CLASS_NAME_TASK_NAME, ResolveMainClassName.class); TaskProvider bootWarProvider = project.getTasks() @@ -93,7 +95,7 @@ private TaskProvider configureBootWarTask(Project project) { bootWar.setGroup(BasePlugin.BUILD_GROUP); bootWar.setDescription("Assembles an executable war archive containing webapp" + " content, and the main classes and their dependencies."); - bootWar.providedClasspath(providedRuntimeConfiguration(project)); + bootWar.providedClasspath(providedClasspath); bootWar.setClasspath(classpath); Provider manifestStartClass = project .provider(() -> (String) bootWar.getManifest().getAttributes().get("Start-Class")); @@ -104,7 +106,6 @@ private TaskProvider configureBootWarTask(Project project) { .set(project.provider(() -> javaPluginExtension(project).getTargetCompatibility())); bootWar.resolvedArtifacts(runtimeClasspath.getIncoming().getArtifacts().getResolvedArtifacts()); }); - bootWarProvider.map(War::getClasspath); return bootWarProvider; } diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/package-info.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/package-info.java new file mode 100644 index 000000000000..0ab9210228eb --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Central classes for the Spring Boot Gradle plugin. + */ +@NullMarked +package org.springframework.boot.gradle.plugin; + +import org.jspecify.annotations.NullMarked; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/AbstractAot.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/AbstractAot.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/AbstractAot.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/AbstractAot.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessAot.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessAot.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessAot.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessAot.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessTestAot.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessTestAot.java similarity index 82% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessTestAot.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessTestAot.java index 8eea14116f56..9a09e71f125f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessTestAot.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/ProcessTestAot.java @@ -31,6 +31,9 @@ import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.SkipWhenEmpty; import org.gradle.api.tasks.TaskAction; +import org.jspecify.annotations.Nullable; + +import org.springframework.util.Assert; /** * Custom {@link JavaExec} task for ahead-of-time processing of a Spring Boot @@ -40,9 +43,9 @@ * @since 3.0.0 */ @CacheableTask -public class ProcessTestAot extends AbstractAot { +public abstract class ProcessTestAot extends AbstractAot { - private FileCollection classpathRoots; + private @Nullable FileCollection classpathRoots; public ProcessTestAot() { getMainClass().set("org.springframework.boot.test.context.SpringBootTestAotProcessor"); @@ -54,7 +57,7 @@ public ProcessTestAot() { */ @InputFiles @PathSensitive(PathSensitivity.RELATIVE) - public final FileCollection getClasspathRoots() { + public final @Nullable FileCollection getClasspathRoots() { return this.classpathRoots; } @@ -71,6 +74,7 @@ public void setClasspathRoots(FileCollection classpathRoots) { @IgnoreEmptyDirectories @PathSensitive(PathSensitivity.RELATIVE) final FileTree getInputClasses() { + Assert.state(this.classpathRoots != null, "'classpathRoots' must not be null"); return this.classpathRoots.getAsFileTree(); } @@ -78,7 +82,9 @@ final FileTree getInputClasses() { @TaskAction public void exec() { List args = new ArrayList<>(); - args.add(getClasspathRoots().getFiles() + FileCollection classpathRoots = getClasspathRoots(); + Assert.state(classpathRoots != null, "'classpathRoots' must not be null"); + args.add(classpathRoots.getFiles() .stream() .filter(File::exists) .map(File::getAbsolutePath) diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/package-info.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/package-info.java new file mode 100644 index 000000000000..65f699bfb30a --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/aot/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Support for ahead-of-time processing of an application built with Gradle. + */ +@NullMarked +package org.springframework.boot.gradle.tasks.aot; + +import org.jspecify.annotations.NullMarked; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoProperties.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoProperties.java similarity index 81% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoProperties.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoProperties.java index bfe6d6b82741..4029f248f0d7 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoProperties.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoProperties.java @@ -35,6 +35,7 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Optional; +import org.jspecify.annotations.Nullable; /** * The properties that are written into the {@code build-info.properties} file. @@ -47,7 +48,7 @@ public abstract class BuildInfoProperties implements Serializable { private final SetProperty excludes; - private final Supplier 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 excludes) { @@ -107,32 +108,32 @@ public BuildInfoProperties(Project project, SetProperty excludes) { @Input @Optional - String getArtifactIfNotExcluded() { + @Nullable String getArtifactIfNotExcluded() { return getIfNotExcluded(getArtifact(), "artifact"); } @Input @Optional - String getGroupIfNotExcluded() { + @Nullable String getGroupIfNotExcluded() { return getIfNotExcluded(getGroup(), "group"); } @Input @Optional - String getNameIfNotExcluded() { + @Nullable String getNameIfNotExcluded() { return getIfNotExcluded(getName(), "name"); } @Input @Optional - Instant getTimeIfNotExcluded() { + @Nullable Instant getTimeIfNotExcluded() { String time = getIfNotExcluded(getTime(), "time", this.creationTime); return (time != null) ? Instant.parse(time) : null; } @Input @Optional - String getVersionIfNotExcluded() { + @Nullable String getVersionIfNotExcluded() { return getIfNotExcluded(getVersion(), "version"); } @@ -141,15 +142,19 @@ Map getAdditionalIfNotExcluded() { return coerceToStringValues(applyExclusions(getAdditional().getOrElse(Collections.emptyMap()))); } - private T getIfNotExcluded(Property property, String name) { - return getIfNotExcluded(property, name, () -> null); + private @Nullable T getIfNotExcluded(Property property, String name) { + Supplier<@Nullable T> supplier = () -> null; + return getIfNotExcluded(property, name, supplier); } - private T getIfNotExcluded(Property property, String name, Supplier defaultValue) { + private @Nullable T getIfNotExcluded(Property 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 coerceToStringValues(Map input) { @@ -158,7 +163,9 @@ private Map coerceToStringValues(Map input) { 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; } @@ -166,7 +173,12 @@ private Map coerceToStringValues(Map input) { private Map applyExclusions(Map input) { Map output = new HashMap<>(); Set 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; } diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/package-info.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/package-info.java new file mode 100644 index 000000000000..b4d17c0bdda3 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Support for producing build info for consumption by Spring Boot's actuator. + */ +@NullMarked +package org.springframework.boot.gradle.tasks.buildinfo; + +import org.jspecify.annotations.NullMarked; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchive.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchive.java similarity index 77% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchive.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchive.java index 3ba62c1f5ce9..277df65a0594 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchive.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchive.java @@ -18,7 +18,6 @@ import java.util.Set; -import org.gradle.api.Action; import org.gradle.api.JavaVersion; import org.gradle.api.Project; import org.gradle.api.Task; @@ -30,10 +29,8 @@ import org.gradle.api.specs.Spec; import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.Optional; - -import org.springframework.boot.loader.tools.LoaderImplementation; +import org.jspecify.annotations.Nullable; /** * A Spring Boot "fat" archive task. @@ -66,35 +63,13 @@ public interface BootArchive extends Task { */ void requiresUnpack(Spec spec); - /** - * Returns the {@link LaunchScriptConfiguration} that will control the script that is - * prepended to the archive. - * @return the launch script configuration, or {@code null} if the launch script has - * not been configured. - */ - @Nested - @Optional - LaunchScriptConfiguration getLaunchScript(); - - /** - * Configures the archive to have a prepended launch script. - */ - void launchScript(); - - /** - * Configures the archive to have a prepended launch script, customizing its - * configuration using the given {@code action}. - * @param action the action to apply - */ - void launchScript(Action action); - /** * Returns the classpath that will be included in the archive. * @return the classpath */ @Optional @Classpath - FileCollection getClasspath(); + @Nullable FileCollection getClasspath(); /** * Adds files to the classpath to include in the archive. The given {@code classpath} @@ -136,15 +111,6 @@ public interface BootArchive extends Task { */ void resolvedArtifacts(Provider> resolvedArtifacts); - /** - * The loader implementation that should be used with the archive. - * @return the loader implementation - * @since 3.2.0 - */ - @Input - @Optional - Property getLoaderImplementation(); - /** * Returns whether the JAR tools should be included as a dependency in the layered * archive. diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchiveSupport.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchiveSupport.java new file mode 100644 index 000000000000..12b68384e91f --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchiveSupport.java @@ -0,0 +1,223 @@ +/* + * 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.gradle.tasks.bundling; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +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.internal.file.copy.CopyAction; +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.bundling.Jar; +import org.gradle.api.tasks.util.PatternSet; +import org.gradle.util.GradleVersion; +import org.jspecify.annotations.Nullable; + +/** + * Support class for implementations of {@link BootArchive}. + * + * @author Andy Wilkinson + * @author Phillip Webb + * @author Scott Frederick + * @see BootJar + * @see BootWar + */ +class BootArchiveSupport { + + private static final byte[] ZIP_FILE_HEADER = new byte[] { 'P', 'K', 3, 4 }; + + private static final String UNSPECIFIED_VERSION = "unspecified"; + + private static final Set DEFAULT_LAUNCHER_CLASSES; + + static { + Set defaultLauncherClasses = new HashSet<>(); + defaultLauncherClasses.add("org.springframework.boot.loader.launch.JarLauncher"); + defaultLauncherClasses.add("org.springframework.boot.loader.launch.PropertiesLauncher"); + defaultLauncherClasses.add("org.springframework.boot.loader.launch.WarLauncher"); + DEFAULT_LAUNCHER_CLASSES = Collections.unmodifiableSet(defaultLauncherClasses); + } + + private final PatternSet requiresUnpack = new PatternSet(); + + private final PatternSet exclusions = new PatternSet(); + + private final String loaderMainClass; + + private final Spec librarySpec; + + private final Function compressionResolver; + + BootArchiveSupport(String loaderMainClass, Spec librarySpec, + Function compressionResolver) { + this.loaderMainClass = loaderMainClass; + this.librarySpec = librarySpec; + this.compressionResolver = compressionResolver; + this.requiresUnpack.include(Specs.satisfyNone()); + } + + void configureManifest(Manifest manifest, String mainClass, String classes, String lib, + @Nullable String classPathIndex, @Nullable String layersIndex, String jdkVersion, + String implementationTitle, @Nullable Object implementationVersion) { + Attributes attributes = manifest.getAttributes(); + attributes.putIfAbsent("Main-Class", this.loaderMainClass); + attributes.putIfAbsent("Start-Class", mainClass); + attributes.computeIfAbsent("Spring-Boot-Version", (name) -> determineSpringBootVersion()); + attributes.putIfAbsent("Spring-Boot-Classes", classes); + attributes.putIfAbsent("Spring-Boot-Lib", lib); + if (classPathIndex != null) { + attributes.putIfAbsent("Spring-Boot-Classpath-Index", classPathIndex); + } + if (layersIndex != null) { + attributes.putIfAbsent("Spring-Boot-Layers-Index", layersIndex); + } + attributes.putIfAbsent("Build-Jdk-Spec", jdkVersion); + attributes.putIfAbsent("Implementation-Title", implementationTitle); + if (implementationVersion != null) { + String versionString = implementationVersion.toString(); + if (!UNSPECIFIED_VERSION.equals(versionString)) { + attributes.putIfAbsent("Implementation-Version", versionString); + } + } + } + + private String determineSpringBootVersion() { + String version = getClass().getPackage().getImplementationVersion(); + return (version != null) ? version : "unknown"; + } + + CopyAction createCopyAction(Jar jar, ResolvedDependencies resolvedDependencies) { + return createCopyAction(jar, resolvedDependencies, null, null); + } + + CopyAction createCopyAction(Jar jar, ResolvedDependencies resolvedDependencies, + @Nullable LayerResolver layerResolver, @Nullable String jarmodeToolsLocation) { + File output = jar.getArchiveFile().get().getAsFile(); + Manifest manifest = jar.getManifest(); + boolean preserveFileTimestamps = jar.isPreserveFileTimestamps(); + Integer dirPermissions = getUnixNumericDirPermissions(jar); + Integer filePermissions = getUnixNumericFilePermissions(jar); + boolean includeDefaultLoader = isUsingDefaultLoader(jar); + Spec requiresUnpack = this.requiresUnpack.getAsSpec(); + Spec exclusions = this.exclusions.getAsExcludeSpec(); + Spec librarySpec = this.librarySpec; + Function compressionResolver = this.compressionResolver; + String encoding = jar.getMetadataCharset(); + CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirPermissions, + filePermissions, includeDefaultLoader, jarmodeToolsLocation, requiresUnpack, exclusions, librarySpec, + compressionResolver, encoding, resolvedDependencies, layerResolver); + return action; + } + + private @Nullable Integer getUnixNumericDirPermissions(CopySpec copySpec) { + return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) + ? asUnixNumeric(copySpec.getDirPermissions()) : getDirMode(copySpec); + } + + private @Nullable Integer getUnixNumericFilePermissions(CopySpec copySpec) { + return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) + ? asUnixNumeric(copySpec.getFilePermissions()) : getFileMode(copySpec); + } + + private @Nullable Integer asUnixNumeric(Property permissions) { + return permissions.isPresent() ? permissions.get().toUnixNumeric() : null; + } + + private @Nullable Integer getDirMode(CopySpec copySpec) { + try { + return (Integer) copySpec.getClass().getMethod("getDirMode").invoke(copySpec); + } + catch (Exception ex) { + throw new RuntimeException("Failed to get dir mode from CopySpec", ex); + } + } + + private @Nullable Integer getFileMode(CopySpec copySpec) { + 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) { + return DEFAULT_LAUNCHER_CLASSES.contains(jar.getManifest().getAttributes().get("Main-Class")); + } + + void requiresUnpack(String... patterns) { + this.requiresUnpack.include(patterns); + } + + void requiresUnpack(Spec spec) { + this.requiresUnpack.include(spec); + } + + void excludeNonZipLibraryFiles(FileCopyDetails details) { + if (this.librarySpec.isSatisfiedBy(details)) { + excludeNonZipFiles(details); + } + } + + void excludeNonZipFiles(FileCopyDetails details) { + if (!isZip(details.getFile())) { + details.exclude(); + } + } + + private boolean isZip(File file) { + try { + try (FileInputStream fileInputStream = new FileInputStream(file)) { + return isZip(fileInputStream); + } + } + catch (IOException ex) { + return false; + } + } + + private boolean isZip(InputStream inputStream) throws IOException { + for (byte headerByte : ZIP_FILE_HEADER) { + if (inputStream.read() != headerByte) { + return false; + } + } + return true; + } + + void moveModuleInfoToRoot(CopySpec spec) { + spec.filesMatching("module-info.class", this::moveToRoot); + } + + void moveToRoot(FileCopyDetails details) { + details.setRelativePath(details.getRelativeSourcePath()); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java index db3767b3d338..1945c156bd6d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java @@ -41,6 +41,7 @@ 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 @@ private BuildRequest customizeTags(BuildRequest request) { } 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; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootJar.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootJar.java similarity index 90% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootJar.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootJar.java index ee30378d7f5e..b4a2143995af 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootJar.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootJar.java @@ -36,8 +36,7 @@ import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.bundling.Jar; import org.gradle.work.DisableCachingByDefault; - -import org.springframework.boot.loader.tools.LoaderImplementation; +import org.jspecify.annotations.Nullable; /** * A custom {@link Jar} task that produces a Spring Boot executable jar. @@ -73,7 +72,7 @@ public abstract class BootJar extends Jar implements BootArchive { private final ResolvedDependencies resolvedDependencies; - private FileCollection classpath; + private @Nullable FileCollection classpath; /** * Creates a new {@code BootJar} task. @@ -144,14 +143,12 @@ private boolean isLayeredDisabled() { @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, layerResolver, - jarmodeToolsLocation); + return this.support.createCopyAction(this, this.resolvedDependencies, layerResolver, jarmodeToolsLocation); } private boolean isIncludeJarmodeTools() { @@ -168,21 +165,6 @@ public void requiresUnpack(Spec spec) { this.support.requiresUnpack(spec); } - @Override - public LaunchScriptConfiguration getLaunchScript() { - return this.support.getLaunchScript(); - } - - @Override - public void launchScript() { - enableLaunchScriptIfNecessary(); - } - - @Override - public void launchScript(Action action) { - action.execute(enableLaunchScriptIfNecessary()); - } - /** * Returns the spec that describes the layers in a layered jar. * @return the spec for the layers @@ -203,7 +185,7 @@ public void layered(Action action) { } @Override - public FileCollection getClasspath() { + public @Nullable FileCollection getClasspath() { return this.classpath; } @@ -275,15 +257,6 @@ protected boolean isLibrary(FileCopyDetails details) { return path.startsWith(LIB_DIRECTORY); } - private LaunchScriptConfiguration enableLaunchScriptIfNecessary() { - LaunchScriptConfiguration launchScript = this.support.getLaunchScript(); - if (launchScript == null) { - launchScript = new LaunchScriptConfiguration(this); - this.support.setLaunchScript(launchScript); - } - return launchScript; - } - /** * Syntactic sugar that makes {@link CopySpec#into} calls a little easier to read. * @param the result type diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootWar.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootWar.java similarity index 89% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootWar.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootWar.java index 148ab6126d79..46a3520ac22c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootWar.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootWar.java @@ -36,8 +36,7 @@ import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.bundling.War; import org.gradle.work.DisableCachingByDefault; - -import org.springframework.boot.loader.tools.LoaderImplementation; +import org.jspecify.annotations.Nullable; /** * A custom {@link War} task that produces a Spring Boot executable war. @@ -72,7 +71,7 @@ public abstract class BootWar extends War implements BootArchive { private final ResolvedDependencies resolvedDependencies; - private FileCollection providedClasspath; + private @Nullable FileCollection providedClasspath; /** * Creates a new {@code BootWar} task. @@ -118,14 +117,12 @@ private boolean isLayeredDisabled() { @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, layerResolver, - jarmodeToolsLocation); + return this.support.createCopyAction(this, this.resolvedDependencies, layerResolver, jarmodeToolsLocation); } private boolean isIncludeJarmodeTools() { @@ -142,21 +139,6 @@ public void requiresUnpack(Spec spec) { this.support.requiresUnpack(spec); } - @Override - public LaunchScriptConfiguration getLaunchScript() { - return this.support.getLaunchScript(); - } - - @Override - public void launchScript() { - enableLaunchScriptIfNecessary(); - } - - @Override - public void launchScript(Action action) { - action.execute(enableLaunchScriptIfNecessary()); - } - /** * Returns the provided classpath, the contents of which will be included in the * {@code WEB-INF/lib-provided} directory of the war. @@ -164,7 +146,7 @@ public void launchScript(Action action) { */ @Optional @Classpath - public FileCollection getProvidedClasspath() { + public @Nullable FileCollection getProvidedClasspath() { return this.providedClasspath; } @@ -243,15 +225,6 @@ protected boolean isLibrary(FileCopyDetails details) { return path.startsWith(LIB_DIRECTORY) || path.startsWith(LIB_PROVIDED_DIRECTORY); } - private LaunchScriptConfiguration enableLaunchScriptIfNecessary() { - LaunchScriptConfiguration launchScript = this.support.getLaunchScript(); - if (launchScript == null) { - launchScript = new LaunchScriptConfiguration(this); - this.support.setLaunchScript(launchScript); - } - return launchScript; - } - /** * Syntactic sugar that makes {@link CopySpec#into} calls a little easier to read. * @param the result type diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java similarity index 84% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java index 0eb16258fb7d..00b6d20c69bd 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java @@ -22,13 +22,11 @@ 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; @@ -53,20 +51,20 @@ import org.gradle.api.tasks.WorkResult; import org.gradle.api.tasks.WorkResults; import org.gradle.util.GradleVersion; +import org.jspecify.annotations.Nullable; import org.springframework.boot.gradle.tasks.bundling.ResolvedDependencies.DependencyDescriptor; -import org.springframework.boot.loader.tools.DefaultLaunchScript; import org.springframework.boot.loader.tools.FileUtils; 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; import org.springframework.util.StreamUtils; import org.springframework.util.StringUtils; +import org.springframework.util.function.ThrowingSupplier; /** * A {@link CopyAction} for creating a Spring Boot zip archive (typically a jar or war). @@ -92,38 +90,33 @@ class BootZipCopyAction implements CopyAction { private final boolean preserveFileTimestamps; - private final Integer dirMode; + private final @Nullable Integer dirMode; - private final Integer fileMode; + private final @Nullable Integer fileMode; private final boolean includeDefaultLoader; - private final String jarmodeToolsLocation; + private final @Nullable String jarmodeToolsLocation; private final Spec requiresUnpack; private final Spec exclusions; - private final LaunchScriptConfiguration launchScript; - private final Spec librarySpec; private final Function compressionResolver; - private final String encoding; + private final @Nullable String encoding; private final ResolvedDependencies resolvedDependencies; - private final LayerResolver layerResolver; - - private final LoaderImplementation loaderImplementation; + private final @Nullable LayerResolver layerResolver; - BootZipCopyAction(File output, Manifest manifest, boolean preserveFileTimestamps, Integer dirMode, Integer fileMode, - boolean includeDefaultLoader, String jarmodeToolsLocation, Spec requiresUnpack, - Spec exclusions, LaunchScriptConfiguration launchScript, Spec librarySpec, - Function compressionResolver, String encoding, - ResolvedDependencies resolvedDependencies, LayerResolver layerResolver, - LoaderImplementation loaderImplementation) { + BootZipCopyAction(File output, Manifest manifest, boolean preserveFileTimestamps, @Nullable Integer dirMode, + @Nullable Integer fileMode, boolean includeDefaultLoader, @Nullable String jarmodeToolsLocation, + Spec requiresUnpack, Spec exclusions, Spec librarySpec, + Function compressionResolver, @Nullable String encoding, + ResolvedDependencies resolvedDependencies, @Nullable LayerResolver layerResolver) { this.output = output; this.manifest = manifest; this.preserveFileTimestamps = preserveFileTimestamps; @@ -133,13 +126,11 @@ class BootZipCopyAction implements CopyAction { this.jarmodeToolsLocation = jarmodeToolsLocation; this.requiresUnpack = requiresUnpack; this.exclusions = exclusions; - this.launchScript = launchScript; this.librarySpec = librarySpec; this.compressionResolver = compressionResolver; this.encoding = encoding; this.resolvedDependencies = resolvedDependencies; this.layerResolver = layerResolver; - this.loaderImplementation = loaderImplementation; } @Override @@ -165,7 +156,6 @@ private void writeArchive(CopyActionProcessingStream copyActions) throws IOExcep private void writeArchive(CopyActionProcessingStream copyActions, OutputStream output) throws IOException { ZipArchiveOutputStream zipOutput = new ZipArchiveOutputStream(output); - writeLaunchScriptIfNecessary(zipOutput); try { setEncodingIfNecessary(zipOutput); Processor processor = new Processor(zipOutput); @@ -177,21 +167,6 @@ private void writeArchive(CopyActionProcessingStream copyActions, OutputStream o } } - private void writeLaunchScriptIfNecessary(ZipArchiveOutputStream outputStream) { - if (this.launchScript == null) { - return; - } - try { - File file = this.launchScript.getScript(); - Map properties = this.launchScript.getProperties(); - outputStream.writePreamble(new DefaultLaunchScript(file, properties).toByteArray()); - this.output.setExecutable(true); - } - catch (IOException ex) { - throw new GradleException("Failed to write launch script to " + this.output, ex); - } - } - private void setEncodingIfNecessary(ZipArchiveOutputStream zipOutputStream) { if (this.encoding != null) { zipOutputStream.setEncoding(this.encoding); @@ -214,9 +189,9 @@ private class Processor { private final ZipArchiveOutputStream out; - private final LayersIndex layerIndex; + private final @Nullable LayersIndex layerIndex; - private LoaderZipEntries.WrittenEntries writtenLoaderEntries; + private LoaderZipEntries.@Nullable WrittenEntries writtenLoaderEntries; private final Set writtenDirectories = new LinkedHashSet<>(); @@ -281,11 +256,13 @@ private void processFile(FileCopyDetails details) throws IOException { } if (BootZipCopyAction.this.layerResolver != null) { Layer layer = BootZipCopyAction.this.layerResolver.getLayer(details); + Assert.state(this.layerIndex != null, "'layerIndex' must not be null"); + Assert.state(layer != null, "'layer' must not be null"); this.layerIndex.add(layer, name); } } - private void writeParentDirectoriesIfNecessary(String name, Long time) throws IOException { + private void writeParentDirectoriesIfNecessary(String name, @Nullable Long time) throws IOException { String parentDirectory = getParentDirectory(name); if (parentDirectory != null && this.writtenDirectories.add(parentDirectory)) { ZipArchiveEntry entry = new ZipArchiveEntry(parentDirectory + '/'); @@ -295,7 +272,7 @@ private void writeParentDirectoriesIfNecessary(String name, Long time) throws IO } } - private String getParentDirectory(String name) { + private @Nullable String getParentDirectory(String name) { int lastSlash = name.lastIndexOf('/'); if (lastSlash == -1) { return null; @@ -313,7 +290,7 @@ void finish() throws IOException { writeLayersIndexIfNecessary(); } - private void writeLoaderEntriesIfNecessary(FileCopyDetails details) throws IOException { + private void writeLoaderEntriesIfNecessary(@Nullable FileCopyDetails details) throws IOException { if (!BootZipCopyAction.this.includeDefaultLoader || this.writtenLoaderEntries != null) { return; } @@ -321,18 +298,18 @@ private void writeLoaderEntriesIfNecessary(FileCopyDetails details) throws IOExc // 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()) { Layer layer = BootZipCopyAction.this.layerResolver.getLayer(name); + Assert.state(this.layerIndex != null, "'layerIndex' must not be null"); this.layerIndex.add(layer, name); } } } - private boolean isInMetaInf(FileCopyDetails details) { + private boolean isInMetaInf(@Nullable FileCopyDetails details) { if (details == null) { return false; } @@ -348,13 +325,11 @@ private void writeJarToolsIfNecessary() throws IOException { private void writeJarModeLibrary(String location, JarModeLibrary library) throws IOException { String name = location + library.getName(); - writeEntry(name, ZipEntryContentWriter.fromInputStream(library.openStream()), false, (entry) -> { - try (InputStream in = library.openStream()) { - prepareStoredEntry(library.openStream(), false, entry); - } - }); + writeEntry(name, ZipEntryContentWriter.fromInputStream(library.openStream()), false, + (entry) -> prepareStoredEntry(library::openStream, false, entry)); if (BootZipCopyAction.this.layerResolver != null) { Layer layer = BootZipCopyAction.this.layerResolver.getLayer(library); + Assert.state(this.layerIndex != null, "'layerIndex' must not be null"); this.layerIndex.add(layer, name); } } @@ -381,7 +356,8 @@ private void writeClassPathIndexIfNecessary() throws IOException { if (classPathIndex != null) { Set libraryNames = this.writtenLibraries.keySet(); List 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); } } @@ -406,7 +382,8 @@ private void writeNativeImageArgFileIfNecessary() throws IOException { } 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); }); } @@ -417,6 +394,7 @@ private void writeLayersIndexIfNecessary() throws IOException { String name = (String) manifestAttributes.get("Spring-Boot-Layers-Index"); Assert.state(StringUtils.hasText(name), "Missing layer index manifest attribute"); Layer layer = BootZipCopyAction.this.layerResolver.getLayer(name); + Assert.state(this.layerIndex != null, "'layerIndex' must not be null"); this.layerIndex.add(layer, name); writeEntry(name, this.layerIndex::writeTo, false); } @@ -437,11 +415,13 @@ private void writeEntry(String name, ZipEntryContentWriter entryWriter, boolean this.out.closeArchiveEntry(); if (addToLayerIndex && BootZipCopyAction.this.layerResolver != null) { Layer layer = BootZipCopyAction.this.layerResolver.getLayer(name); + Assert.state(this.layerIndex != null, "'layerIndex' must not be null"); this.layerIndex.add(layer, name); } } - private void prepareEntry(ZipArchiveEntry entry, String name, Long time, int mode) throws IOException { + private void prepareEntry(ZipArchiveEntry entry, String name, @Nullable Long time, int mode) + throws IOException { writeParentDirectoriesIfNecessary(name, time); entry.setUnixMode(mode); if (time != null) { @@ -450,20 +430,20 @@ private void prepareEntry(ZipArchiveEntry entry, String name, Long time, int mod } private void prepareStoredEntry(FileCopyDetails details, ZipArchiveEntry archiveEntry) throws IOException { - prepareStoredEntry(details.open(), BootZipCopyAction.this.requiresUnpack.isSatisfiedBy(details), + prepareStoredEntry(details::open, BootZipCopyAction.this.requiresUnpack.isSatisfiedBy(details), archiveEntry); } - private void prepareStoredEntry(InputStream input, boolean unpack, ZipArchiveEntry archiveEntry) - throws IOException { + private void prepareStoredEntry(ThrowingSupplier input, boolean unpack, + ZipArchiveEntry archiveEntry) throws IOException { new StoredEntryPreparator(input, unpack).prepareStoredEntry(archiveEntry); } - private Long getTime() { + private @Nullable Long getTime() { return getTime(null); } - private Long getTime(FileCopyDetails details) { + private @Nullable Long getTime(@Nullable FileCopyDetails details) { if (!BootZipCopyAction.this.preserveFileTimestamps) { return CONSTANT_TIME_FOR_ZIP_ENTRIES; } @@ -497,9 +477,13 @@ private int getPermissions(FileCopyDetails details) { ? 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); + } } } @@ -575,25 +559,16 @@ private static class StoredEntryPreparator { private static final int BUFFER_SIZE = 32 * 1024; - private final 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; - try (inputStream) { - load(inputStream); - } - } - - private static MessageDigest sha1Digest() { - try { - return MessageDigest.getInstance("SHA-1"); - } - catch (NoSuchAlgorithmException ex) { - throw new IllegalStateException(ex); + StoredEntryPreparator(ThrowingSupplier input, boolean unpack) throws IOException { + this.unpack = unpack; + try (InputStream stream = input.get()) { + load(stream); } } @@ -602,9 +577,6 @@ private void load(InputStream inputStream) throws IOException { 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; } } @@ -614,8 +586,8 @@ void prepareStoredEntry(ZipArchiveEntry entry) { 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"); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/CacheSpec.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/CacheSpec.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/CacheSpec.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/CacheSpec.java index e08b812e403f..b459b0cb205b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/CacheSpec.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/CacheSpec.java @@ -23,6 +23,7 @@ import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.Property; import org.gradle.api.tasks.Input; +import org.jspecify.annotations.Nullable; import org.springframework.boot.buildpack.platform.build.Cache; @@ -36,14 +37,14 @@ public class CacheSpec { private final ObjectFactory objectFactory; - private Cache cache = null; + private @Nullable Cache cache; @Inject public CacheSpec(ObjectFactory objectFactory) { this.objectFactory = objectFactory; } - public Cache asCache() { + public @Nullable Cache asCache() { return this.cache; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DefaultTimeZoneOffset.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DefaultTimeZoneOffset.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DefaultTimeZoneOffset.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DefaultTimeZoneOffset.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DockerSpec.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DockerSpec.java similarity index 98% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DockerSpec.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DockerSpec.java index 1b39c9c440e6..6a6e26dd3e56 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DockerSpec.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/DockerSpec.java @@ -25,6 +25,7 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.Optional; +import org.jspecify.annotations.Nullable; import org.springframework.boot.buildpack.platform.build.BuilderDockerConfiguration; import org.springframework.boot.buildpack.platform.docker.configuration.DockerRegistryAuthentication; @@ -155,7 +156,7 @@ private BuilderDockerConfiguration customizePublishAuthentication(BuilderDockerC DockerRegistryAuthentication.configuration(DockerRegistryAuthentication.EMPTY_USER))); } - private DockerRegistryAuthentication getRegistryAuthentication(String type, DockerRegistrySpec registry, + private DockerRegistryAuthentication getRegistryAuthentication(String type, @Nullable DockerRegistrySpec registry, DockerRegistryAuthentication fallback) { if (registry == null || registry.hasEmptyAuth()) { return fallback; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayerResolver.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayerResolver.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayerResolver.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayerResolver.java index f56a8bf87292..c9c5b706de24 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayerResolver.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayerResolver.java @@ -20,6 +20,7 @@ import org.gradle.api.file.FileCopyDetails; import org.gradle.api.specs.Spec; +import org.jspecify.annotations.Nullable; import org.springframework.boot.gradle.tasks.bundling.ResolvedDependencies.DependencyDescriptor; import org.springframework.boot.loader.tools.Layer; @@ -51,7 +52,7 @@ class LayerResolver { this.librarySpec = librarySpec; } - Layer getLayer(FileCopyDetails details) { + @Nullable Layer getLayer(FileCopyDetails details) { try { if (this.librarySpec.isSatisfiedBy(details)) { return getLayer(asLibrary(details)); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayeredSpec.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayeredSpec.java similarity index 98% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayeredSpec.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayeredSpec.java index 03f791ed7dce..fb0dde870685 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayeredSpec.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LayeredSpec.java @@ -31,6 +31,7 @@ import org.gradle.api.provider.Property; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.Layer; import org.springframework.boot.loader.tools.Layers; @@ -57,7 +58,7 @@ public abstract class LayeredSpec { private DependenciesSpec dependencies; - private Layers layers; + private @Nullable Layers layers; @Inject public LayeredSpec(ObjectFactory objects) { @@ -143,12 +144,10 @@ public void dependencies(Action action) { * @return the layers */ Layers asLayers() { - Layers layers = this.layers; - if (layers == null) { - layers = createLayers(); - this.layers = layers; + if (this.layers == null) { + this.layers = createLayers(); } - return layers; + return this.layers; } private Layers createLayers() { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LoaderZipEntries.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LoaderZipEntries.java similarity index 88% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LoaderZipEntries.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LoaderZipEntries.java index 26f9de747a89..451237097fcc 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LoaderZipEntries.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/LoaderZipEntries.java @@ -27,8 +27,9 @@ import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; 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; /** @@ -40,26 +41,22 @@ */ class LoaderZipEntries { - private final LoaderImplementation loaderImplementation; - - private final Long entryTime; + private final @Nullable Long entryTime; private final int dirMode; private final int fileMode; - LoaderZipEntries(Long entryTime, int dirMode, int fileMode, 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/")) { @@ -76,6 +73,12 @@ else if (entry.getName().endsWith(".class") || entry.getName().startsWith("META- 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); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ResolvedDependencies.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ResolvedDependencies.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ResolvedDependencies.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ResolvedDependencies.java index 6cea3a921916..b925f7d91a01 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ResolvedDependencies.java +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ResolvedDependencies.java @@ -35,6 +35,7 @@ import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Input; import org.gradle.internal.component.external.model.ModuleComponentArtifactIdentifier; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.LibraryCoordinates; @@ -90,7 +91,7 @@ void resolvedArtifacts(Provider> resolvedArtifacts) resolvedArtifacts.map((artifacts) -> artifacts.stream().map(ResolvedArtifactResult::getId).toList())); } - DependencyDescriptor find(File file) { + @Nullable DependencyDescriptor find(File file) { ComponentArtifactIdentifier id = findArtifactIdentifier(file); if (id == null) { return null; @@ -111,7 +112,7 @@ DependencyDescriptor find(File file) { return null; } - private ComponentArtifactIdentifier findArtifactIdentifier(File file) { + private @Nullable ComponentArtifactIdentifier findArtifactIdentifier(File file) { List files = this.artifactFiles.get(); for (int i = 0; i < files.size(); i++) { if (file.equals(files.get(i))) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ZipCompression.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ZipCompression.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ZipCompression.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/ZipCompression.java diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/package-info.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/package-info.java new file mode 100644 index 000000000000..c33bd95d6dd7 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Support for creating executable jars and wars. + */ +@NullMarked +package org.springframework.boot.gradle.tasks.bundling; + +import org.jspecify.annotations.NullMarked; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/run/BootRun.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/run/BootRun.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/run/BootRun.java rename to build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/run/BootRun.java diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/run/package-info.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/run/package-info.java new file mode 100644 index 000000000000..79caee56988b --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/run/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Support for running Spring Boot applications. + */ +@NullMarked +package org.springframework.boot.gradle.tasks.run; + +import org.jspecify.annotations.NullMarked; diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/util/VersionExtractor.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/util/VersionExtractor.java new file mode 100644 index 000000000000..ba95cf232e81 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/util/VersionExtractor.java @@ -0,0 +1,70 @@ +/* + * 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.gradle.util; + +import java.io.File; +import java.io.IOException; +import java.net.JarURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.util.jar.Attributes; +import java.util.jar.JarFile; + +import org.jspecify.annotations.Nullable; + +/** + * Extracts version information for a Class. + * + * @author Andy Wilkinson + * @author Scott Frederick + * @since 2.3.0 + */ +public final class VersionExtractor { + + private VersionExtractor() { + } + + /** + * Return the version information for the provided {@link Class}. + * @param cls the Class to retrieve the version for + * @return the version, or {@code null} if a version can not be extracted + */ + public static @Nullable String forClass(Class cls) { + String implementationVersion = cls.getPackage().getImplementationVersion(); + if (implementationVersion != null) { + return implementationVersion; + } + URL codeSourceLocation = cls.getProtectionDomain().getCodeSource().getLocation(); + try { + URLConnection connection = codeSourceLocation.openConnection(); + if (connection instanceof JarURLConnection jarURLConnection) { + return getImplementationVersion(jarURLConnection.getJarFile()); + } + try (JarFile jarFile = new JarFile(new File(codeSourceLocation.toURI()))) { + return getImplementationVersion(jarFile); + } + } + catch (Exception ex) { + return null; + } + } + + private static String getImplementationVersion(JarFile jarFile) throws IOException { + return jarFile.getManifest().getMainAttributes().getValue(Attributes.Name.IMPLEMENTATION_VERSION); + } + +} diff --git a/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/util/package-info.java b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/util/package-info.java new file mode 100644 index 000000000000..57515768a1f7 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/util/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Shared utility classes. + */ +@NullMarked +package org.springframework.boot.gradle.util; + +import org.jspecify.annotations.NullMarked; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/resources/unixStartScript.txt b/build-plugin/spring-boot-gradle-plugin/src/main/resources/unixStartScript.txt similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/resources/unixStartScript.txt rename to build-plugin/spring-boot-gradle-plugin/src/main/resources/unixStartScript.txt diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/resources/windowsStartScript.txt b/build-plugin/spring-boot-gradle-plugin/src/main/resources/windowsStartScript.txt similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/resources/windowsStartScript.txt rename to build-plugin/spring-boot-gradle-plugin/src/main/resources/windowsStartScript.txt diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootjar/classpath/BootJarClasspathApplication.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootjar/classpath/BootJarClasspathApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootjar/classpath/BootJarClasspathApplication.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootjar/classpath/BootJarClasspathApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootjar/main/CustomMainClass.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootjar/main/CustomMainClass.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootjar/main/CustomMainClass.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootjar/main/CustomMainClass.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/classpath/BootRunClasspathApplication.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/classpath/BootRunClasspathApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/classpath/BootRunClasspathApplication.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/classpath/BootRunClasspathApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/jvmargs/BootRunJvmArgsApplication.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/jvmargs/BootRunJvmArgsApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/jvmargs/BootRunJvmArgsApplication.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/jvmargs/BootRunJvmArgsApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/main/CustomMainClass.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/main/CustomMainClass.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/main/CustomMainClass.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/main/CustomMainClass.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/classpath/BootTestRunClasspathApplication.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/classpath/BootTestRunClasspathApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/classpath/BootTestRunClasspathApplication.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/classpath/BootTestRunClasspathApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/jvmargs/BootTestRunJvmArgsApplication.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/jvmargs/BootTestRunJvmArgsApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/jvmargs/BootTestRunJvmArgsApplication.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/jvmargs/BootTestRunJvmArgsApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/nomain/BootTestRunNoMain.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/nomain/BootTestRunNoMain.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/nomain/BootTestRunNoMain.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/boottestrun/nomain/BootTestRunNoMain.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootwar/main/CustomMainClass.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootwar/main/CustomMainClass.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootwar/main/CustomMainClass.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/com/example/bootwar/main/CustomMainClass.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/TaskConfigurationAvoidanceTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/TaskConfigurationAvoidanceTests.java similarity index 93% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/TaskConfigurationAvoidanceTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/TaskConfigurationAvoidanceTests.java index 602a41848918..994ee7d935b8 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/TaskConfigurationAvoidanceTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/TaskConfigurationAvoidanceTests.java @@ -19,10 +19,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.Predicate; import java.util.regex.Pattern; import com.tngtech.archunit.base.DescribedPredicate; -import com.tngtech.archunit.base.Predicate; import com.tngtech.archunit.core.domain.JavaClasses; import com.tngtech.archunit.core.domain.JavaMethodCall; import com.tngtech.archunit.core.domain.JavaType; @@ -75,9 +75,9 @@ private ProhibitedConfigurer on(Class type) { } @Override - public boolean apply(JavaMethodCall methodCall) { + public boolean test(JavaMethodCall methodCall) { for (Predicate spec : this.prohibited) { - if (spec.apply(methodCall)) { + if (spec.test(methodCall)) { return true; } } @@ -119,7 +119,7 @@ static class ProhibitMethodsNamed implements Predicate { } @Override - public boolean apply(JavaMethodCall methodCall) { + public boolean test(JavaMethodCall methodCall) { return methodCall.getTargetOwner().isEquivalentTo(this.owner) && methodCall.getName().equals(this.name); } @@ -135,8 +135,8 @@ private ProhibitMethod(Class owner, String name, List> parameterType } @Override - public boolean apply(JavaMethodCall methodCall) { - return super.apply(methodCall) && match(methodCall.getTarget().getParameterTypes()); + public boolean test(JavaMethodCall methodCall) { + return super.test(methodCall) && match(methodCall.getTarget().getParameterTypes()); } private boolean match(List callParameterTypes) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/Examples.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/Examples.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/Examples.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/Examples.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/GettingStartedDocumentationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/GettingStartedDocumentationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/GettingStartedDocumentationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/GettingStartedDocumentationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/IntegratingWithActuatorDocumentationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/IntegratingWithActuatorDocumentationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/IntegratingWithActuatorDocumentationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/IntegratingWithActuatorDocumentationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/ManagingDependenciesDocumentationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/ManagingDependenciesDocumentationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/ManagingDependenciesDocumentationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/ManagingDependenciesDocumentationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java similarity index 88% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java index e9573acb8537..cdcb297acc16 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java @@ -18,8 +18,6 @@ import java.io.File; import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.FileWriter; import java.io.IOException; import java.util.Collections; import java.util.jar.JarEntry; @@ -34,7 +32,6 @@ import org.springframework.boot.gradle.junit.GradleMultiDslExtension; import org.springframework.boot.testsupport.gradle.testkit.GradleBuild; -import org.springframework.util.FileCopyUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -124,40 +121,10 @@ void bootJarRequiresUnpack() throws IOException { 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"); } } - @TestTemplate - void bootJarIncludeLaunchScript() throws IOException { - this.gradleBuild.script(Examples.DIR + "packaging/boot-jar-include-launch-script").build("bootJar"); - File file = new File(this.gradleBuild.getProjectDir(), - "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); - assertThat(file).isFile(); - assertThat(FileCopyUtils.copyToString(new FileReader(file))).startsWith("#!/bin/bash"); - } - - @TestTemplate - void bootJarLaunchScriptProperties() throws IOException { - this.gradleBuild.script(Examples.DIR + "packaging/boot-jar-launch-script-properties").build("bootJar"); - File file = new File(this.gradleBuild.getProjectDir(), - "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); - assertThat(file).isFile(); - assertThat(FileCopyUtils.copyToString(new FileReader(file))).contains("example-app.log"); - } - - @TestTemplate - void bootJarCustomLaunchScript() throws IOException { - File customScriptFile = new File(this.gradleBuild.getProjectDir(), "src/custom.script"); - customScriptFile.getParentFile().mkdirs(); - FileCopyUtils.copy("custom", new FileWriter(customScriptFile)); - this.gradleBuild.script(Examples.DIR + "packaging/boot-jar-custom-launch-script").build("bootJar"); - File file = new File(this.gradleBuild.getProjectDir(), - "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); - assertThat(file).isFile(); - assertThat(FileCopyUtils.copyToString(new FileReader(file))).startsWith("custom"); - } - @TestTemplate void bootWarPropertiesLauncher() throws IOException { this.gradleBuild.script(Examples.DIR + "packaging/boot-war-properties-launcher").build("bootWar"); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PublishingDocumentationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PublishingDocumentationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PublishingDocumentationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PublishingDocumentationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/RunningDocumentationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/RunningDocumentationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/RunningDocumentationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/RunningDocumentationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests.java similarity index 76% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests.java index 85cb47fe7d8e..a0bfed5f8945 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.Properties; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.TestTemplate; @@ -39,12 +40,14 @@ @GradleCompatibility class BuildInfoDslIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate void basicJar() { - assertThat(this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Properties properties = buildInfoProperties(); assertThat(properties).containsEntry("build.name", this.gradleBuild.getProjectDir().getName()); assertThat(properties).containsEntry("build.artifact", this.gradleBuild.getProjectDir().getName()); @@ -54,8 +57,9 @@ void basicJar() { @TestTemplate void jarWithCustomName() { - assertThat(this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Properties properties = buildInfoProperties(); assertThat(properties).containsEntry("build.name", this.gradleBuild.getProjectDir().getName()); assertThat(properties).containsEntry("build.artifact", "foo"); @@ -65,8 +69,9 @@ void jarWithCustomName() { @TestTemplate void basicWar() { - assertThat(this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Properties properties = buildInfoProperties(); assertThat(properties).containsEntry("build.name", this.gradleBuild.getProjectDir().getName()); assertThat(properties).containsEntry("build.artifact", this.gradleBuild.getProjectDir().getName()); @@ -76,8 +81,9 @@ void basicWar() { @TestTemplate void warWithCustomName() { - assertThat(this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Properties properties = buildInfoProperties(); assertThat(properties).containsEntry("build.name", this.gradleBuild.getProjectDir().getName()); assertThat(properties).containsEntry("build.artifact", "foo"); @@ -87,8 +93,9 @@ void warWithCustomName() { @TestTemplate void additionalProperties() { - assertThat(this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootBuildInfo", "--stacktrace").task(":bootBuildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Properties properties = buildInfoProperties(); assertThat(properties).containsEntry("build.name", this.gradleBuild.getProjectDir().getName()); assertThat(properties).containsEntry("build.artifact", this.gradleBuild.getProjectDir().getName()); @@ -100,8 +107,9 @@ void additionalProperties() { @TestTemplate void classesDependency() { - assertThat(this.gradleBuild.build("classes", "--stacktrace").task(":bootBuildInfo").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("classes", "--stacktrace").task(":bootBuildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } private Properties buildInfoProperties() { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleBuildFieldSetter.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleBuildFieldSetter.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleBuildFieldSetter.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleBuildFieldSetter.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java similarity index 92% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java index 360475c99751..1925f4aabbe0 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java @@ -48,8 +48,10 @@ */ boolean configurationCache() default false; - String versionsLessThan() default ""; - - String versionsAtLeast() default ""; + /** + * Minimum version of Gradle against which compatibility should be tested. + * @return minimum version + */ + String minimumVersion() default ""; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java similarity index 92% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java index 83571a35bc6c..6177a9531aea 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java @@ -59,13 +59,8 @@ public Stream provideTestTemplateInvocationContex GradleCompatibility gradleCompatibility = AnnotationUtils.findAnnotation(testClass, GradleCompatibility.class) .get(); Stream gradleVersions = GRADLE_VERSIONS.stream(); - if (StringUtils.hasText(gradleCompatibility.versionsLessThan())) { - GradleVersion upperExclusive = GradleVersion.version(gradleCompatibility.versionsLessThan()); - gradleVersions = gradleVersions - .filter((version) -> GradleVersion.version(version).compareTo(upperExclusive) < 0); - } - if (StringUtils.hasText(gradleCompatibility.versionsAtLeast())) { - GradleVersion lowerInclusive = GradleVersion.version(gradleCompatibility.versionsAtLeast()); + if (StringUtils.hasText(gradleCompatibility.minimumVersion())) { + GradleVersion lowerInclusive = GradleVersion.version(gradleCompatibility.minimumVersion()); gradleVersions = gradleVersions .filter((version) -> GradleVersion.version(version).compareTo(lowerInclusive) >= 0); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleMultiDslExtension.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleMultiDslExtension.java similarity index 92% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleMultiDslExtension.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleMultiDslExtension.java index c10d573c3637..3904db7277e6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleMultiDslExtension.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleMultiDslExtension.java @@ -66,8 +66,11 @@ private static final class DslTestTemplateInvocationContext implements TestTempl @Override public List getAdditionalExtensions() { - GradleBuild gradleBuild = new PluginClasspathGradleBuild(this.buildOutput, this.dsl) - .gradleVersion(GradleVersions.minimumCompatible()); + PluginClasspathGradleBuild gradleBuild = new PluginClasspathGradleBuild(this.buildOutput, this.dsl); + if (this.dsl == Dsl.KOTLIN) { + gradleBuild.kotlin(); + } + gradleBuild.gradleVersion(GradleVersions.minimumCompatible()); return Arrays.asList(new GradleBuildFieldSetter(gradleBuild), new GradleBuildExtension()); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java similarity index 87% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java index 545736f94514..0630a7f81113 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java @@ -33,6 +33,7 @@ import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.gradle.util.GradleVersion; import org.junit.jupiter.api.TestTemplate; @@ -50,6 +51,7 @@ @GradleCompatibility class ApplicationPluginActionIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate @@ -84,8 +86,9 @@ void createsBootStartScriptsTaskUsesApplicationPluginsDefaultJvmOpts() { @TestTemplate void zipDistributionForJarCanBeBuilt() throws IOException { - assertThat(this.gradleBuild.build("bootDistZip").task(":bootDistZip").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootDistZip").task(":bootDistZip"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String name = this.gradleBuild.getProjectDir().getName(); File distribution = new File(this.gradleBuild.getProjectDir(), "build/distributions/" + name + "-boot.zip"); assertThat(distribution).isFile(); @@ -96,8 +99,9 @@ void zipDistributionForJarCanBeBuilt() throws IOException { @TestTemplate void tarDistributionForJarCanBeBuilt() throws IOException { - assertThat(this.gradleBuild.build("bootDistTar").task(":bootDistTar").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootDistTar").task(":bootDistTar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String name = this.gradleBuild.getProjectDir().getName(); File distribution = new File(this.gradleBuild.getProjectDir(), "build/distributions/" + name + "-boot.tar"); assertThat(distribution).isFile(); @@ -108,8 +112,9 @@ void tarDistributionForJarCanBeBuilt() throws IOException { @TestTemplate void zipDistributionForWarCanBeBuilt() throws IOException { - assertThat(this.gradleBuild.build("bootDistZip").task(":bootDistZip").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootDistZip").task(":bootDistZip"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String name = this.gradleBuild.getProjectDir().getName(); File distribution = new File(this.gradleBuild.getProjectDir(), "build/distributions/" + name + "-boot.zip"); assertThat(distribution).isFile(); @@ -120,8 +125,9 @@ void zipDistributionForWarCanBeBuilt() throws IOException { @TestTemplate void tarDistributionForWarCanBeBuilt() throws IOException { - assertThat(this.gradleBuild.build("bootDistTar").task(":bootDistTar").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootDistTar").task(":bootDistTar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String name = this.gradleBuild.getProjectDir().getName(); File distribution = new File(this.gradleBuild.getProjectDir(), "build/distributions/" + name + "-boot.tar"); assertThat(distribution).isFile(); @@ -132,8 +138,9 @@ void tarDistributionForWarCanBeBuilt() throws IOException { @TestTemplate void applicationNameCanBeUsedToCustomizeDistributionName() throws IOException { - assertThat(this.gradleBuild.build("bootDistTar").task(":bootDistTar").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootDistTar").task(":bootDistTar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File distribution = new File(this.gradleBuild.getProjectDir(), "build/distributions/custom-boot.tar"); assertThat(distribution).isFile(); String name = this.gradleBuild.getProjectDir().getName(); @@ -144,8 +151,9 @@ void applicationNameCanBeUsedToCustomizeDistributionName() throws IOException { @TestTemplate void scriptsHaveCorrectPermissions() throws IOException { - assertThat(this.gradleBuild.build("bootDistTar").task(":bootDistTar").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("bootDistTar").task(":bootDistTar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String name = this.gradleBuild.getProjectDir().getName(); File distribution = new File(this.gradleBuild.getProjectDir(), "build/distributions/" + name + "-boot.tar"); assertThat(distribution).isFile(); diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/CyclonedxPluginActionIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/CyclonedxPluginActionIntegrationTests.java new file mode 100644 index 000000000000..a85ed5b588b7 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/CyclonedxPluginActionIntegrationTests.java @@ -0,0 +1,71 @@ +/* + * 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.gradle.plugin; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; +import org.gradle.testkit.runner.TaskOutcome; +import org.junit.jupiter.api.TestTemplate; + +import org.springframework.boot.gradle.junit.GradleCompatibility; +import org.springframework.boot.testsupport.gradle.testkit.GradleBuild; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for {@link CyclonedxPluginAction}. + * + * @author Andy Wilkinson + */ +@GradleCompatibility +class CyclonedxPluginActionIntegrationTests { + + @SuppressWarnings("NullAway.Init") + GradleBuild gradleBuild; + + @TestTemplate + void sbomIsIncludedInUberJar() throws IOException { + sbomIsIncludedInUberArchive("bootJar", ""); + } + + @TestTemplate + void sbomIsIncludedInUberWar() throws IOException { + sbomIsIncludedInUberArchive("bootWar", "WEB-INF/classes/"); + } + + private void sbomIsIncludedInUberArchive(String taskName, String sbomLocationPrefix) throws IOException { + BuildResult result = this.gradleBuild.expectDeprecationWarningsWithAtLeastVersion("7.6.6").build(taskName); + BuildTask task = result.task(":cyclonedxBom"); + assertThat(task).isNotNull().extracting(BuildTask::getOutcome).isEqualTo(TaskOutcome.SUCCESS); + File[] libs = new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles(); + assertThat(libs).hasSize(1); + try (JarFile jar = new JarFile(libs[0])) { + assertThat(jar.getManifest().getMainAttributes().getValue("Sbom-Format")).isEqualTo("CycloneDX"); + String sbomLocation = jar.getManifest().getMainAttributes().getValue("Sbom-Location"); + assertThat(sbomLocation).isEqualTo(sbomLocationPrefix + "META-INF/sbom/application.cdx.json"); + List entryNames = jar.stream().map(JarEntry::getName).toList(); + assertThat(entryNames).contains(sbomLocation); + } + } + +} diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests.java new file mode 100644 index 000000000000..e63e66c419d7 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests.java @@ -0,0 +1,56 @@ +/* + * 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.gradle.plugin; + +import org.gradle.testkit.runner.BuildTask; +import org.gradle.testkit.runner.TaskOutcome; +import org.junit.jupiter.api.TestTemplate; + +import org.springframework.boot.gradle.junit.GradleCompatibility; +import org.springframework.boot.testsupport.gradle.testkit.GradleBuild; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for the configuration applied by + * {@link DependencyManagementPluginAction}. + * + * @author Andy Wilkinson + */ +@GradleCompatibility +class DependencyManagementPluginActionIntegrationTests { + + @SuppressWarnings("NullAway.Init") + GradleBuild gradleBuild; + + @TestTemplate + void noDependencyManagementIsAppliedByDefault() { + BuildTask task = this.gradleBuild.build("doesNotHaveDependencyManagement") + .task(":doesNotHaveDependencyManagement"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + } + + @TestTemplate + void bomIsImportedWhenDependencyManagementPluginIsApplied() { + BuildTask task = this.gradleBuild.build("hasDependencyManagement", "-PapplyDependencyManagementPlugin") + .task(":hasDependencyManagement"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java index 39e668f19f8a..826797565bb3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java @@ -28,6 +28,7 @@ import java.util.regex.Pattern; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.gradle.util.GradleVersion; import org.junit.jupiter.api.TestTemplate; @@ -45,6 +46,7 @@ @GradleCompatibility(configurationCache = true) class JavaPluginActionIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate @@ -105,8 +107,12 @@ void javaCompileTasksCanOverrideDefaultParametersCompilerFlag() { @TestTemplate void assembleRunsBootJarAndJar() { BuildResult result = this.gradleBuild.build("assemble"); - assertThat(result.task(":bootJar").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(result.task(":jar").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask bootJar = result.task(":bootJar"); + assertThat(bootJar).isNotNull(); + assertThat(bootJar.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask jar = result.task(":jar"); + assertThat(jar).isNotNull(); + assertThat(jar.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File buildLibs = new File(this.gradleBuild.getProjectDir(), "build/libs"); assertThat(buildLibs.listFiles()).containsExactlyInAnyOrder( new File(buildLibs, this.gradleBuild.getProjectDir().getName() + ".jar"), @@ -116,7 +122,9 @@ void assembleRunsBootJarAndJar() { @TestTemplate void errorMessageIsHelpfulWhenMainClassCannotBeResolved() { BuildResult result = this.gradleBuild.buildAndFail("build", "-PapplyJavaPlugin"); - assertThat(result.task(":bootJar").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootJar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); assertThat(result.getOutput()).contains("Main class name has not been configured and it could not be resolved"); } @@ -128,7 +136,9 @@ void additionalMetadataLocationsConfiguredWhenProcessorIsPresent() throws IOExce new JarOutputStream(new FileOutputStream(new File(libs, "spring-boot-configuration-processor-1.2.3.jar"))) .close(); BuildResult result = this.gradleBuild.build("compileJava"); - assertThat(result.task(":compileJava").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":compileJava"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("compileJava compiler args: [-parameters, -Aorg.springframework.boot." + "configurationprocessor.additionalMetadataLocations=" + new File(this.gradleBuild.getProjectDir(), "src/main/resources").getCanonicalPath()); @@ -138,7 +148,9 @@ void additionalMetadataLocationsConfiguredWhenProcessorIsPresent() throws IOExce void additionalMetadataLocationsNotConfiguredWhenProcessorIsAbsent() throws IOException { createMinimalMainSource(); BuildResult result = this.gradleBuild.build("compileJava"); - assertThat(result.task(":compileJava").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":compileJava"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("compileJava compiler args: [-parameters]"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java index 68f5986a904a..2e3807047f2c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java @@ -45,7 +45,7 @@ @ExtendWith(GradleBuildExtension.class) class KotlinPluginActionIntegrationTests { - GradleBuild gradleBuild = new PluginClasspathGradleBuild(new BuildOutput(getClass())); + GradleBuild gradleBuild = new PluginClasspathGradleBuild(new BuildOutput(getClass())).kotlin(); @Test void noKotlinVersionPropertyWithoutKotlinPlugin() { @@ -89,7 +89,7 @@ void taskConfigurationIsAvoided() throws IOException { configured.add(line.substring("Configuring :".length())); } } - assertThat(configured).containsExactlyInAnyOrder("help", "compileJava", "clean"); + assertThat(configured).containsExactlyInAnyOrder("help", "clean"); } @Test diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java similarity index 90% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java index 325bfd6149bf..688ef99de8f1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java @@ -28,6 +28,7 @@ import java.util.jar.Manifest; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.TestTemplate; @@ -43,9 +44,10 @@ * @author Andy Wilkinson * @author Scott Frederick */ -@GradleCompatibility +@GradleCompatibility(minimumVersion = "8.3") class NativeImagePluginActionIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate @@ -58,7 +60,9 @@ void applyingNativeImagePluginAppliesAotPlugin() { void reachabilityMetadataConfigurationFilesAreCopiedToJar() throws IOException { writeDummySpringApplicationAotProcessorMainClass(); BuildResult result = this.gradleBuild.build("bootJar"); - assertThat(result.task(":bootJar").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootJar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File buildLibs = new File(this.gradleBuild.getProjectDir(), "build/libs"); File jarFile = new File(buildLibs, this.gradleBuild.getProjectDir().getName() + ".jar"); assertThat(buildLibs.listFiles()).contains(jarFile); @@ -76,7 +80,9 @@ void reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar() th FileSystemUtils.copyRecursively(new File("src/test/resources/reachability-metadata-repository"), new File(this.gradleBuild.getProjectDir(), "reachability-metadata-repository")); BuildResult result = this.gradleBuild.build("bootJar"); - assertThat(result.task(":bootJar").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootJar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File buildLibs = new File(this.gradleBuild.getProjectDir(), "build/libs"); File jarFile = new File(buildLibs, this.gradleBuild.getProjectDir().getName() + ".jar"); assertThat(buildLibs.listFiles()).contains(jarFile); @@ -111,7 +117,9 @@ void classesGeneratedDuringAotProcessingAreOnTheNativeImageClasspath() { @TestTemplate void classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath() { - BuildResult result = this.gradleBuild.build("checkTestNativeImageClasspath"); + BuildResult result = this.gradleBuild + .scriptProperty("junitVersion", TestTemplate.class.getPackage().getImplementationVersion()) + .build("checkTestNativeImageClasspath"); assertThat(result.getOutput()).contains(projectPath("build/classes/java/aotTest"), projectPath("build/resources/aotTest"), projectPath("build/generated/aotTestClasses")); } @@ -120,7 +128,9 @@ void classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath() { void nativeEntryIsAddedToManifest() throws IOException { writeDummySpringApplicationAotProcessorMainClass(); BuildResult result = this.gradleBuild.build("bootJar"); - assertThat(result.task(":bootJar").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootJar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File buildLibs = new File(this.gradleBuild.getProjectDir(), "build/libs"); try (JarFile jarFile = new JarFile(new File(buildLibs, this.gradleBuild.getProjectDir().getName() + ".jar"))) { Manifest manifest = jarFile.getManifest(); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.java index 80b8d4c6cbec..070785c643fa 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.java @@ -32,6 +32,7 @@ @GradleCompatibility class OnlyDependencyManagementIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java similarity index 92% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java index 0e27c948eb6d..0291854f4c27 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests.java @@ -21,6 +21,7 @@ import java.nio.file.Files; import java.util.List; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.condition.EnabledOnJre; @@ -40,6 +41,7 @@ @GradleCompatibility class SpringBootAotPluginIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate @@ -126,14 +128,16 @@ void processTestAotHasTestAndDevelopmentOnlyDependenciesOnItsClasspath() { void processAotRunsWhenProjectHasMainSource() throws IOException { writeMainClass("org.springframework.boot", "SpringApplicationAotProcessor"); writeMainClass("com.example", "Main"); - assertThat(this.gradleBuild.build("processAot").task(":processAot").getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build("processAot").task(":processAot"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @TestTemplate void processTestAotIsSkippedWhenProjectHasNoTestSource() { - assertThat(this.gradleBuild.build("processTestAot").task(":processTestAot").getOutcome()) - .isEqualTo(TaskOutcome.NO_SOURCE); + BuildTask task = this.gradleBuild.build("processTestAot").task(":processTestAot"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.NO_SOURCE); } // gh-37343 diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.java new file mode 100644 index 000000000000..39cf9194223f --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.java @@ -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.gradle.plugin; + +import org.gradle.testkit.runner.BuildResult; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild; +import org.springframework.boot.testsupport.BuildOutput; +import org.springframework.boot.testsupport.gradle.testkit.GradleBuild; +import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for {@link SpringBootPlugin}. + * + * @author Andy Wilkinson + */ +@ExtendWith(GradleBuildExtension.class) +class SpringBootPluginIntegrationTests { + + final GradleBuild gradleBuild = new PluginClasspathGradleBuild(new BuildOutput(getClass())); + + @Test + @DisabledForJreRange(min = JRE.JAVA_24) + void failFastWithVersionOfGradle8LowerThanRequired() { + BuildResult result = this.gradleBuild.gradleVersion("8.13").buildAndFail(); + assertThat(result.getOutput()).contains( + "Spring Boot plugin requires Gradle 8.x (8.14 or later) or 9.x. The current version is Gradle 8.13"); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginTests.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginTests.java index 956c8edab863..77871c39a248 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/SpringBootPluginTests.java @@ -38,6 +38,7 @@ class SpringBootPluginTests { @TempDir + @SuppressWarnings("NullAway.Init") File temp; @Test diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.java similarity index 87% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.java index 01c704ffdde2..262d0c312011 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.java @@ -26,6 +26,7 @@ import java.util.Set; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.gradle.util.GradleVersion; import org.junit.jupiter.api.TestTemplate; @@ -43,6 +44,7 @@ @GradleCompatibility class WarPluginActionIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate @@ -60,8 +62,12 @@ void applyingWarPluginCreatesBootWarTask() { @TestTemplate void assembleRunsBootWarAndWar() { BuildResult result = this.gradleBuild.build("assemble"); - assertThat(result.task(":bootWar").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(result.task(":war").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask bootWar = result.task(":bootWar"); + assertThat(bootWar).isNotNull(); + assertThat(bootWar.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask war = result.task(":war"); + assertThat(war).isNotNull(); + assertThat(war.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File buildLibs = new File(this.gradleBuild.getProjectDir(), "build/libs"); List expected = new ArrayList<>(); expected.add(new File(buildLibs, this.gradleBuild.getProjectDir().getName() + ".war")); @@ -75,7 +81,9 @@ void assembleRunsBootWarAndWar() { @TestTemplate void errorMessageIsHelpfulWhenMainClassCannotBeResolved() { BuildResult result = this.gradleBuild.buildAndFail("build", "-PapplyWarPlugin"); - assertThat(result.task(":bootWar").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootWar"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); assertThat(result.getOutput()).contains("Main class name has not been configured and it could not be resolved"); } diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests.java new file mode 100644 index 000000000000..f87b87dc5e09 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests.java @@ -0,0 +1,172 @@ +/* + * 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.gradle.tasks.buildinfo; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.time.Instant; +import java.util.Properties; + +import org.gradle.testkit.runner.BuildTask; +import org.gradle.testkit.runner.TaskOutcome; +import org.junit.jupiter.api.TestTemplate; + +import org.springframework.boot.gradle.junit.GradleCompatibility; +import org.springframework.boot.testsupport.FileUtils; +import org.springframework.boot.testsupport.gradle.testkit.GradleBuild; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for the {@link BuildInfo} task. + * + * @author Andy Wilkinson + * @author Vedran Pavic + */ +@GradleCompatibility(configurationCache = true) +class BuildInfoIntegrationTests { + + @SuppressWarnings("NullAway.Init") + GradleBuild gradleBuild; + + @TestTemplate + void defaultValues() { + BuildTask task = this.gradleBuild.build("buildInfo").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + Properties buildInfoProperties = buildInfoProperties(); + assertThat(buildInfoProperties).containsKey("build.time"); + assertThat(buildInfoProperties).doesNotContainKey("build.artifact"); + assertThat(buildInfoProperties).doesNotContainKey("build.group"); + assertThat(buildInfoProperties).containsEntry("build.name", this.gradleBuild.getProjectDir().getName()); + assertThat(buildInfoProperties).containsEntry("build.version", "unspecified"); + } + + @TestTemplate + void basicExecution() { + BuildTask task = this.gradleBuild.build("buildInfo").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + Properties buildInfoProperties = buildInfoProperties(); + assertThat(buildInfoProperties).containsKey("build.time"); + assertThat(buildInfoProperties).containsEntry("build.artifact", "foo"); + assertThat(buildInfoProperties).containsEntry("build.group", "foo"); + assertThat(buildInfoProperties).containsEntry("build.additional", "foo"); + assertThat(buildInfoProperties).containsEntry("build.name", "foo"); + assertThat(buildInfoProperties).containsEntry("build.version", "0.1.0"); + } + + @TestTemplate + void notUpToDateWhenExecutedTwiceAsTimeChanges() { + BuildTask task = this.gradleBuild.build("buildInfo").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + Properties first = buildInfoProperties(); + String firstBuildTime = first.getProperty("build.time"); + assertThat(firstBuildTime).isNotNull(); + task = this.gradleBuild.build("buildInfo").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + Properties second = buildInfoProperties(); + String secondBuildTime = second.getProperty("build.time"); + assertThat(secondBuildTime).isNotNull(); + assertThat(Instant.parse(firstBuildTime)).isBefore(Instant.parse(secondBuildTime)); + } + + @TestTemplate + void upToDateWhenExecutedTwiceWithFixedTime() { + BuildTask task = this.gradleBuild.build("buildInfo", "-PnullTime").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = this.gradleBuild.build("buildInfo", "-PnullTime").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); + } + + @TestTemplate + void notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedProjectVersion() { + BuildTask task = this.gradleBuild.scriptProperty("projectVersion", "0.1.0") + .build("buildInfo") + .task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = this.gradleBuild.scriptProperty("projectVersion", "0.2.0").build("buildInfo").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + } + + @TestTemplate + void notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedGradlePropertiesProjectVersion() throws IOException { + Path gradleProperties = new File(this.gradleBuild.getProjectDir(), "gradle.properties").toPath(); + Files.writeString(gradleProperties, "version=0.1.0", StandardOpenOption.CREATE, StandardOpenOption.WRITE, + StandardOpenOption.TRUNCATE_EXISTING); + BuildTask task = this.gradleBuild.build("buildInfo").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + Files.writeString(gradleProperties, "version=0.2.0", StandardOpenOption.CREATE, StandardOpenOption.WRITE, + StandardOpenOption.TRUNCATE_EXISTING); + task = this.gradleBuild.build("buildInfo").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + } + + @TestTemplate + void reproducibleOutputWithFixedTime() throws IOException, InterruptedException { + BuildTask task = this.gradleBuild.build("buildInfo", "-PnullTime").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + File buildInfoProperties = new File(this.gradleBuild.getProjectDir(), "build/buildInfo/build-info.properties"); + String firstHash = FileUtils.sha1Hash(buildInfoProperties); + assertThat(buildInfoProperties.delete()).isTrue(); + Thread.sleep(1500); + task = this.gradleBuild.build("buildInfo", "-PnullTime").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + String secondHash = FileUtils.sha1Hash(buildInfoProperties); + assertThat(firstHash).isEqualTo(secondHash); + } + + @TestTemplate + void excludeProperties() { + BuildTask task = this.gradleBuild.build("buildInfo").task(":buildInfo"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + Properties buildInfoProperties = buildInfoProperties(); + assertThat(buildInfoProperties).doesNotContainKey("build.group"); + assertThat(buildInfoProperties).doesNotContainKey("build.artifact"); + assertThat(buildInfoProperties).doesNotContainKey("build.version"); + assertThat(buildInfoProperties).doesNotContainKey("build.name"); + } + + private Properties buildInfoProperties() { + File file = new File(this.gradleBuild.getProjectDir(), "build/buildInfo/build-info.properties"); + assertThat(file).isFile(); + Properties properties = new Properties(); + try (FileReader reader = new FileReader(file)) { + properties.load(reader); + return properties; + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java similarity index 94% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java index 9944ffe87951..16cfa6140aef 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java @@ -24,8 +24,6 @@ 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; @@ -45,6 +43,7 @@ class BuildInfoTests { @TempDir + @SuppressWarnings("NullAway.Init") File temp; @Test @@ -165,6 +164,7 @@ void additionalPropertiesCanBeExcluded() { } @Test + @SuppressWarnings("NullAway") // Test null check void nullAdditionalPropertyProducesInformativeFailure() { BuildInfo task = createTask(createProject("test")); assertThatException().isThrownBy(() -> task.getProperties().getAdditional().put("a", null)) @@ -173,11 +173,7 @@ void nullAdditionalPropertyProducesInformativeFailure() { 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) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveIntegrationTests.java similarity index 80% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveIntegrationTests.java index 917561989154..07a878742315 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveIntegrationTests.java @@ -80,6 +80,7 @@ abstract class AbstractBootArchiveIntegrationTests { private final String indexPath; + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; protected AbstractBootArchiveIntegrationTests(String taskName, String libPath, String classesPath, @@ -92,91 +93,41 @@ protected AbstractBootArchiveIntegrationTests(String taskName, String libPath, S @TestTemplate void basicBuild() { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @TestTemplate void reproducibleArchive() throws IOException, InterruptedException { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File jar = new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0]; String firstHash = FileUtils.sha1Hash(jar); Thread.sleep(1500); - assertThat(this.gradleBuild.build("clean", this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + task = this.gradleBuild.build("clean", this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String secondHash = FileUtils.sha1Hash(jar); 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()) - .isEqualTo(TaskOutcome.SUCCESS); - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.UP_TO_DATE); - } - - @TestTemplate - void upToDateWhenBuiltTwiceWithLaunchScriptIncluded() { - assertThat(this.gradleBuild.build("-PincludeLaunchScript=true", this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(this.gradleBuild.build("-PincludeLaunchScript=true", this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); - } - - @TestTemplate - void notUpToDateWhenLaunchScriptWasNotIncludedAndThenIsIncluded() { - assertThat(this.gradleBuild.scriptProperty("launchScript", "") - .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(this.gradleBuild.scriptProperty("launchScript", "launchScript()") - .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - } - - @TestTemplate - void notUpToDateWhenLaunchScriptWasIncludedAndThenIsNotIncluded() { - assertThat(this.gradleBuild.scriptProperty("launchScript", "launchScript()") - .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(this.gradleBuild.scriptProperty("launchScript", "") - .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - } - - @TestTemplate - void notUpToDateWhenLaunchScriptPropertyChanges() { - assertThat(this.gradleBuild.scriptProperty("launchScriptProperty", "alpha") - .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(this.gradleBuild.scriptProperty("launchScriptProperty", "bravo") - .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); } @TestTemplate void applicationPluginMainClassNameIsUsed() throws IOException { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { assertThat(jarFile.getManifest().getMainAttributes().getValue("Start-Class")) .isEqualTo("com.example.CustomMain"); @@ -185,8 +136,9 @@ void applicationPluginMainClassNameIsUsed() throws IOException { @TestTemplate void springBootExtensionMainClassNameIsUsed() throws IOException { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { assertThat(jarFile.getManifest().getMainAttributes().getValue("Start-Class")) .isEqualTo("com.example.CustomMain"); @@ -195,8 +147,9 @@ void springBootExtensionMainClassNameIsUsed() throws IOException { @TestTemplate void duplicatesAreHandledGracefully() { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @TestTemplate @@ -204,8 +157,9 @@ void developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault() throws IOE File srcMainResources = new File(this.gradleBuild.getProjectDir(), "src/main/resources"); srcMainResources.mkdirs(); new File(srcMainResources, "resource").createNewFile(); - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { Stream libEntryNames = jarFile.stream() .filter((entry) -> !entry.isDirectory()) @@ -222,8 +176,9 @@ void developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault() throws IOE @TestTemplate void developmentOnlyDependenciesCanBeIncludedInTheArchive() throws IOException { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { Stream libEntryNames = jarFile.stream() .filter((entry) -> !entry.isDirectory()) @@ -237,21 +192,16 @@ void developmentOnlyDependenciesCanBeIncludedInTheArchive() throws IOException { @TestTemplate void versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive() throws IOException { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { Stream libEntryNames = jarFile.stream() .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"); } } @@ -260,8 +210,9 @@ void testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault() thr File srcMainResources = new File(this.gradleBuild.getProjectDir(), "src/main/resources"); srcMainResources.mkdirs(); new File(srcMainResources, "resource").createNewFile(); - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { Stream libEntryNames = jarFile.stream() .filter((entry) -> !entry.isDirectory()) @@ -278,8 +229,9 @@ void testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault() thr @TestTemplate void testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive() throws IOException { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { Stream libEntryNames = jarFile.stream() .filter((entry) -> !entry.isDirectory()) @@ -294,9 +246,11 @@ void testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive() throws IOExce 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); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { Stream libEntryNames = jarFile.stream() .filter((entry) -> !entry.isDirectory()) @@ -309,65 +263,75 @@ void jarTypeFilteringIsApplied() throws IOException { @TestTemplate void startClassIsSetByResolvingTheMainClass() throws IOException { copyMainClassApplication(); - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { Attributes mainAttributes = jarFile.getManifest().getMainAttributes(); assertThat(mainAttributes.getValue("Start-Class")) .isEqualTo("com.example." + this.taskName.toLowerCase(Locale.ENGLISH) + ".main.CustomMainClass"); } - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.UP_TO_DATE); + task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); } @TestTemplate void upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered() { - assertThat(this.gradleBuild.scriptProperty("layered", "") + BuildTask task = this.gradleBuild.scriptProperty("layered", "") .build("" + this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(this.gradleBuild.scriptProperty("layered", "layered {}") + .task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = this.gradleBuild.scriptProperty("layered", "layered {}") .build("" + this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); + .task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.UP_TO_DATE); } @TestTemplate void notUpToDateWhenBuiltWithoutLayersAndThenWithLayers() { - assertThat(this.gradleBuild.scriptProperty("layerEnablement", "enabled = false") + BuildTask task = this.gradleBuild.scriptProperty("layerEnablement", "enabled = false") .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(this.gradleBuild.scriptProperty("layerEnablement", "enabled = true") + .task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = this.gradleBuild.scriptProperty("layerEnablement", "enabled = true") .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + .task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @TestTemplate void notUpToDateWhenBuiltWithToolsAndThenWithoutTools() { - assertThat(this.gradleBuild.scriptProperty("includeTools", "") + BuildTask task = this.gradleBuild.scriptProperty("includeTools", "") .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(this.gradleBuild.scriptProperty("includeTools", "includeTools = false") + .task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = this.gradleBuild.scriptProperty("includeTools", "includeTools = false") .build(this.taskName) - .task(":" + this.taskName) - .getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + .task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @TestTemplate void layersWithCustomSourceSet() { - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @TestTemplate void implicitLayers() throws IOException { writeMainClass(); writeResource(); - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Map> indexedLayers; String layerToolsJar = this.libPath + JarModeLibrary.TOOLS.getName(); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { @@ -403,11 +367,15 @@ void implicitLayers() throws IOException { assertThat(indexedLayers.get("application")) .containsExactly(getExpectedApplicationLayerContents(this.classesPath)); BuildResult listLayers = this.gradleBuild.build("listLayers"); - assertThat(listLayers.task(":listLayers").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = listLayers.task(":listLayers"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String listLayersOutput = listLayers.getOutput(); assertThat(new BufferedReader(new StringReader(listLayersOutput)).lines()).containsSequence(layerNames); BuildResult extractLayers = this.gradleBuild.build("extractLayers"); - assertThat(extractLayers.task(":extractLayers").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = extractLayers.task(":extractLayers"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertExtractedLayers(layerNames, indexedLayers); } @@ -418,8 +386,9 @@ void multiModuleImplicitLayers() throws IOException { writeSettingsGradle(); writeMainClass(); writeResource(); - assertThat(this.gradleBuild.build(this.taskName).task(":" + this.taskName).getOutcome()) - .isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = this.gradleBuild.build(this.taskName).task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Map> indexedLayers; String layerToolsJar = this.libPath + JarModeLibrary.TOOLS.getName(); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { @@ -452,11 +421,15 @@ void multiModuleImplicitLayers() throws IOException { .containsExactly(getExpectedApplicationLayerContents(this.classesPath, this.libPath + "alpha-1.2.3.jar", this.libPath + "bravo-1.2.3.jar", this.libPath + "charlie-1.2.3.jar")); BuildResult listLayers = this.gradleBuild.build("listLayers"); - assertThat(listLayers.task(":listLayers").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = listLayers.task(":listLayers"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String listLayersOutput = listLayers.getOutput(); assertThat(new BufferedReader(new StringReader(listLayersOutput)).lines()).containsSequence(layerNames); BuildResult extractLayers = this.gradleBuild.build("extractLayers"); - assertThat(extractLayers.task(":extractLayers").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = extractLayers.task(":extractLayers"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertExtractedLayers(layerNames, indexedLayers); } @@ -465,7 +438,9 @@ void customLayers() throws IOException { writeMainClass(); writeResource(); BuildResult build = this.gradleBuild.build(this.taskName); - assertThat(build.task(":" + this.taskName).getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = build.task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Map> indexedLayers; String layerToolsJar = this.libPath + JarModeLibrary.TOOLS.getName(); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { @@ -498,11 +473,15 @@ void customLayers() throws IOException { appLayer.removeAll(Arrays.asList(appLayerContents)); assertThat(appLayer).containsExactly("org/"); BuildResult listLayers = this.gradleBuild.build("listLayers"); - assertThat(listLayers.task(":listLayers").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = listLayers.task(":listLayers"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String listLayersOutput = listLayers.getOutput(); assertThat(new BufferedReader(new StringReader(listLayersOutput)).lines()).containsSequence(layerNames); BuildResult extractLayers = this.gradleBuild.build("extractLayers"); - assertThat(extractLayers.task(":extractLayers").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = extractLayers.task(":extractLayers"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertExtractedLayers(layerNames, indexedLayers); } @@ -512,7 +491,9 @@ void multiModuleCustomLayers() throws IOException { writeMainClass(); writeResource(); BuildResult build = this.gradleBuild.build(this.taskName); - assertThat(build.task(":" + this.taskName).getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = build.task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); Map> indexedLayers; String layerToolsJar = this.libPath + JarModeLibrary.TOOLS.getName(); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { @@ -554,11 +535,15 @@ void multiModuleCustomLayers() throws IOException { appLayer.removeAll(Arrays.asList(appLayerContents)); assertThat(appLayer).containsExactly("org/"); BuildResult listLayers = this.gradleBuild.build("listLayers"); - assertThat(listLayers.task(":listLayers").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = listLayers.task(":listLayers"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); String listLayersOutput = listLayers.getOutput(); assertThat(new BufferedReader(new StringReader(listLayersOutput)).lines()).containsSequence(layerNames); BuildResult extractLayers = this.gradleBuild.build("extractLayers"); - assertThat(extractLayers.task(":extractLayers").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + task = extractLayers.task(":extractLayers"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertExtractedLayers(layerNames, indexedLayers); } @@ -577,7 +562,9 @@ void classesFromASecondarySourceSetCanBeIncludedInTheArchive() throws IOExceptio throw new RuntimeException(ex); } BuildResult build = this.gradleBuild.build(this.taskName); - assertThat(build.task(":" + this.taskName).getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = build.task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { Stream classesEntryNames = jarFile.stream() .filter((entry) -> !entry.isDirectory()) @@ -591,7 +578,9 @@ void classesFromASecondarySourceSetCanBeIncludedInTheArchive() throws IOExceptio @TestTemplate void javaVersionIsSetInManifest() throws IOException { BuildResult result = this.gradleBuild.build(this.taskName); - assertThat(result.task(":" + this.taskName).getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (JarFile jarFile = new JarFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0])) { assertThat(jarFile.getManifest().getMainAttributes().getValue("Build-Jdk-Spec")).isNotEmpty(); } @@ -600,7 +589,9 @@ void javaVersionIsSetInManifest() throws IOException { @TestTemplate void defaultDirAndFileModesAreUsed() throws IOException { BuildResult result = this.gradleBuild.build(this.taskName); - assertThat(result.task(":" + this.taskName).getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (ZipFile jarFile = ZipFile.builder() .setFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0]) .get()) { @@ -628,7 +619,9 @@ void dirModeAndFileModeAreApplied() throws IOException { "The CopyProcessingSpec.setFileMode(Integer) method has been deprecated", "upgrading_version_8.html#unix_file_permissions_deprecated") .build(this.taskName); - assertThat(result.task(":" + this.taskName).getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":" + this.taskName); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); try (ZipFile jarFile = ZipFile.builder() .setFile(new File(this.gradleBuild.getProjectDir(), "build/libs").listFiles()[0]) .get()) { @@ -681,6 +674,10 @@ private void createDependenciesStarterJar(File location) throws IOException { 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 attributesConfigurer) throws IOException { location.getParentFile().mkdirs(); Manifest manifest = new Manifest(); @@ -780,6 +777,7 @@ private void assertExtractedLayers(List layerNames, Map { List index = indexedLayers.get(name); + assertThat(index).isNotNull(); List unexpected = new ArrayList<>(); for (String file : contents) { if (!isInIndex(index, file)) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java similarity index 90% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java index fe891b76ab8f..5ab4e610a866 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java @@ -23,18 +23,15 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -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; import java.util.LinkedHashSet; 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; @@ -63,9 +60,7 @@ 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; @@ -85,6 +80,7 @@ abstract class AbstractBootArchiveTests { @TempDir + @SuppressWarnings("NullAway.Init") File temp; private final Class taskClass; @@ -283,17 +279,6 @@ void loaderIsWrittenToTheRootOfTheJarWhenUsingThePropertiesLauncher() throws IOE } } - @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 +286,7 @@ void unpackCommentIsAddedToEntryIdentifiedByAPattern() throws IOException { 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,62 +298,11 @@ void unpackCommentIsAddedToEntryIdentifiedByASpec() throws IOException { 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(); } } - @Test - void launchScriptCanBePrepended() throws IOException { - this.task.getMainClass().set("com.example.Main"); - this.task.launchScript(); - executeTask(); - Map properties = new HashMap<>(); - properties.put("initInfoProvides", this.task.getArchiveBaseName().get()); - properties.put("initInfoShortDescription", this.project.getDescription()); - properties.put("initInfoDescription", this.project.getDescription()); - File archiveFile = this.task.getArchiveFile().get().getAsFile(); - assertThat(Files.readAllBytes(archiveFile.toPath())) - .startsWith(new DefaultLaunchScript(null, properties).toByteArray()); - try (ZipFile zipFile = ZipFile.builder().setFile(archiveFile).get()) { - assertThat(zipFile.getEntries().hasMoreElements()).isTrue(); - } - try { - Set permissions = Files.getPosixFilePermissions(archiveFile.toPath()); - assertThat(permissions).contains(PosixFilePermission.OWNER_EXECUTE); - } - catch (UnsupportedOperationException ex) { - // Windows, presumably. Continue - } - } - - @Test - void customLaunchScriptCanBePrepended() throws IOException { - this.task.getMainClass().set("com.example.Main"); - File customScript = new File(this.temp, "custom.script"); - Files.writeString(customScript.toPath(), "custom script", StandardOpenOption.CREATE); - this.task.launchScript((configuration) -> configuration.setScript(customScript)); - executeTask(); - Path path = this.task.getArchiveFile().get().getAsFile().toPath(); - assertThat(Files.readString(path, StandardCharsets.ISO_8859_1)).startsWith("custom script"); - } - - @Test - void launchScriptInitInfoPropertiesCanBeCustomized() throws IOException { - this.task.getMainClass().set("com.example.Main"); - this.task.launchScript((configuration) -> { - configuration.getProperties().put("initInfoProvides", "provides"); - configuration.getProperties().put("initInfoShortDescription", "short description"); - configuration.getProperties().put("initInfoDescription", "description"); - }); - executeTask(); - Path path = this.task.getArchiveFile().get().getAsFile().toPath(); - String content = Files.readString(path, StandardCharsets.ISO_8859_1); - assertThat(content).containsSequence("Provides: provides"); - assertThat(content).containsSequence("Short-Description: short description"); - assertThat(content).containsSequence("Description: description"); - } - @Test void customMainClassInTheManifestIsHonored() throws IOException { this.task.getMainClass().set("com.example.Main"); @@ -419,23 +353,46 @@ void constantTimestampMatchesGradleInternalTimestamp() { } @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 textFiles = new ArrayList<>(); + List files = new ArrayList<>(); try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { Enumeration 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 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 +632,19 @@ protected List getEntryNames(JarFile jarFile) { return entryNames; } + protected File newFiles(String... names) throws IOException { + File dir = new File(this.temp, UUID.randomUUID().toString()); + dir.mkdir(); + List 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(); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java similarity index 98% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java index 7065a07622ce..0eef7843ef36 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java @@ -30,8 +30,8 @@ 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; @@ -201,7 +201,9 @@ void whenNoRunImageIsConfiguredThenRequestUsesDefaultRunImage() { @Test void whenRunImageIsConfiguredThenRequestUsesSpecifiedRunImage() { this.buildImage.getRunImage().set("example.com/test/run:1.0"); - assertThat(this.buildImage.createRequest().getRunImage().getName()).isEqualTo("test/run"); + ImageReference runImage = this.buildImage.createRequest().getRunImage(); + assertThat(runImage).isNotNull(); + assertThat(runImage.getName()).isEqualTo("test/run"); } @Test diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests.java new file mode 100644 index 000000000000..bc2045ca6eb7 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests.java @@ -0,0 +1,87 @@ +/* + * 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.gradle.tasks.bundling; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Set; +import java.util.TreeSet; + +import org.gradle.testkit.runner.BuildResult; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.TestTemplate; + +import org.springframework.boot.gradle.junit.GradleCompatibility; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for {@link BootJar}. + * + * @author Andy Wilkinson + * @author Madhura Bhave + * @author Paddy Drury + */ +@GradleCompatibility(configurationCache = true) +class BootJarIntegrationTests extends AbstractBootArchiveIntegrationTests { + + BootJarIntegrationTests() { + super("bootJar", "BOOT-INF/lib/", "BOOT-INF/classes/", "BOOT-INF/"); + } + + @TestTemplate + void whenAResolvableCopyOfAnUnresolvableConfigurationIsResolvedThenResolutionSucceeds() { + Assumptions.assumeTrue(this.gradleBuild.gradleVersionIsLessThan("9.0-milestone-1")); + this.gradleBuild.expectDeprecationWarningsWithAtLeastVersion("8.0").build("build"); + } + + @TestTemplate + void packagedApplicationClasspath() throws IOException { + copyClasspathApplication(); + BuildResult result = this.gradleBuild.build("launch"); + String output = result.getOutput(); + 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. "); + } + + @TestTemplate + void explodedApplicationClasspath() throws IOException { + copyClasspathApplication(); + BuildResult result = this.gradleBuild.build("launch"); + String output = result.getOutput(); + 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. "); + } + + private void copyClasspathApplication() throws IOException { + copyApplication("classpath"); + } + + @Override + String[] getExpectedApplicationLayerContents(String... additionalFiles) { + Set contents = new TreeSet<>(Arrays.asList(additionalFiles)); + contents.addAll(Arrays.asList("BOOT-INF/classpath.idx", "BOOT-INF/layers.idx", "META-INF/")); + return contents.toArray(new String[0]); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/DefaultTimeZoneOffsetTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/DefaultTimeZoneOffsetTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/DefaultTimeZoneOffsetTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/DefaultTimeZoneOffsetTests.java diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/DockerSpecTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/DockerSpecTests.java new file mode 100644 index 000000000000..645248e311d9 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/DockerSpecTests.java @@ -0,0 +1,258 @@ +/* + * 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.gradle.tasks.bundling; + +import java.io.File; +import java.util.Base64; + +import org.gradle.api.GradleException; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import org.springframework.boot.buildpack.platform.build.BuilderDockerConfiguration; +import org.springframework.boot.buildpack.platform.docker.configuration.DockerConnectionConfiguration; +import org.springframework.boot.buildpack.platform.docker.configuration.DockerRegistryAuthentication; +import org.springframework.boot.gradle.junit.GradleProjectBuilder; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +/** + * Tests for {@link DockerSpec}. + * + * @author Wei Jiang + * @author Scott Frederick + */ +class DockerSpecTests { + + private DockerSpec dockerSpec; + + @BeforeEach + void prepareDockerSpec(@TempDir File temp) { + this.dockerSpec = GradleProjectBuilder.builder() + .withProjectDir(temp) + .build() + .getObjects() + .newInstance(DockerSpec.class); + } + + @Test + void asDockerConfigurationWithDefaults() { + BuilderDockerConfiguration dockerConfiguration = this.dockerSpec.asDockerConfiguration(); + assertThat(dockerConfiguration.connection()).isNull(); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + assertThat(decoded(publishRegistryAuthentication.getAuthHeader())).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithHostConfiguration() { + this.dockerSpec.getHost().set("docker.example.com"); + this.dockerSpec.getTlsVerify().set(true); + this.dockerSpec.getCertPath().set("/tmp/ca-cert"); + BuilderDockerConfiguration dockerConfiguration = this.dockerSpec.asDockerConfiguration(); + DockerConnectionConfiguration.Host host = (DockerConnectionConfiguration.Host) dockerConfiguration.connection(); + assertThat(host).isNotNull(); + assertThat(host.address()).isEqualTo("docker.example.com"); + assertThat(host.secure()).isTrue(); + assertThat(host.certificatePath()).isEqualTo("/tmp/ca-cert"); + assertThat(dockerConfiguration.bindHostToBuilder()).isFalse(); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + assertThat(decoded(publishRegistryAuthentication.getAuthHeader())).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithHostConfigurationNoTlsVerify() { + this.dockerSpec.getHost().set("docker.example.com"); + BuilderDockerConfiguration dockerConfiguration = this.dockerSpec.asDockerConfiguration(); + DockerConnectionConfiguration.Host host = (DockerConnectionConfiguration.Host) dockerConfiguration.connection(); + assertThat(host).isNotNull(); + assertThat(host.address()).isEqualTo("docker.example.com"); + assertThat(host.secure()).isFalse(); + assertThat(host.certificatePath()).isNull(); + assertThat(dockerConfiguration.bindHostToBuilder()).isFalse(); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + assertThat(decoded(publishRegistryAuthentication.getAuthHeader())).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithContextConfiguration() { + this.dockerSpec.getContext().set("test-context"); + BuilderDockerConfiguration dockerConfiguration = this.dockerSpec.asDockerConfiguration(); + DockerConnectionConfiguration.Context host = (DockerConnectionConfiguration.Context) dockerConfiguration + .connection(); + assertThat(host).isNotNull(); + assertThat(host.context()).isEqualTo("test-context"); + assertThat(dockerConfiguration.bindHostToBuilder()).isFalse(); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + assertThat(decoded(publishRegistryAuthentication.getAuthHeader())).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithHostAndContextFails() { + this.dockerSpec.getContext().set("test-context"); + this.dockerSpec.getHost().set("docker.example.com"); + assertThatExceptionOfType(GradleException.class).isThrownBy(this.dockerSpec::asDockerConfiguration) + .withMessageContaining("Invalid Docker configuration"); + } + + @Test + void asDockerConfigurationWithBindHostToBuilder() { + this.dockerSpec.getHost().set("docker.example.com"); + this.dockerSpec.getBindHostToBuilder().set(true); + BuilderDockerConfiguration dockerConfiguration = this.dockerSpec.asDockerConfiguration(); + DockerConnectionConfiguration.Host host = (DockerConnectionConfiguration.Host) dockerConfiguration.connection(); + assertThat(host).isNotNull(); + assertThat(host.address()).isEqualTo("docker.example.com"); + assertThat(host.secure()).isFalse(); + assertThat(host.certificatePath()).isNull(); + assertThat(dockerConfiguration.bindHostToBuilder()).isTrue(); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + assertThat(decoded(publishRegistryAuthentication.getAuthHeader())).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithUserAuth() { + this.dockerSpec.builderRegistry((registry) -> { + registry.getUsername().set("user1"); + registry.getPassword().set("secret1"); + registry.getUrl().set("https://docker1.example.com"); + registry.getEmail().set("docker1@example.com"); + }); + this.dockerSpec.publishRegistry((registry) -> { + registry.getUsername().set("user2"); + registry.getPassword().set("secret2"); + registry.getUrl().set("https://docker2.example.com"); + registry.getEmail().set("docker2@example.com"); + }); + BuilderDockerConfiguration dockerConfiguration = this.dockerSpec.asDockerConfiguration(); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(decoded(builderRegistryAuthentication.getAuthHeader())).contains("\"username\" : \"user1\"") + .contains("\"password\" : \"secret1\"") + .contains("\"email\" : \"docker1@example.com\"") + .contains("\"serveraddress\" : \"https://docker1.example.com\""); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + assertThat(decoded(publishRegistryAuthentication.getAuthHeader())).contains("\"username\" : \"user2\"") + .contains("\"password\" : \"secret2\"") + .contains("\"email\" : \"docker2@example.com\"") + .contains("\"serveraddress\" : \"https://docker2.example.com\""); + assertThat(dockerConfiguration.connection()).isNull(); + } + + @Test + void asDockerConfigurationWithIncompleteBuilderUserAuthFails() { + this.dockerSpec.builderRegistry((registry) -> { + registry.getUsername().set("user1"); + registry.getUrl().set("https://docker1.example.com"); + registry.getEmail().set("docker1@example.com"); + }); + assertThatExceptionOfType(GradleException.class).isThrownBy(this.dockerSpec::asDockerConfiguration) + .withMessageContaining("Invalid Docker builder registry configuration"); + } + + @Test + void asDockerConfigurationWithIncompletePublishUserAuthFails() { + this.dockerSpec.publishRegistry((registry) -> { + registry.getUsername().set("user2"); + registry.getUrl().set("https://docker2.example.com"); + registry.getEmail().set("docker2@example.com"); + }); + assertThatExceptionOfType(GradleException.class).isThrownBy(this.dockerSpec::asDockerConfiguration) + .withMessageContaining("Invalid Docker publish registry configuration"); + } + + @Test + void asDockerConfigurationWithTokenAuth() { + this.dockerSpec.builderRegistry((registry) -> registry.getToken().set("token1")); + this.dockerSpec.publishRegistry((registry) -> registry.getToken().set("token2")); + BuilderDockerConfiguration dockerConfiguration = this.dockerSpec.asDockerConfiguration(); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(decoded(builderRegistryAuthentication.getAuthHeader())).contains("\"identitytoken\" : \"token1\""); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + assertThat(decoded(publishRegistryAuthentication.getAuthHeader())).contains("\"identitytoken\" : \"token2\""); + } + + @Test + void asDockerConfigurationWithUserAndTokenAuthFails() { + this.dockerSpec.builderRegistry((registry) -> { + registry.getUsername().set("user"); + registry.getPassword().set("secret"); + registry.getToken().set("token"); + }); + assertThatExceptionOfType(GradleException.class).isThrownBy(this.dockerSpec::asDockerConfiguration) + .withMessageContaining("Invalid Docker builder registry configuration"); + } + + @Nullable String decoded(@Nullable String value) { + return (value != null) ? new String(Base64.getDecoder().decode(value)) : value; + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests.java similarity index 86% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests.java index 793396968b9b..23f40137c227 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests.java @@ -19,6 +19,7 @@ import java.io.File; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.TestTemplate; @@ -36,12 +37,15 @@ @GradleCompatibility class MavenPublishingIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate void bootJarCanBePublished() { BuildResult result = this.gradleBuild.build("publish"); - assertThat(result.task(":publish").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":publish"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(artifactWithSuffix("jar")).isFile(); assertThat(artifactWithSuffix("pom")).is(pomWith().groupId("com.example") .artifactId(this.gradleBuild.getProjectDir().getName()) @@ -53,7 +57,9 @@ void bootJarCanBePublished() { @TestTemplate void bootWarCanBePublished() { BuildResult result = this.gradleBuild.build("publish"); - assertThat(result.task(":publish").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":publish"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(artifactWithSuffix("war")).isFile(); assertThat(artifactWithSuffix("pom")).is(pomWith().groupId("com.example") .artifactId(this.gradleBuild.getProjectDir().getName()) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/PomCondition.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/PomCondition.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/PomCondition.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/PomCondition.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java similarity index 80% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java index 359a6e18078a..a39a8255d716 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java @@ -26,6 +26,7 @@ import org.assertj.core.api.Assumptions; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.gradle.util.GradleVersion; import org.junit.jupiter.api.TestTemplate; @@ -44,6 +45,7 @@ @GradleCompatibility(configurationCache = true) class BootRunIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate @@ -51,7 +53,9 @@ void basicExecution() throws IOException { copyClasspathApplication(); new File(this.gradleBuild.getProjectDir(), "src/main/resources").mkdirs(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("1. " + canonicalPathOf("build/classes/java/main")); assertThat(result.getOutput()).contains("2. " + canonicalPathOf("build/resources/main")); assertThat(result.getOutput()).doesNotContain(canonicalPathOf("src/main/resources")); @@ -61,7 +65,9 @@ void basicExecution() throws IOException { void sourceResourcesCanBeUsed() throws IOException { copyClasspathApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("1. " + canonicalPathOf("src/main/resources")); assertThat(result.getOutput()).contains("2. " + canonicalPathOf("build/classes/java/main")); assertThat(result.getOutput()).doesNotContain(canonicalPathOf("build/resources/main")); @@ -71,7 +77,9 @@ void sourceResourcesCanBeUsed() throws IOException { void springBootExtensionMainClassNameIsUsed() throws IOException { copyMainClassApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("com.example.bootrun.main.CustomMainClass"); } @@ -79,7 +87,9 @@ void springBootExtensionMainClassNameIsUsed() throws IOException { void applicationPluginMainClassNameIsUsed() throws IOException { copyMainClassApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("com.example.bootrun.main.CustomMainClass"); } @@ -87,7 +97,9 @@ void applicationPluginMainClassNameIsUsed() throws IOException { void applicationPluginMainClassNameIsNotUsedWhenItIsNull() throws IOException { copyClasspathApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()) .contains("Main class name = com.example.bootrun.classpath.BootRunClasspathApplication"); } @@ -96,7 +108,9 @@ void applicationPluginMainClassNameIsNotUsedWhenItIsNull() throws IOException { void defaultJvmArgs() throws IOException { copyJvmArgsApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("-XX:TieredStopAtLevel=1"); } @@ -104,7 +118,9 @@ void defaultJvmArgs() throws IOException { void optimizedLaunchDisabledJvmArgs() throws IOException { copyJvmArgsApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).doesNotContain("-Xverify:none").doesNotContain("-XX:TieredStopAtLevel=1"); } @@ -119,7 +135,9 @@ void applicationPluginJvmArgumentsAreUsed() throws IOException { } copyJvmArgsApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("-Dcom.bar=baz") .contains("-Dcom.foo=bar") .contains("-XX:TieredStopAtLevel=1"); @@ -132,7 +150,9 @@ void jarTypeFilteringIsAppliedToTheClasspath() throws IOException { createDependenciesStarterJar(new File(flatDirRepository, "starter.jar")); createStandardJar(new File(flatDirRepository, "standard.jar")); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("standard.jar").doesNotContain("starter.jar"); } @@ -142,7 +162,9 @@ void classesFromASecondarySourceSetCanBeOnTheClasspath() throws IOException { output.mkdirs(); FileSystemUtils.copyRecursively(new File("src/test/java/com/example/bootrun/main"), output); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("com.example.bootrun.main.CustomMainClass"); } @@ -150,7 +172,9 @@ void classesFromASecondarySourceSetCanBeOnTheClasspath() throws IOException { void developmentOnlyDependenciesAreOnTheClasspath() throws IOException { copyClasspathApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("commons-lang3-3.12.0.jar"); } @@ -158,7 +182,9 @@ void developmentOnlyDependenciesAreOnTheClasspath() throws IOException { void testAndDevelopmentOnlyDependenciesAreOnTheClasspath() throws IOException { copyClasspathApplication(); BuildResult result = this.gradleBuild.build("bootRun"); - assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("commons-lang3-3.12.0.jar"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java similarity index 83% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java rename to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java index 6bea92302208..28844b05e359 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests.java @@ -26,6 +26,7 @@ import org.assertj.core.api.Assumptions; import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.BuildTask; import org.gradle.testkit.runner.TaskOutcome; import org.gradle.util.GradleVersion; import org.junit.jupiter.api.TestTemplate; @@ -44,13 +45,16 @@ @GradleCompatibility(configurationCache = true) class BootTestRunIntegrationTests { + @SuppressWarnings("NullAway.Init") GradleBuild gradleBuild; @TestTemplate void basicExecution() throws IOException { copyClasspathApplication(); BuildResult result = this.gradleBuild.build("bootTestRun"); - assertThat(result.task(":bootTestRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootTestRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("1. " + canonicalPathOf("build/classes/java/test")) .contains("2. " + canonicalPathOf("build/resources/test")) .contains("3. " + canonicalPathOf("build/classes/java/main")) @@ -61,7 +65,9 @@ void basicExecution() throws IOException { void defaultJvmArgs() throws IOException { copyJvmArgsApplication(); BuildResult result = this.gradleBuild.build("bootTestRun"); - assertThat(result.task(":bootTestRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootTestRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("-XX:TieredStopAtLevel=1"); } @@ -69,7 +75,9 @@ void defaultJvmArgs() throws IOException { void optimizedLaunchDisabledJvmArgs() throws IOException { copyJvmArgsApplication(); BuildResult result = this.gradleBuild.build("bootTestRun"); - assertThat(result.task(":bootTestRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootTestRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).doesNotContain("-Xverify:none").doesNotContain("-XX:TieredStopAtLevel=1"); } @@ -84,7 +92,9 @@ void applicationPluginJvmArgumentsAreUsed() throws IOException { } copyJvmArgsApplication(); BuildResult result = this.gradleBuild.build("bootTestRun"); - assertThat(result.task(":bootTestRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootTestRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("-Dcom.bar=baz") .contains("-Dcom.foo=bar") .contains("-XX:TieredStopAtLevel=1"); @@ -97,7 +107,9 @@ void jarTypeFilteringIsAppliedToTheClasspath() throws IOException { createDependenciesStarterJar(new File(flatDirRepository, "starter.jar")); createStandardJar(new File(flatDirRepository, "standard.jar")); BuildResult result = this.gradleBuild.build("bootTestRun"); - assertThat(result.task(":bootTestRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootTestRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("standard.jar").doesNotContain("starter.jar"); } @@ -105,7 +117,9 @@ void jarTypeFilteringIsAppliedToTheClasspath() throws IOException { void failsGracefullyWhenNoTestMainMethodIsFound() throws IOException { copyApplication("nomain"); BuildResult result = this.gradleBuild.buildAndFail("bootTestRun"); - assertThat(result.task(":bootTestRun").getOutcome()).isEqualTo(TaskOutcome.FAILED); + BuildTask task = result.task(":bootTestRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.FAILED); if (this.gradleBuild.isConfigurationCache() && this.gradleBuild.gradleVersionIsAtLeast("8.0")) { assertThat(result.getOutput()) .contains("Main class name has not been configured and it could not be resolved from classpath"); @@ -121,7 +135,9 @@ void failsGracefullyWhenNoTestMainMethodIsFound() throws IOException { void developmentOnlyDependenciesAreNotOnTheClasspath() throws IOException { copyClasspathApplication(); BuildResult result = this.gradleBuild.build("bootTestRun"); - assertThat(result.task(":bootTestRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootTestRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).doesNotContain("commons-lang3-3.12.0.jar"); } @@ -129,7 +145,9 @@ void developmentOnlyDependenciesAreNotOnTheClasspath() throws IOException { void testAndDevelopmentOnlyDependenciesAreOnTheClasspath() throws IOException { copyClasspathApplication(); BuildResult result = this.gradleBuild.build("bootTestRun"); - assertThat(result.task(":bootTestRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + BuildTask task = result.task(":bootTestRun"); + assertThat(task).isNotNull(); + assertThat(task.getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("commons-lang3-3.12.0.jar"); } diff --git a/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/PluginClasspathGradleBuild.java b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/PluginClasspathGradleBuild.java new file mode 100644 index 000000000000..b064ba83f0e1 --- /dev/null +++ b/build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/PluginClasspathGradleBuild.java @@ -0,0 +1,146 @@ +/* + * 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.gradle.testkit; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonView; +import com.sun.jna.Platform; +import io.spring.gradle.dependencymanagement.DependencyManagementPlugin; +import org.antlr.v4.runtime.Lexer; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.hc.client5.http.io.HttpClientConnectionManager; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http2.HttpVersionPolicy; +import org.cyclonedx.gradle.CyclonedxPlugin; +import org.gradle.testkit.runner.GradleRunner; +import org.jetbrains.kotlin.gradle.fus.BuildUidService; +import org.jetbrains.kotlin.gradle.model.KotlinProject; +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; +import org.springframework.boot.loader.tools.Layers; +import org.springframework.boot.testsupport.BuildOutput; +import org.springframework.boot.testsupport.gradle.testkit.Dsl; +import org.springframework.boot.testsupport.gradle.testkit.GradleBuild; + +/** + * Custom {@link GradleBuild} that configures the + * {@link GradleRunner#withPluginClasspath(Iterable) plugin classpath}. + * + * @author Andy Wilkinson + * @author Scott Frederick + */ +public class PluginClasspathGradleBuild extends GradleBuild { + + private boolean kotlin; + + public PluginClasspathGradleBuild(BuildOutput buildOutput) { + super(buildOutput); + } + + public PluginClasspathGradleBuild(BuildOutput buildOutput, Dsl dsl) { + super(buildOutput, dsl); + } + + public PluginClasspathGradleBuild kotlin() { + this.kotlin = true; + return this; + } + + @Override + public GradleRunner prepareRunner(String... arguments) throws IOException { + return super.prepareRunner(arguments).withPluginClasspath(pluginClasspath()); + } + + private List pluginClasspath() { + List classpath = new ArrayList<>(); + classpath.add(new File("bin/main")); + classpath.add(new File("build/classes/java/main")); + classpath.add(new File("build/resources/main")); + classpath.add(new File(pathOfJarContaining(Layers.class))); + classpath.add(new File(pathOfJarContaining(ClassVisitor.class))); + classpath.add(new File(pathOfJarContaining(DependencyManagementPlugin.class))); + if (this.kotlin) { + classpath.add(new File(pathOfJarContaining("org.jetbrains.kotlin.cli.common.PropertiesKt"))); + classpath.add(new File(pathOfJarContaining(KotlinProject.class))); + classpath.add(new File(pathOfJarContaining(KotlinToolingVersion.class))); + classpath.add(new File(pathOfJarContaining("org.jetbrains.kotlin.build.report.metrics.BuildTime"))); + classpath.add(new File(pathOfJarContaining("org.jetbrains.kotlin.buildtools.api.CompilationService"))); + classpath.add(new File(pathOfJarContaining("org.jetbrains.kotlin.daemon.client.KotlinCompilerClient"))); + classpath.add(new File(pathOfJarContaining("org.jetbrains.kotlin.konan.library.KonanLibrary"))); + classpath.add(new File(pathOfJarContaining(KotlinCompilerPluginSupportPlugin.class))); + classpath.add(new File(pathOfJarContaining(LanguageSettings.class))); + classpath.add(new File(pathOfJarContaining(BuildUidService.class))); + } + classpath.add(new File(pathOfJarContaining("org.apache.commons.lang3.ArrayFill"))); + classpath.add(new File(pathOfJarContaining("org.apache.commons.io.Charsets"))); + classpath.add(new File(pathOfJarContaining(ArchiveEntry.class))); + classpath.add(new File(pathOfJarContaining(BuildRequest.class))); + 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(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))); + classpath.add(new File(pathOfJarContaining(Toml.class))); + classpath.add(new File(pathOfJarContaining(Lexer.class))); + classpath.add(new File(pathOfJarContaining("org.graalvm.buildtools.gradle.NativeImagePlugin"))); + classpath.add(new File(pathOfJarContaining("org.graalvm.reachability.GraalVMReachabilityMetadataRepository"))); + classpath.add(new File(pathOfJarContaining("org.graalvm.buildtools.utils.SharedConstants"))); + // Cyclonedx dependencies + classpath.add(new File(pathOfJarContaining(CyclonedxPlugin.class))); + classpath.add(new File(pathOfJarContaining("com.ctc.wstx.api.WriterConfig"))); + classpath.add(new File(pathOfJarContaining("com.fasterxml.jackson.core.Versioned"))); + classpath.add(new File(pathOfJarContaining("com.fasterxml.jackson.databind.JsonSerializer"))); + classpath.add(new File(pathOfJarContaining("com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator"))); + classpath.add(new File(pathOfJarContaining("com.github.packageurl.MalformedPackageURLException"))); + classpath.add(new File(pathOfJarContaining("com.google.common.collect.ImmutableMap"))); + classpath.add(new File(pathOfJarContaining("com.networknt.schema.resource.SchemaMappers"))); + classpath.add(new File(pathOfJarContaining("org.apache.commons.collections4.CollectionUtils"))); + classpath.add(new File(pathOfJarContaining("org.apache.maven.model.building.ModelBuildingException"))); + classpath.add(new File(pathOfJarContaining("org.codehaus.plexus.util.xml.pull.XmlPullParserException"))); + classpath.add(new File(pathOfJarContaining("org.codehaus.stax2.ri.Stax2WriterAdapter"))); + classpath.add(new File(pathOfJarContaining("org.cyclonedx.model.ExternalReference"))); + return classpath; + } + + private String pathOfJarContaining(String className) { + try { + return pathOfJarContaining(Class.forName(className)); + } + catch (ClassNotFoundException ex) { + throw new IllegalArgumentException(ex); + } + } + + private String pathOfJarContaining(Class type) { + return type.getProtectionDomain().getCodeSource().getLocation().getPath(); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-additionalProperties.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-additionalProperties.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-additionalProperties.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-additionalProperties.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-basicJar.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-basicJar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-basicJar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-basicJar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-basicWar.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-basicWar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-basicWar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-basicWar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-classesDependency.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-classesDependency.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-classesDependency.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-classesDependency.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-jarWithCustomName.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-jarWithCustomName.gradle similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-jarWithCustomName.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-jarWithCustomName.gradle index e5ecce4915a4..317ff42223c3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-jarWithCustomName.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-jarWithCustomName.gradle @@ -29,7 +29,7 @@ bootJar { baseName = 'foo' } else { - archiveBaseName = 'foo' + archiveBaseName = 'foo' } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-warWithCustomName.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-warWithCustomName.gradle similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-warWithCustomName.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-warWithCustomName.gradle index a4af7af14177..e4bf5e51a890 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-warWithCustomName.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/dsl/BuildInfoDslIntegrationTests-warWithCustomName.gradle @@ -29,7 +29,7 @@ bootWar { baseName = 'foo' } else { - archiveBaseName = 'foo' + archiveBaseName = 'foo' } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-applicationNameCanBeUsedToCustomizeDistributionName.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-applicationNameCanBeUsedToCustomizeDistributionName.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-applicationNameCanBeUsedToCustomizeDistributionName.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-applicationNameCanBeUsedToCustomizeDistributionName.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-scriptsHaveCorrectPermissions.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-scriptsHaveCorrectPermissions.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-scriptsHaveCorrectPermissions.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-scriptsHaveCorrectPermissions.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-tarDistributionForJarCanBeBuilt.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-tarDistributionForJarCanBeBuilt.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-tarDistributionForJarCanBeBuilt.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-tarDistributionForJarCanBeBuilt.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-tarDistributionForWarCanBeBuilt.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-tarDistributionForWarCanBeBuilt.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-tarDistributionForWarCanBeBuilt.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-tarDistributionForWarCanBeBuilt.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-zipDistributionForJarCanBeBuilt.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-zipDistributionForJarCanBeBuilt.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-zipDistributionForJarCanBeBuilt.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-zipDistributionForJarCanBeBuilt.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-zipDistributionForWarCanBeBuilt.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-zipDistributionForWarCanBeBuilt.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-zipDistributionForWarCanBeBuilt.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-zipDistributionForWarCanBeBuilt.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/CycloneDxPluginActionIntegrationTests-sbomIsIncludedInUberJar.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/CyclonedxPluginActionIntegrationTests-sbomIsIncludedInUberJar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/CycloneDxPluginActionIntegrationTests-sbomIsIncludedInUberJar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/CyclonedxPluginActionIntegrationTests-sbomIsIncludedInUberJar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/CycloneDxPluginActionIntegrationTests-sbomIsIncludedInUberWar.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/CyclonedxPluginActionIntegrationTests-sbomIsIncludedInUberWar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/CycloneDxPluginActionIntegrationTests-sbomIsIncludedInUberWar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/CyclonedxPluginActionIntegrationTests-sbomIsIncludedInUberWar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests-helpfulErrorWhenVersionlessDependencyFailsToResolve.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests-helpfulErrorWhenVersionlessDependencyFailsToResolve.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests-helpfulErrorWhenVersionlessDependencyFailsToResolve.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests-helpfulErrorWhenVersionlessDependencyFailsToResolve.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/DependencyManagementPluginActionIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-additionalMetadataLocationsConfiguredWhenProcessorIsPresent.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-additionalMetadataLocationsConfiguredWhenProcessorIsPresent.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-additionalMetadataLocationsConfiguredWhenProcessorIsPresent.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-additionalMetadataLocationsConfiguredWhenProcessorIsPresent.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-additionalMetadataLocationsNotConfiguredWhenProcessorIsAbsent.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-additionalMetadataLocationsNotConfiguredWhenProcessorIsAbsent.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-additionalMetadataLocationsNotConfiguredWhenProcessorIsAbsent.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-additionalMetadataLocationsNotConfiguredWhenProcessorIsAbsent.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootJarTask.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootJarTask.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootJarTask.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootJarTask.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootRunTask.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootRunTask.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootRunTask.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootRunTask.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootTestRunTask.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootTestRunTask.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootTestRunTask.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesBootTestRunTask.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesDevelopmentOnlyConfiguration.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesDevelopmentOnlyConfiguration.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesDevelopmentOnlyConfiguration.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesDevelopmentOnlyConfiguration.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesTestAndDevelopmentOnlyConfiguration.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesTestAndDevelopmentOnlyConfiguration.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesTestAndDevelopmentOnlyConfiguration.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-applyingJavaPluginCreatesTestAndDevelopmentOnlyConfiguration.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-assembleRunsBootJarAndJar.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-assembleRunsBootJarAndJar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-assembleRunsBootJarAndJar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-assembleRunsBootJarAndJar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-compileClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-compileClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-compileClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-compileClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-compileClasspathDoesNotIncludeTestAndDevelopmentOnlyDependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-compileClasspathDoesNotIncludeTestAndDevelopmentOnlyDependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-compileClasspathDoesNotIncludeTestAndDevelopmentOnlyDependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-compileClasspathDoesNotIncludeTestAndDevelopmentOnlyDependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-errorMessageIsHelpfulWhenMainClassCannotBeResolved.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-errorMessageIsHelpfulWhenMainClassCannotBeResolved.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-errorMessageIsHelpfulWhenMainClassCannotBeResolved.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-errorMessageIsHelpfulWhenMainClassCannotBeResolved.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksCanOverrideDefaultParametersCompilerFlag.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksCanOverrideDefaultParametersCompilerFlag.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksCanOverrideDefaultParametersCompilerFlag.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksCanOverrideDefaultParametersCompilerFlag.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersAndAdditionalCompilerFlags.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersAndAdditionalCompilerFlags.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersAndAdditionalCompilerFlags.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersAndAdditionalCompilerFlags.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersCompilerFlagByDefault.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersCompilerFlagByDefault.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersCompilerFlagByDefault.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersCompilerFlagByDefault.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseUtf8Encoding.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseUtf8Encoding.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseUtf8Encoding.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseUtf8Encoding.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootJarTaskWithoutJavaPluginApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootJarTaskWithoutJavaPluginApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootJarTaskWithoutJavaPluginApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootJarTaskWithoutJavaPluginApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootRunTaskWithoutJavaPluginApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootRunTaskWithoutJavaPluginApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootRunTaskWithoutJavaPluginApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootRunTaskWithoutJavaPluginApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootTestRunTaskWithoutJavaPluginApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootTestRunTaskWithoutJavaPluginApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootTestRunTaskWithoutJavaPluginApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-noBootTestRunTaskWithoutJavaPluginApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithAttributesThatMatchRuntimeClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithAttributesThatMatchRuntimeClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithAttributesThatMatchRuntimeClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithAttributesThatMatchRuntimeClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithResolvabilityAndConsumabilityThatMatchesRuntimeClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithResolvabilityAndConsumabilityThatMatchesRuntimeClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithResolvabilityAndConsumabilityThatMatchesRuntimeClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithResolvabilityAndConsumabilityThatMatchesRuntimeClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-runtimeClasspathIncludesDevelopmentOnlyDependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-runtimeClasspathIncludesDevelopmentOnlyDependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-runtimeClasspathIncludesDevelopmentOnlyDependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-runtimeClasspathIncludesDevelopmentOnlyDependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-runtimeClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-runtimeClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-runtimeClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-runtimeClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testCompileClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testCompileClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testCompileClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testCompileClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testCompileClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testCompileClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testCompileClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testCompileClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testRuntimeClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testRuntimeClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testRuntimeClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testRuntimeClasspathDoesNotIncludeDevelopmentOnlyDependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testRuntimeClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testRuntimeClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testRuntimeClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-testRuntimeClasspathIncludesTestAndDevelopmentOnlyDependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-compileAotJavaHasTransitiveRuntimeDependenciesOnItsClasspathWhenUsingKotlin.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-compileAotJavaHasTransitiveRuntimeDependenciesOnItsClasspathWhenUsingKotlin.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-compileAotJavaHasTransitiveRuntimeDependenciesOnItsClasspathWhenUsingKotlin.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-compileAotJavaHasTransitiveRuntimeDependenciesOnItsClasspathWhenUsingKotlin.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-compileAotTestJavaHasTransitiveRuntimeDependenciesOnItsClasspathWhenUsingKotlin.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-compileAotTestJavaHasTransitiveRuntimeDependenciesOnItsClasspathWhenUsingKotlin.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-compileAotTestJavaHasTransitiveRuntimeDependenciesOnItsClasspathWhenUsingKotlin.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-compileAotTestJavaHasTransitiveRuntimeDependenciesOnItsClasspathWhenUsingKotlin.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle similarity index 82% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle index df9f13ebf7b5..e864b67d20e2 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle @@ -20,16 +20,18 @@ plugins { apply plugin: 'org.jetbrains.kotlin.jvm' -import org.jetbrains.kotlin.gradle.dsl.KotlinCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile tasks.withType(KotlinCompile) { - kotlinOptions.javaParameters = false + compilerOptions { + javaParameters = false + } } task('kotlinCompileTasksJavaParameters') { doFirst { tasks.withType(KotlinCompile) { - println "${name} java parameters: ${kotlinOptions.javaParameters}" + println "${name} java parameters: ${compilerOptions.javaParameters.get()}" } } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle similarity index 86% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle index 54d36c8b7011..8c14c3423e27 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle @@ -20,12 +20,12 @@ plugins { apply plugin: 'org.jetbrains.kotlin.jvm' -import org.jetbrains.kotlin.gradle.dsl.KotlinCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile task('kotlinCompileTasksJavaParameters') { doFirst { tasks.withType(KotlinCompile) { - println "${name} java parameters: ${kotlinOptions.javaParameters}" + println "${name} java parameters: ${compilerOptions.javaParameters.get()}" } } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinVersionPropertyIsSet.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinVersionPropertyIsSet.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinVersionPropertyIsSet.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinVersionPropertyIsSet.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-noKotlinVersionPropertyWithoutKotlinPlugin.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-noKotlinVersionPropertyWithoutKotlinPlugin.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-noKotlinVersionPropertyWithoutKotlinPlugin.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-noKotlinVersionPropertyWithoutKotlinPlugin.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/MavenPluginActionIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/MavenPluginActionIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/MavenPluginActionIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/MavenPluginActionIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-applyingNativeImagePluginAppliesAotPlugin.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-applyingNativeImagePluginAppliesAotPlugin.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-applyingNativeImagePluginAppliesAotPlugin.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-applyingNativeImagePluginAppliesAotPlugin.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotProcessingAreOnTheNativeImageClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotProcessingAreOnTheNativeImageClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotProcessingAreOnTheNativeImageClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotProcessingAreOnTheNativeImageClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath.gradle similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath.gradle index cd47e3fc4c8d..53e83ac1cf0f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath.gradle @@ -25,6 +25,10 @@ repositories { mavenCentral() } +dependencies { + testImplementation("org.junit.jupiter:junit-jupiter:{junitVersion}") +} + task('checkTestNativeImageClasspath') { doFirst { tasks.nativeTestCompile.options.get().classpath.each { println it } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-developmentOnlyDependenciesDoNotAppearInNativeImageClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-developmentOnlyDependenciesDoNotAppearInNativeImageClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-developmentOnlyDependenciesDoNotAppearInNativeImageClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-developmentOnlyDependenciesDoNotAppearInNativeImageClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-nativeEntryIsAddedToManifest.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-nativeEntryIsAddedToManifest.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-nativeEntryIsAddedToManifest.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-nativeEntryIsAddedToManifest.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesAreCopiedToJar.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesAreCopiedToJar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesAreCopiedToJar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesAreCopiedToJar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-testAndDevelopmentOnlyDependenciesDoNotAppearInNativeImageClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-testAndDevelopmentOnlyDependenciesDoNotAppearInNativeImageClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-testAndDevelopmentOnlyDependenciesDoNotAppearInNativeImageClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-testAndDevelopmentOnlyDependenciesDoNotAppearInNativeImageClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/OnlyDependencyManagementIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginCreatesProcessAotTask.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginCreatesProcessAotTask.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginCreatesProcessAotTask.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginCreatesProcessAotTask.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginCreatesProcessTestAotTask.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginCreatesProcessTestAotTask.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginCreatesProcessTestAotTask.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginCreatesProcessTestAotTask.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginDoesNotPreventConfigurationOfJavaToolchainLanguageVersion.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginDoesNotPreventConfigurationOfJavaToolchainLanguageVersion.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginDoesNotPreventConfigurationOfJavaToolchainLanguageVersion.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginDoesNotPreventConfigurationOfJavaToolchainLanguageVersion.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-noProcessAotTaskWithoutAotPluginApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-noProcessAotTaskWithoutAotPluginApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-noProcessAotTaskWithoutAotPluginApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-noProcessAotTaskWithoutAotPluginApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-noProcessTestAotTaskWithoutAotPluginApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-noProcessTestAotTaskWithoutAotPluginApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-noProcessTestAotTaskWithoutAotPluginApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-noProcessTestAotTaskWithoutAotPluginApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotDoesNotHaveDevelopmentOnlyDependenciesOnItsClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotDoesNotHaveDevelopmentOnlyDependenciesOnItsClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotDoesNotHaveDevelopmentOnlyDependenciesOnItsClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotDoesNotHaveDevelopmentOnlyDependenciesOnItsClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotDoesNotHaveTestAndDevelopmentOnlyDependenciesOnItsClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotDoesNotHaveTestAndDevelopmentOnlyDependenciesOnItsClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotDoesNotHaveTestAndDevelopmentOnlyDependenciesOnItsClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotDoesNotHaveTestAndDevelopmentOnlyDependenciesOnItsClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotHasLibraryResourcesOnItsClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotHasLibraryResourcesOnItsClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotHasLibraryResourcesOnItsClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotHasLibraryResourcesOnItsClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotIsSkippedWhenProjectHasNoMainSource.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotIsSkippedWhenProjectHasNoMainSource.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotIsSkippedWhenProjectHasNoMainSource.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotIsSkippedWhenProjectHasNoMainSource.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotRunsWhenProjectHasMainSource.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotRunsWhenProjectHasMainSource.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotRunsWhenProjectHasMainSource.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processAotRunsWhenProjectHasMainSource.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotDoesNotHaveDevelopmentOnlyDependenciesOnItsClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotDoesNotHaveDevelopmentOnlyDependenciesOnItsClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotDoesNotHaveDevelopmentOnlyDependenciesOnItsClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotDoesNotHaveDevelopmentOnlyDependenciesOnItsClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasLibraryResourcesOnItsClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasLibraryResourcesOnItsClasspath.gradle similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasLibraryResourcesOnItsClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasLibraryResourcesOnItsClasspath.gradle index 2f3f370bf5e6..56130217d95d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasLibraryResourcesOnItsClasspath.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasLibraryResourcesOnItsClasspath.gradle @@ -42,7 +42,7 @@ dependencies { } task('processTestAotClasspath') { - dependsOn configurations.processTestAotClasspath + dependsOn configurations.processTestAotClasspath doFirst { configurations.processTestAotClasspath.files.each { println it } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTestAndDevelopmentOnlyDependenciesOnItsClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTestAndDevelopmentOnlyDependenciesOnItsClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTestAndDevelopmentOnlyDependenciesOnItsClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTestAndDevelopmentOnlyDependenciesOnItsClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle index 76189277d690..8ab0981a8ee5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotHasTransitiveRuntimeDependenciesOnItsClasspath.gradle @@ -42,7 +42,7 @@ dependencies { } task('processTestAotClasspath') { - dependsOn configurations.processTestAotClasspath + dependsOn configurations.processTestAotClasspath doFirst { configurations.processTestAotClasspath.files.each { println it } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotIsSkippedWhenProjectHasNoTestSource.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotIsSkippedWhenProjectHasNoTestSource.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotIsSkippedWhenProjectHasNoTestSource.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-processTestAotIsSkippedWhenProjectHasNoTestSource.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests-unresolvedDependenciesAreAnalyzedWhenDependencyResolutionFails.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests-unresolvedDependenciesAreAnalyzedWhenDependencyResolutionFails.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests-unresolvedDependenciesAreAnalyzedWhenDependencyResolutionFails.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests-unresolvedDependenciesAreAnalyzedWhenDependencyResolutionFails.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.gradle similarity index 92% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.gradle index 2bba1c87667d..eb7254204e9d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootPluginIntegrationTests.gradle @@ -15,5 +15,5 @@ */ plugins { - id 'org.springframework.boot' version '{version}' + id 'org.springframework.boot' } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests-assembleRunsBootWarAndWar.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests-assembleRunsBootWarAndWar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests-assembleRunsBootWarAndWar.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests-assembleRunsBootWarAndWar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests-taskConfigurationIsAvoided.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/WarPluginActionIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-basicExecution.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-basicExecution.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-basicExecution.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-basicExecution.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-defaultValues.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-defaultValues.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-defaultValues.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-defaultValues.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-excludeProperties.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-excludeProperties.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-excludeProperties.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-excludeProperties.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceAsTimeChanges.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceAsTimeChanges.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceAsTimeChanges.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceAsTimeChanges.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedGradlePropertiesProjectVersion.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedGradlePropertiesProjectVersion.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedGradlePropertiesProjectVersion.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedGradlePropertiesProjectVersion.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedProjectVersion.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedProjectVersion.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedProjectVersion.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-notUpToDateWhenExecutedTwiceWithFixedTimeAndChangedProjectVersion.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-reproducibleOutputWithFixedTime.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-reproducibleOutputWithFixedTime.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-reproducibleOutputWithFixedTime.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-reproducibleOutputWithFixedTime.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-upToDateWhenExecutedTwiceWithFixedTime.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-upToDateWhenExecutedTwiceWithFixedTime.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-upToDateWhenExecutedTwiceWithFixedTime.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoIntegrationTests-upToDateWhenExecutedTwiceWithFixedTime.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-applicationPluginMainClassNameIsUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-applicationPluginMainClassNameIsUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-applicationPluginMainClassNameIsUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-applicationPluginMainClassNameIsUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-classesFromASecondarySourceSetCanBeIncludedInTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-classesFromASecondarySourceSetCanBeIncludedInTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-classesFromASecondarySourceSetCanBeIncludedInTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-classesFromASecondarySourceSetCanBeIncludedInTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-customLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-customLayers.gradle similarity index 98% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-customLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-customLayers.gradle index d345d2171690..3b62acbe9fa4 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-customLayers.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-customLayers.gradle @@ -33,7 +33,7 @@ bootJar { include "*:*:*SNAPSHOT" } intoLayer("commons-dependencies") { - include "org.apache.commons:*" + include "org.apache.commons:*" } intoLayer("dependencies") } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesCanBeIncludedInTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesCanBeIncludedInTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesCanBeIncludedInTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-developmentOnlyDependenciesCanBeIncludedInTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-dirModeAndFileModeAreApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-dirModeAndFileModeAreApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-dirModeAndFileModeAreApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-dirModeAndFileModeAreApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-duplicatesAreHandledGracefully.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-duplicatesAreHandledGracefully.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-duplicatesAreHandledGracefully.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-duplicatesAreHandledGracefully.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-explodedApplicationClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-explodedApplicationClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-explodedApplicationClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-explodedApplicationClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-implicitLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-implicitLayers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-implicitLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-implicitLayers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-jarTypeFilteringIsApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-jarTypeFilteringIsApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-jarTypeFilteringIsApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-jarTypeFilteringIsApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-layersWithCustomSourceSet.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-layersWithCustomSourceSet.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-layersWithCustomSourceSet.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-layersWithCustomSourceSet.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleCustomLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleCustomLayers.gradle similarity index 98% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleCustomLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleCustomLayers.gradle index 09066531e3d3..202dfb7760e1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleCustomLayers.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleCustomLayers.gradle @@ -48,7 +48,7 @@ bootJar { includeProjectDependencies() } intoLayer("commons-dependencies") { - include "org.apache.commons:*" + include "org.apache.commons:*" } intoLayer("dependencies") } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleImplicitLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleImplicitLayers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleImplicitLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-multiModuleImplicitLayers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-notUpToDateWhenBuiltWithToolsAndThenWithoutTools.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-notUpToDateWhenBuiltWithToolsAndThenWithoutTools.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-notUpToDateWhenBuiltWithToolsAndThenWithoutTools.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-notUpToDateWhenBuiltWithToolsAndThenWithoutTools.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-notUpToDateWhenBuiltWithoutLayersAndThenWithLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-notUpToDateWhenBuiltWithoutLayersAndThenWithLayers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-notUpToDateWhenBuiltWithoutLayersAndThenWithLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-notUpToDateWhenBuiltWithoutLayersAndThenWithLayers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-packagedApplicationClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-packagedApplicationClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-packagedApplicationClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-packagedApplicationClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-reproducibleArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-reproducibleArchive.gradle similarity index 83% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-reproducibleArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-reproducibleArchive.gradle index a8aae4d8ca8a..f35007c6f930 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-reproducibleArchive.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-reproducibleArchive.gradle @@ -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 + } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-signed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-signed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-signed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-signed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-startClassIsSetByResolvingTheMainClass.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-startClassIsSetByResolvingTheMainClass.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-startClassIsSetByResolvingTheMainClass.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-startClassIsSetByResolvingTheMainClass.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-upToDateWhenBuiltTwice.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-upToDateWhenBuiltTwice.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-upToDateWhenBuiltTwice.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-upToDateWhenBuiltTwice.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-whenAResolvableCopyOfAnUnresolvableConfigurationIsResolvedThenResolutionSucceeds.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-whenAResolvableCopyOfAnUnresolvableConfigurationIsResolvedThenResolutionSucceeds.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-whenAResolvableCopyOfAnUnresolvableConfigurationIsResolvedThenResolutionSucceeds.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests-whenAResolvableCopyOfAnUnresolvableConfigurationIsResolvedThenResolutionSucceeds.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-applicationPluginMainClassNameIsUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-applicationPluginMainClassNameIsUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-applicationPluginMainClassNameIsUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-applicationPluginMainClassNameIsUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-classesFromASecondarySourceSetCanBeIncludedInTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-classesFromASecondarySourceSetCanBeIncludedInTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-classesFromASecondarySourceSetCanBeIncludedInTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-classesFromASecondarySourceSetCanBeIncludedInTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-customLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-customLayers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-customLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-customLayers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-developmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-developmentOnlyDependenciesCanBeIncludedInTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-developmentOnlyDependenciesCanBeIncludedInTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-developmentOnlyDependenciesCanBeIncludedInTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-developmentOnlyDependenciesCanBeIncludedInTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-dirModeAndFileModeAreApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-dirModeAndFileModeAreApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-dirModeAndFileModeAreApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-dirModeAndFileModeAreApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-duplicatesAreHandledGracefully.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-duplicatesAreHandledGracefully.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-duplicatesAreHandledGracefully.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-duplicatesAreHandledGracefully.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-implicitLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-implicitLayers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-implicitLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-implicitLayers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-jarTypeFilteringIsApplied.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-jarTypeFilteringIsApplied.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-jarTypeFilteringIsApplied.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-jarTypeFilteringIsApplied.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-layersWithCustomSourceSet.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-layersWithCustomSourceSet.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-layersWithCustomSourceSet.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-layersWithCustomSourceSet.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-multiModuleCustomLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-multiModuleCustomLayers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-multiModuleCustomLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-multiModuleCustomLayers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-multiModuleImplicitLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-multiModuleImplicitLayers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-multiModuleImplicitLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-multiModuleImplicitLayers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-notUpToDateWhenBuiltWithToolsAndThenWithoutTools.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-notUpToDateWhenBuiltWithToolsAndThenWithoutTools.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-notUpToDateWhenBuiltWithToolsAndThenWithoutTools.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-notUpToDateWhenBuiltWithToolsAndThenWithoutTools.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-notUpToDateWhenBuiltWithoutLayersAndThenWithLayers.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-notUpToDateWhenBuiltWithoutLayersAndThenWithLayers.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-notUpToDateWhenBuiltWithoutLayersAndThenWithLayers.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-notUpToDateWhenBuiltWithoutLayersAndThenWithLayers.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-reproducibleArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-reproducibleArchive.gradle similarity index 83% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-reproducibleArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-reproducibleArchive.gradle index e9e1b70e262f..f51b88df2b22 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-reproducibleArchive.gradle +++ b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-reproducibleArchive.gradle @@ -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 + } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-signed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-signed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-signed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-signed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-startClassIsSetByResolvingTheMainClass.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-startClassIsSetByResolvingTheMainClass.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-startClassIsSetByResolvingTheMainClass.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-startClassIsSetByResolvingTheMainClass.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-testAndDevelopmentOnlyDependenciesAreNotIncludedInTheArchiveByDefault.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-testAndDevelopmentOnlyDependenciesCanBeIncludedInTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-upToDateWhenBuiltTwice.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-upToDateWhenBuiltTwice.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-upToDateWhenBuiltTwice.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-upToDateWhenBuiltTwice.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-upToDateWhenBuiltWithDefaultLayeredAndThenWithExplicitLayered.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests-versionMismatchBetweenTransitiveDevelopmentOnlyImplementationDependenciesDoesNotRemoveDependencyFromTheArchive.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootWarIntegrationTests.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenIntegrationTests-bootJarCanBeUploaded.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenIntegrationTests-bootJarCanBeUploaded.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenIntegrationTests-bootJarCanBeUploaded.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenIntegrationTests-bootJarCanBeUploaded.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenIntegrationTests-bootWarCanBeUploaded.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenIntegrationTests-bootWarCanBeUploaded.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenIntegrationTests-bootWarCanBeUploaded.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenIntegrationTests-bootWarCanBeUploaded.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests-bootJarCanBePublished.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests-bootJarCanBePublished.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests-bootJarCanBePublished.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests-bootJarCanBePublished.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests-bootWarCanBePublished.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests-bootWarCanBePublished.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests-bootWarCanBePublished.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests-bootWarCanBePublished.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginJvmArgumentsAreUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginJvmArgumentsAreUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginJvmArgumentsAreUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginJvmArgumentsAreUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginMainClassNameIsNotUsedWhenItIsNull.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginMainClassNameIsNotUsedWhenItIsNull.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginMainClassNameIsNotUsedWhenItIsNull.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginMainClassNameIsNotUsedWhenItIsNull.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginMainClassNameIsUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginMainClassNameIsUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginMainClassNameIsUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-applicationPluginMainClassNameIsUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-basicExecution.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-basicExecution.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-basicExecution.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-basicExecution.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-classesFromASecondarySourceSetCanBeOnTheClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-classesFromASecondarySourceSetCanBeOnTheClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-classesFromASecondarySourceSetCanBeOnTheClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-classesFromASecondarySourceSetCanBeOnTheClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-defaultJvmArgs.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-defaultJvmArgs.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-defaultJvmArgs.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-defaultJvmArgs.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-developmentOnlyDependenciesAreOnTheClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-developmentOnlyDependenciesAreOnTheClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-developmentOnlyDependenciesAreOnTheClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-developmentOnlyDependenciesAreOnTheClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-jarTypeFilteringIsAppliedToTheClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-jarTypeFilteringIsAppliedToTheClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-jarTypeFilteringIsAppliedToTheClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-jarTypeFilteringIsAppliedToTheClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-optimizedLaunchDisabledJvmArgs.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-optimizedLaunchDisabledJvmArgs.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-optimizedLaunchDisabledJvmArgs.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-optimizedLaunchDisabledJvmArgs.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-sourceResourcesCanBeUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-sourceResourcesCanBeUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-sourceResourcesCanBeUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-sourceResourcesCanBeUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-springBootExtensionMainClassNameIsUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-testAndDevelopmentOnlyDependenciesAreOnTheClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-testAndDevelopmentOnlyDependenciesAreOnTheClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-testAndDevelopmentOnlyDependenciesAreOnTheClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests-testAndDevelopmentOnlyDependenciesAreOnTheClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-applicationPluginJvmArgumentsAreUsed.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-applicationPluginJvmArgumentsAreUsed.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-applicationPluginJvmArgumentsAreUsed.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-applicationPluginJvmArgumentsAreUsed.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-basicExecution.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-basicExecution.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-basicExecution.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-basicExecution.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-defaultJvmArgs.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-defaultJvmArgs.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-defaultJvmArgs.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-defaultJvmArgs.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-developmentOnlyDependenciesAreNotOnTheClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-developmentOnlyDependenciesAreNotOnTheClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-developmentOnlyDependenciesAreNotOnTheClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-developmentOnlyDependenciesAreNotOnTheClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-failsGracefullyWhenNoTestMainMethodIsFound.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-failsGracefullyWhenNoTestMainMethodIsFound.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-failsGracefullyWhenNoTestMainMethodIsFound.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-failsGracefullyWhenNoTestMainMethodIsFound.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-jarTypeFilteringIsAppliedToTheClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-jarTypeFilteringIsAppliedToTheClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-jarTypeFilteringIsAppliedToTheClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-jarTypeFilteringIsAppliedToTheClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-optimizedLaunchDisabledJvmArgs.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-optimizedLaunchDisabledJvmArgs.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-optimizedLaunchDisabledJvmArgs.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-optimizedLaunchDisabledJvmArgs.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-testAndDevelopmentOnlyDependenciesAreOnTheClasspath.gradle b/build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-testAndDevelopmentOnlyDependenciesAreOnTheClasspath.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-testAndDevelopmentOnlyDependenciesAreOnTheClasspath.gradle rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/run/BootTestRunIntegrationTests-testAndDevelopmentOnlyDependenciesAreOnTheClasspath.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/index.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/index.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/index.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/index.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/reflect-config.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/reflect-config.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/reflect-config.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/reflect-config.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/index.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/index.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/index.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/index.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/index.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/index.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/index.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/index.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/index.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/index.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/index.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/index.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/jni-config.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/jni-config.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/jni-config.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/jni-config.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/proxy-config.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/proxy-config.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/proxy-config.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/proxy-config.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/reflect-config.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/reflect-config.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/reflect-config.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/reflect-config.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/resource-config.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/resource-config.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/resource-config.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/resource-config.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/index.json b/build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/index.json similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/index.json rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/index.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/com/example/library/1.0-SNAPSHOT/library-1.0-SNAPSHOT.jar b/build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/com/example/library/1.0-SNAPSHOT/library-1.0-SNAPSHOT.jar similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/com/example/library/1.0-SNAPSHOT/library-1.0-SNAPSHOT.jar rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/com/example/library/1.0-SNAPSHOT/library-1.0-SNAPSHOT.jar diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/com/example/library/1.0-SNAPSHOT/library-1.0-SNAPSHOT.pom b/build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/com/example/library/1.0-SNAPSHOT/library-1.0-SNAPSHOT.pom similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/com/example/library/1.0-SNAPSHOT/library-1.0-SNAPSHOT.pom rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/com/example/library/1.0-SNAPSHOT/library-1.0-SNAPSHOT.pom diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/one/1.0/one-1.0.jar b/build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/one/1.0/one-1.0.jar similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/one/1.0/one-1.0.jar rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/one/1.0/one-1.0.jar diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/one/1.0/one-1.0.pom b/build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/one/1.0/one-1.0.pom similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/one/1.0/one-1.0.pom rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/one/1.0/one-1.0.pom diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/two/1.0/two-1.0.jar b/build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/two/1.0/two-1.0.jar similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/two/1.0/two-1.0.jar rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/two/1.0/two-1.0.jar diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/two/1.0/two-1.0.pom b/build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/two/1.0/two-1.0.pom similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/two/1.0/two-1.0.pom rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/commons-io-consumer/two/1.0/two-1.0.pom diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/org/springframework/boot/spring-boot-dependencies/TEST-SNAPSHOT/spring-boot-dependencies-TEST-SNAPSHOT.pom b/build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/org/springframework/boot/spring-boot-dependencies/TEST-SNAPSHOT/spring-boot-dependencies-TEST-SNAPSHOT.pom similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/repository/org/springframework/boot/spring-boot-dependencies/TEST-SNAPSHOT/spring-boot-dependencies-TEST-SNAPSHOT.pom rename to build-plugin/spring-boot-gradle-plugin/src/test/resources/repository/org/springframework/boot/spring-boot-dependencies/TEST-SNAPSHOT/spring-boot-dependencies-TEST-SNAPSHOT.pom diff --git a/build-plugin/spring-boot-maven-plugin/build.gradle b/build-plugin/spring-boot-maven-plugin/build.gradle new file mode 100644 index 000000000000..79e6d7c1ba3d --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/build.gradle @@ -0,0 +1,207 @@ +/* + * 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. + */ + +plugins { + id "org.springframework.boot.antora-contributor" + id "org.springframework.boot.maven-plugin" + id "org.springframework.boot.optional-dependencies" + id "org.springframework.boot.docker-test" +} + +description = "Spring Boot Maven Plugin" + +configurations { + dependenciesBom +} + +dependencies { + compileOnly("org.apache.maven.plugin-tools:maven-plugin-annotations") + compileOnly("org.apache.maven:maven-core") { + exclude(group: "javax.annotation", module: "javax.annotation-api") + } + compileOnly("org.apache.maven:maven-plugin-api") { + exclude(group: "javax.annotation", module: "javax.annotation-api") + exclude(group: "javax.enterprise", module: "cdi-api") + } + + dockerTestImplementation(project(":test-support:spring-boot-docker-test-support")) + dockerTestImplementation("org.apache.maven.shared:maven-invoker") { + exclude(group: "javax.inject", module: "javax.inject") + } + dockerTestImplementation("org.assertj:assertj-core") + dockerTestImplementation("org.junit.jupiter:junit-jupiter") + dockerTestImplementation("org.testcontainers:testcontainers-junit-jupiter") + + implementation(project(":buildpack:spring-boot-buildpack-platform")) + implementation(project(":loader:spring-boot-loader-tools")) + implementation("org.apache.maven.shared:maven-common-artifact-filters") { + exclude(group: "javax.annotation", module: "javax.annotation-api") + exclude(group: "javax.enterprise", module: "cdi-api") + exclude(group: "javax.inject", module: "javax.inject") + } + implementation("org.sonatype.plexus:plexus-build-api") { + exclude(group: "org.codehaus.plexus", module: "plexus-utils") + } + implementation("org.springframework:spring-core") + implementation("org.springframework:spring-context") + + optional("org.apache.maven.plugins:maven-shade-plugin") { + exclude(group: "javax.annotation", module: "javax.annotation-api") + exclude(group: "javax.enterprise", module: "cdi-api") + exclude(group: "javax.inject", module: "javax.inject") + } + + testImplementation("org.apache.maven:maven-core") { + exclude(group: "javax.annotation", module: "javax.annotation-api") + exclude(group: "javax.inject", module: "javax.inject") + } + testImplementation("org.apache.maven.shared:maven-common-artifact-filters") { + exclude(group: "javax.annotation", module: "javax.annotation-api") + exclude(group: "javax.enterprise", module: "cdi-api") + exclude(group: "javax.inject", module: "javax.inject") + } + testImplementation("org.assertj:assertj-core") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation("org.springframework:spring-core") + + intTestImplementation(project(":buildpack:spring-boot-buildpack-platform")) + intTestImplementation(project(":loader:spring-boot-loader-tools")) + intTestImplementation(project(":test-support:spring-boot-test-support")) + intTestImplementation("org.apache.maven.shared:maven-invoker") { + exclude(group: "javax.inject", module: "javax.inject") + } + intTestImplementation("org.assertj:assertj-core") + intTestImplementation("org.junit.jupiter:junit-jupiter") + + mavenRepository(project(path: ":core:spring-boot", configuration: "mavenRepository")) + mavenRepository(project(path: ":platform:spring-boot-dependencies", configuration: "mavenRepository")) + mavenRepository(project(path: ":core:spring-boot-test", configuration: "mavenRepository")) + mavenRepository(project(path: ":module:spring-boot-devtools", configuration: "mavenRepository")) + mavenRepository(project(path: ":core:spring-boot-docker-compose", configuration: "mavenRepository")) + mavenRepository(project(path: ":starter:spring-boot-starter-parent", configuration: "mavenRepository")) + + versionProperties(project(path: ":platform:spring-boot-dependencies", configuration: "resolvedBom")) +} + +ext { + versionElements = version.split("\\.") + xsdVersion = versionElements[0] + "." + versionElements[1] +} + +tasks.named("checkCompileClasspathForProhibitedDependencies") { + permittedGroups = ["javax.inject"] +} + +tasks.register("copySettingsXml", Copy) { + from file("src/intTest/projects/settings.xml") + into layout.buildDirectory.dir("generated-resources/settings") + filter(springRepositoryTransformers.mavenSettings()) +} + +sourceSets { + main { + output.dir(layout.buildDirectory.dir("generated/resources/xsd"), builtBy: "xsdResources") + } + intTest { + output.dir(layout.buildDirectory.dir("generated-resources"), builtBy: ["extractVersionProperties", "copySettingsXml"]) + } + dockerTest { + output.dir(layout.buildDirectory.dir("generated-resources"), builtBy: "extractVersionProperties") + } +} + +javadoc { + options { + author = true + docTitle = "Spring Boot Maven Plugin ${project.version} API" + encoding = "UTF-8" + memberLevel = "protected" + outputLevel = "quiet" + splitIndex = true + use = true + windowTitle = "Spring Boot Maven Plugin ${project.version} API" + } +} + +tasks.register("xsdResources", Sync) { + from "src/main/xsd/layers-${project.ext.xsdVersion}.xsd" + into layout.buildDirectory.dir("generated/resources/xsd/org/springframework/boot/maven") + rename { fileName -> "layers.xsd" } +} + +prepareMavenBinaries { + versions = [ "3.9.9", "3.6.3" ] +} + +tasks.named("documentPluginGoals") { + goalSections = [ + "build-image": "build-image", + "build-image-no-fork": "build-image", + "build-info": "build-info", + "help": "help", + "process-aot": "aot", + "process-test-aot": "aot", + "repackage": "packaging", + "run": "run", + "start": "integration-tests", + "stop": "integration-tests", + "test-run": "run" + ] +} + +antoraContributions { + 'maven-plugin' { + aggregateContent { + from(documentPluginGoals) { + into "modules/maven-plugin/partials/goals" + } + } + catalogContent { + from(javadoc) { + into "api/java" + } + } + localAggregateContent { + from(tasks.named("generateAntoraYml")) { + into "modules" + } + } + source() + } +} + +tasks.named("generateAntoraPlaybook") { + antoraExtensions.xref.stubs = ["appendix:.*", "api:.*", "reference:.*", "how-to:.*"] + asciidocExtensions.excludeJavadocExtension = true +} + +tasks.named("dockerTest").configure { + dependsOn tasks.named("prepareMavenBinaries") +} + +tasks.named("compileTestJava") { + options.nullability.checking = "tests" +} + +tasks.named("compileIntTestJava") { + options.nullability.checking = "tests" +} + +tasks.named("compileDockerTestJava") { + options.nullability.checking = "tests" +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/java/org/springframework/boot/maven/BuildImageRegistryIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/java/org/springframework/boot/maven/BuildImageRegistryIntegrationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/java/org/springframework/boot/maven/BuildImageRegistryIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/java/org/springframework/boot/maven/BuildImageRegistryIntegrationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/java/org/springframework/boot/maven/BuildImageTests.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/java/org/springframework/boot/maven/BuildImageTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/java/org/springframework/boot/maven/BuildImageTests.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/java/org/springframework/boot/maven/BuildImageTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-app-dir/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-app-dir/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-app-dir/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-app-dir/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-app-dir/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-app-dir/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-app-dir/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-app-dir/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bad-buildpack/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bad-buildpack/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bad-buildpack/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bad-buildpack/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bad-buildpack/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bad-buildpack/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bad-buildpack/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bad-buildpack/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bind-caches/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bind-caches/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bind-caches/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bind-caches/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bind-caches/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bind-caches/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bind-caches/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bind-caches/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/bindings/ca-certificates/test.crt b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/bindings/ca-certificates/test.crt similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/bindings/ca-certificates/test.crt rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/bindings/ca-certificates/test.crt diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/bindings/ca-certificates/type b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/bindings/ca-certificates/type similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/bindings/ca-certificates/type rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/bindings/ca-certificates/type diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-bindings/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-builder-error/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-builder-error/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-builder-error/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-builder-error/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-builder-error/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-builder-error/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-builder-error/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-builder-error/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-caches-multiple/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-caches-multiple/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-caches-multiple/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-caches-multiple/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-caches-multiple/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-caches-multiple/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-caches-multiple/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-caches-multiple/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source-with-repackage/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source-with-repackage/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source-with-repackage/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source-with-repackage/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source-with-repackage/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source-with-repackage/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source-with-repackage/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source-with-repackage/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-source/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-with-repackage/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-with-repackage/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-with-repackage/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-with-repackage/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-with-repackage/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-with-repackage/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-with-repackage/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier-with-repackage/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-classifier/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-cmd-line/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-cmd-line/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-cmd-line/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-cmd-line/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-cmd-line/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-cmd-line/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-cmd-line/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-cmd-line/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-created-date/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-created-date/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-created-date/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-created-date/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-created-date/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-created-date/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-created-date/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-created-date/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-current-created-date/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-current-created-date/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-current-created-date/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-current-created-date/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-current-created-date/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-current-created-date/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-current-created-date/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-current-created-date/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-builder/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-builder/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-builder/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-builder/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-builder/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-builder/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-builder/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-builder/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-buildpacks/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-buildpacks/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-buildpacks/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-buildpacks/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-buildpacks/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-buildpacks/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-buildpacks/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-buildpacks/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-name/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-name/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-name/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-name/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-name/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-name/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-name/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-custom-name/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-empty-env-entry/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-empty-env-entry/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-empty-env-entry/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-empty-env-entry/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-empty-env-entry/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-empty-env-entry/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-empty-env-entry/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-empty-env-entry/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-final-name/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-final-name/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-final-name/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-final-name/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-final-name/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-final-name/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-final-name/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-final-name/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-fork-classifier/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-fork-classifier/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-fork-classifier/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-fork-classifier/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-fork-classifier/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-fork-classifier/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-fork-classifier/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-fork-classifier/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/app/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/app/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/app/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/app/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/app/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/app/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/app/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/app/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/library/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/library/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/library/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/library/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/library/src/main/java/org/test/SampleLibrary.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/library/src/main/java/org/test/SampleLibrary.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/library/src/main/java/org/test/SampleLibrary.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/library/src/main/java/org/test/SampleLibrary.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-multi-module/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-network/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-network/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-network/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-network/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-network/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-network/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-network/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-network/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-platform-linux-arm/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-platform-linux-arm/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-platform-linux-arm/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-platform-linux-arm/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-platform-linux-arm/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-platform-linux-arm/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-platform-linux-arm/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-platform-linux-arm/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-publish/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-publish/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-publish/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-publish/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-publish/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-publish/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-publish/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-publish/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-security-opts/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-security-opts/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-security-opts/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-security-opts/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-security-opts/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-security-opts/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-security-opts/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-security-opts/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-tags/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-tags/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-tags/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-tags/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-tags/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-tags/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-tags/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-tags/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-trust-builder/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-trust-builder/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-trust-builder/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-trust-builder/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-trust-builder/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-trust-builder/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-trust-builder/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-trust-builder/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-volume-caches/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-volume-caches/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-volume-caches/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-volume-caches/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-volume-caches/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-volume-caches/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-volume-caches/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-volume-caches/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-war-packaging/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-war-packaging/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-war-packaging/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-war-packaging/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-war-packaging/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-war-packaging/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-war-packaging/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-war-packaging/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-with-repackage/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-with-repackage/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-with-repackage/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-with-repackage/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-with-repackage/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-with-repackage/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-with-repackage/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-with-repackage/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-zip-packaging/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-zip-packaging/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-zip-packaging/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-zip-packaging/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-zip-packaging/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-zip-packaging/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image-zip-packaging/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image-zip-packaging/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image/pom.xml b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/dockerTest/projects/build-image/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/dockerTest/projects/build-image/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/antora.yml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/antora.yml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/antora.yml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/antora.yml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/local-nav.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/local-nav.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/local-nav.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/local-nav.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native-profile-buildpacks/pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native-profile-buildpacks/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native-profile-buildpacks/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native-profile-buildpacks/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native-profile-nbt/pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native-profile-nbt/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native-profile-nbt/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native-profile-nbt/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native/pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot-native/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/aot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/build-info/pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/build-info/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/build-info/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/build-info/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/getting-started/plugin-repositories-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/getting-started/plugin-repositories-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/getting-started/plugin-repositories-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/getting-started/plugin-repositories-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/getting-started/pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/getting-started/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/getting-started/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/getting-started/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/customize-jmx-port-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/customize-jmx-port-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/customize-jmx-port-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/customize-jmx-port-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/failsafe-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/failsafe-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/failsafe-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/failsafe-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/random-port-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/random-port-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/random-port-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/random-port-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/skip-integration-tests-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/skip-integration-tests-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/skip-integration-tests-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/integration-tests/skip-integration-tests-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/bind-caches-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/bind-caches-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/bind-caches-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/bind-caches-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/build-image-example-builder-configuration-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/build-image-example-builder-configuration-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/build-image-example-builder-configuration-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/build-image-example-builder-configuration-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/buildpacks-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/buildpacks-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/buildpacks-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/buildpacks-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/caches-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/caches-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/caches-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/caches-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/custom-image-builder-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/custom-image-builder-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/custom-image-builder-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/custom-image-builder-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/custom-image-name-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/custom-image-name-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/custom-image-name-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/custom-image-name-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-colima-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-colima-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-colima-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-colima-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-minikube-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-minikube-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-minikube-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-minikube-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-podman-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-podman-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-podman-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-podman-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-pom-authentication-command-line.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-pom-authentication-command-line.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-pom-authentication-command-line.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-pom-authentication-command-line.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-registry-authentication-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-registry-authentication-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-registry-authentication-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-registry-authentication-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-token-authentication-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-token-authentication-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-token-authentication-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/docker-token-authentication-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/paketo-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/paketo-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/paketo-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/paketo-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/runtime-jvm-configuration-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/runtime-jvm-configuration-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/runtime-jvm-configuration-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging-oci-image/runtime-jvm-configuration-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/classified-artifact-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/classified-artifact-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/classified-artifact-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/classified-artifact-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-layers-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-layers-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-layers-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-layers-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-layout-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-layout-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-layout-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-layout-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-name-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-name-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-name-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/custom-name-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/different-classifier-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/different-classifier-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/different-classifier-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/different-classifier-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/disable-layers-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/disable-layers-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/disable-layers-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/disable-layers-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-artifact-group-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-artifact-group-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-artifact-group-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-artifact-group-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-artifact-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-artifact-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-artifact-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-artifact-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-dependency-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-dependency-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-dependency-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/exclude-dependency-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/jar-plugin-first-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/jar-plugin-first-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/jar-plugin-first-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/jar-plugin-first-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/layers-configuration.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/layers-configuration.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/layers-configuration.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/layers-configuration.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/layers.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/layers.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/layers.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/layers.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/local-repackaged-artifact-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/local-repackaged-artifact-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/local-repackaged-artifact-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/local-repackaged-artifact-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/non-default-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/non-default-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/non-default-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/non-default-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/repackage-configuration-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/repackage-configuration-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/repackage-configuration-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/repackage-configuration-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/repackage-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/repackage-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/repackage-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/packaging/repackage-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/active-profiles-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/active-profiles-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/active-profiles-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/active-profiles-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/application-arguments-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/application-arguments-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/application-arguments-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/application-arguments-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/debug-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/debug-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/debug-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/debug-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/devtools-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/devtools-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/devtools-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/devtools-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/environment-variables-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/environment-variables-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/environment-variables-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/environment-variables-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/hot-refresh-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/hot-refresh-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/hot-refresh-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/hot-refresh-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/system-properties-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/system-properties-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/system-properties-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/running/system-properties-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/default-and-override-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/default-and-override-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/default-and-override-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/default-and-override-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/different-versions-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/different-versions-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/different-versions-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/different-versions-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/no-starter-parent-override-dependencies-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/no-starter-parent-override-dependencies-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/no-starter-parent-override-dependencies-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/no-starter-parent-override-dependencies-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/no-starter-parent-pom.xml b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/no-starter-parent-pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/no-starter-parent-pom.xml rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/examples/using/no-starter-parent-pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/aot.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/aot.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/aot.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/aot.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/build-image.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/build-image.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/build-image.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/build-image.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/build-info.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/build-info.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/build-info.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/build-info.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/getting-started.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/getting-started.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/getting-started.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/getting-started.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/goals.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/goals.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/goals.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/goals.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/help.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/help.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/help.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/help.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/index.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/index.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/index.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/index.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/integration-tests.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/integration-tests.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/integration-tests.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/integration-tests.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/packaging.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/packaging.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/packaging.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/packaging.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/run.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/run.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/run.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/run.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/using.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/using.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/using.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/pages/using.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/partials/nav-maven-plugin.adoc b/build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/partials/nav-maven-plugin.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/partials/nav-maven-plugin.adoc rename to build-plugin/spring-boot-maven-plugin/src/docs/antora/modules/maven-plugin/partials/nav-maven-plugin.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java index 7701ba4099fb..4b9e7657906d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java @@ -36,6 +36,7 @@ import org.assertj.core.api.AbstractAssert; import org.assertj.core.api.AssertProvider; import org.assertj.core.api.ListAssert; +import org.jspecify.annotations.Nullable; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.contentOf; @@ -52,11 +53,6 @@ protected String buildLog(File project) { return contentOf(new File(project, "target/build.log")); } - protected String launchScript(File jar) { - String content = contentOf(jar); - return content.substring(0, content.indexOf(new String(new byte[] { 0x50, 0x4b, 0x03, 0x04 }))); - } - protected AssertProvider jar(File file) { return new AssertProvider<>() { @@ -95,7 +91,7 @@ else if (line.startsWith(entryPrefix)) { } } - protected String getLayersIndexLocation() { + protected @Nullable String getLayersIndexLocation() { return null; } @@ -159,7 +155,7 @@ JarAssert hasUnpackEntryWithNameStartingWith(String prefix) { Optional 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; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java similarity index 88% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java index 49bb6ec7bcac..312c77f1917d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AotTests.java @@ -57,9 +57,7 @@ void whenAotRunsResourcesAreGeneratedAndCopiedToTargetClasses(MavenBuild mavenBu Path targetClasses = project.toPath().resolve("target/classes"); assertThat(collectRelativePaths(targetClasses)).contains( Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-resource-generation", - "reflect-config.json"), - Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-resource-generation", - "resource-config.json"), + "reachability-metadata.json"), Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-resource-generation", "native-image.properties"), Path.of("generated-resource"), Path.of("nested/generated-resource")); @@ -72,11 +70,7 @@ void whenAotRunsWithJdkProxyResourcesIncludeProxyConfig(MavenBuild mavenBuild) { Path aotDirectory = project.toPath().resolve("target/spring-aot/main"); assertThat(collectRelativePaths(aotDirectory.resolve("resources"))).contains( Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-jdk-proxy", - "reflect-config.json"), - Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-jdk-proxy", - "resource-config.json"), - Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-jdk-proxy", - "proxy-config.json"), + "reachability-metadata.json"), Path.of("META-INF", "native-image", "org.springframework.boot.maven.it", "aot-jdk-proxy", "native-image.properties")); }); @@ -168,9 +162,7 @@ void whenAotRunsResourcesAreCopiedToTargetClasses(MavenBuild mavenBuild) { mavenBuild.project("aot-jdk-proxy").goals("package").execute((project) -> { Path classesDirectory = project.toPath().resolve("target/classes/META-INF/native-image"); assertThat(collectRelativePaths(classesDirectory)).contains( - Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "reflect-config.json"), - Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "resource-config.json"), - Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "proxy-config.json"), + Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "reachability-metadata.json"), Path.of("org.springframework.boot.maven.it", "aot-jdk-proxy", "native-image.properties")); }); } @@ -184,6 +176,17 @@ void whenAotRunsWithClassProxyClassesAreCopiedToTargetClasses(MavenBuild mavenBu }); } + @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) -> { @@ -192,12 +195,23 @@ void whenAotTestRunsSourcesAndResourcesAreGenerated(MavenBuild mavenBuild) { "SampleApplicationTests__TestContext001_ApplicationContextInitializer.java")); Path testClassesDirectory = project.toPath().resolve("target/test-classes"); assertThat(collectRelativePaths(testClassesDirectory)).contains(Path.of("META-INF", "native-image", - "org.springframework.boot.maven.it", "aot-test", "reflect-config.json")); + "org.springframework.boot.maven.it", "aot-test", "reachability-metadata.json")); assertThat(collectRelativePaths(testClassesDirectory)).contains(Path.of("org", "test", "SampleApplicationTests__TestContext001_ApplicationContextInitializer.class")); }); } + @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 collectRelativePaths(Path sourceDirectory) { try (Stream pathStream = Files.walk(sourceDirectory)) { return pathStream.filter(Files::isRegularFile) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/EclipseM2eIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/EclipseM2eIntegrationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/EclipseM2eIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/EclipseM2eIntegrationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java similarity index 85% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java index d751b0379cd9..f7dd021d626f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java @@ -26,11 +26,10 @@ import java.util.jar.JarFile; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.condition.DisabledForJreRange; -import org.junit.jupiter.api.condition.JRE; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.loader.tools.JarModeLibrary; +import org.springframework.boot.loader.tools.LibraryCoordinates; import org.springframework.boot.testsupport.FileUtils; import org.springframework.util.FileSystemUtils; @@ -58,7 +57,6 @@ void whenJarIsRepackagedInPlaceOnlyRepackagedJarIsInstalled(MavenBuild mavenBuil File original = new File(project, "target/jar-0.0.1.BUILD-SNAPSHOT.jar.original"); assertThat(original).isFile(); File repackaged = new File(project, "target/jar-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"); @@ -66,7 +64,7 @@ void whenJarIsRepackagedInPlaceOnlyRepackagedJarIsInstalled(MavenBuild mavenBuil }) .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core") - .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl") + .hasEntryWithNameStartingWith("BOOT-INF/lib/commons-logging") .hasEntryWithNameStartingWith("BOOT-INF/lib/jakarta.servlet-api-6") .hasEntryWithName("BOOT-INF/classes/org/test/SampleApplication.class") .hasEntryWithName("org/springframework/boot/loader/launch/JarLauncher.class"); @@ -78,26 +76,6 @@ void whenJarIsRepackagedInPlaceOnlyRepackagedJarIsInstalled(MavenBuild mavenBuil }); } - @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) -> { @@ -181,15 +159,6 @@ void whenAnOutputDirectoryIsConfiguredTheRepackagedJarIsWrittenToIt(MavenBuild m }); } - @TestTemplate - void whenACustomLaunchScriptIsConfiguredItAppearsInTheRepackagedJar(MavenBuild mavenBuild) { - mavenBuild.project("jar-custom-launcher").goals("install").execute((project) -> { - File repackaged = new File(project, "target/jar-0.0.1.BUILD-SNAPSHOT.jar"); - assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/"); - assertThat(launchScript(repackaged)).contains("Hello world"); - }); - } - @TestTemplate void whenAnEntryIsExcludedItDoesNotAppearInTheRepackagedJar(MavenBuild mavenBuild) { mavenBuild.project("jar-exclude-entry").goals("install").execute((project) -> { @@ -197,20 +166,19 @@ void whenAnEntryIsExcludedItDoesNotAppearInTheRepackagedJar(MavenBuild mavenBuil assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core") - .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl") + .hasEntryWithNameStartingWith("BOOT-INF/lib/commons-logging") .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/servlet-api-"); }); } @TestTemplate - void whenAnEntryIsOptionalByDefaultAppearsInTheRepackagedJar(MavenBuild mavenBuild) { + 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") - .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl") - .hasEntryWithNameStartingWith("BOOT-INF/lib/log4j-api-"); + .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/log4j-api-"); }); } @@ -221,7 +189,6 @@ void whenAnEntryIsOptionalAndOptionalsIncludedAppearsInTheRepackagedJar(MavenBui assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core") - .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl") .hasEntryWithNameStartingWith("BOOT-INF/lib/log4j-api-"); }); } @@ -233,7 +200,6 @@ void whenAnEntryIsOptionalAndOptionalsExcludedDoesNotAppearInTheRepackagedJar(Ma assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core") - .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl") .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/log4j-api-"); }); } @@ -248,7 +214,7 @@ void whenAnEntryIsExcludedWithPropertyItDoesNotAppearInTheRepackagedJar(MavenBui assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context") .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core") - .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl") + .hasEntryWithNameStartingWith("BOOT-INF/lib/commons-logging") .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/jakarta.servlet-api-"); }); } @@ -261,7 +227,7 @@ void whenAnEntryIsIncludedOnlyIncludedEntriesAppearInTheRepackagedJar(MavenBuild .hasEntryWithNameStartingWith("BOOT-INF/lib/jakarta.servlet-api-") .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/spring-context") .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/spring-core") - .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl"); + .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/commons-logging"); }); } @@ -276,7 +242,7 @@ void whenAnIncludeIsSpecifiedAsAPropertyOnlyIncludedEntriesAppearInTheRepackaged .hasEntryWithNameStartingWith("BOOT-INF/lib/jakarta.servlet-api-") .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/spring-context") .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/spring-core") - .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl"); + .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/commons-logging"); }); } @@ -286,20 +252,8 @@ void whenAGroupIsExcludedNoEntriesInThatGroupAppearInTheRepackagedJar(MavenBuild 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/spring-jcl") - .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/log4j-api-"); - }); - } - - @TestTemplate - void whenAJarIsExecutableItBeginsWithTheDefaultLaunchScript(MavenBuild mavenBuild) { - mavenBuild.project("jar-executable").execute((project) -> { - File repackaged = new File(project, "target/jar-executable-0.0.1.BUILD-SNAPSHOT.jar"); - assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/"); - assertThat(launchScript(repackaged)).contains("Spring Boot Startup Script") - .contains("MyFullyExecutableJarName") - .contains("MyFullyExecutableJarDesc"); + .hasEntryWithNameStartingWith("BOOT-INF/lib/commons-logging") + .doesNotHaveEntryWithName("BOOT-INF/lib/log4j-api-"); }); } @@ -361,8 +315,6 @@ void whenADependencyHasTestScopeItIsNotIncludedInTheRepackagedJar(MavenBuild mav } @TestTemplate - @DisabledForJreRange(min = JRE.JAVA_25) // Kotlin Maven integration does not support - // Java 25 void whenAProjectUsesKotlinItsModuleMetadataIsRepackagedIntoBootInfClasses(MavenBuild mavenBuild) { mavenBuild.project("jar-with-kotlin-module").execute((project) -> { File main = new File(project, "target/jar-with-kotlin-module-0.0.1.BUILD-SNAPSHOT.jar"); @@ -417,10 +369,12 @@ void whenJarIsRepackagedWithACustomLayoutTheJarUsesTheLayout(MavenBuild mavenBui void repackagedJarContainsTheLayersIndexByDefault(MavenBuild mavenBuild) { mavenBuild.project("jar-layered").execute((project) -> { File repackaged = new File(project, "jar/target/jar-layered-0.0.1.BUILD-SNAPSHOT.jar"); + LibraryCoordinates coordinates = JarModeLibrary.TOOLS.getCoordinates(); + assertThat(coordinates).isNotNull(); assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/") .hasEntryWithNameStartingWith("BOOT-INF/lib/jar-release") .hasEntryWithNameStartingWith("BOOT-INF/lib/jar-snapshot") - .hasEntryWithNameStartingWith("BOOT-INF/lib/" + JarModeLibrary.TOOLS.getCoordinates().getArtifactId()); + .hasEntryWithNameStartingWith("BOOT-INF/lib/" + coordinates.getArtifactId()); try (JarFile jarFile = new JarFile(repackaged)) { Map> layerIndex = readLayerIndex(jarFile); assertThat(layerIndex.keySet()).containsExactly("dependencies", "spring-boot-loader", @@ -440,10 +394,12 @@ void repackagedJarContainsTheLayersIndexByDefault(MavenBuild mavenBuild) { void whenJarIsRepackagedWithTheLayersDisabledDoesNotContainLayersIndex(MavenBuild mavenBuild) { mavenBuild.project("jar-layered-disabled").execute((project) -> { File repackaged = new File(project, "jar/target/jar-layered-0.0.1.BUILD-SNAPSHOT.jar"); + LibraryCoordinates coordinates = JarModeLibrary.TOOLS.getCoordinates(); + assertThat(coordinates).isNotNull(); assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/") .hasEntryWithNameStartingWith("BOOT-INF/lib/jar-release") .hasEntryWithNameStartingWith("BOOT-INF/lib/jar-snapshot") - .hasEntryWithNameStartingWith("BOOT-INF/lib/" + JarModeLibrary.TOOLS.getCoordinates().getArtifactId()) + .hasEntryWithNameStartingWith("BOOT-INF/lib/" + coordinates.getArtifactId()) .doesNotHaveEntryWithName("BOOT-INF/layers.idx"); }); } @@ -452,11 +408,12 @@ void whenJarIsRepackagedWithTheLayersDisabledDoesNotContainLayersIndex(MavenBuil void whenJarIsRepackagedWithToolsExclude(MavenBuild mavenBuild) { mavenBuild.project("jar-no-tools").execute((project) -> { File repackaged = new File(project, "jar/target/jar-no-tools-0.0.1.BUILD-SNAPSHOT.jar"); + LibraryCoordinates coordinates = JarModeLibrary.TOOLS.getCoordinates(); + assertThat(coordinates).isNotNull(); assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/") .hasEntryWithNameStartingWith("BOOT-INF/lib/jar-release") .hasEntryWithNameStartingWith("BOOT-INF/lib/jar-snapshot") - .doesNotHaveEntryWithNameStartingWith( - "BOOT-INF/lib/" + JarModeLibrary.TOOLS.getCoordinates().getArtifactId()); + .doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/" + coordinates.getArtifactId()); }); } @@ -524,19 +481,22 @@ private String buildJarWithOutputTimestamp(MavenBuild mavenBuild) { throw new RuntimeException(ex); } }); - return jarHash.get(); + String hash = jarHash.get(); + assertThat(hash).isNotNull(); + return hash; } @TestTemplate void whenJarIsRepackagedWithOutputTimestampConfiguredThenLibrariesAreSorted(MavenBuild mavenBuild) { mavenBuild.project("jar-output-timestamp").execute((project) -> { File repackaged = new File(project, "target/jar-output-timestamp-0.0.1.BUILD-SNAPSHOT.jar"); - List sortedLibs = Arrays.asList("BOOT-INF/lib/jakarta.servlet-api", - "BOOT-INF/lib/micrometer-commons", "BOOT-INF/lib/micrometer-observation", "BOOT-INF/lib/spring-aop", - "BOOT-INF/lib/spring-beans", - "BOOT-INF/lib/" + JarModeLibrary.TOOLS.getCoordinates().getArtifactId(), - "BOOT-INF/lib/spring-context", "BOOT-INF/lib/spring-core", "BOOT-INF/lib/spring-expression", - "BOOT-INF/lib/spring-jcl"); + LibraryCoordinates coordinates = JarModeLibrary.TOOLS.getCoordinates(); + assertThat(coordinates).isNotNull(); + List sortedLibs = Arrays.asList("BOOT-INF/lib/commons-logging", "BOOT-INF/lib/jakarta.servlet-api", + "BOOT-INF/lib/jspecify", "BOOT-INF/lib/micrometer-commons", "BOOT-INF/lib/micrometer-observation", + "BOOT-INF/lib/spring-aop", "BOOT-INF/lib/spring-beans", + "BOOT-INF/lib/" + coordinates.getArtifactId(), "BOOT-INF/lib/spring-context", + "BOOT-INF/lib/spring-core", "BOOT-INF/lib/spring-expression"); assertThat(jar(repackaged)).entryNamesInPath("BOOT-INF/lib/") .zipSatisfy(sortedLibs, (String jarLib, String expectedLib) -> assertThat(jarLib).startsWith(expectedLib)); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java index d1baa2720422..d2ecefe00501 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java @@ -43,7 +43,9 @@ import org.apache.maven.shared.invoker.InvocationResult; import org.apache.maven.shared.invoker.Invoker; import org.apache.maven.shared.invoker.MavenInvocationException; +import org.jspecify.annotations.Nullable; +import org.springframework.util.Assert; import org.springframework.util.FileSystemUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -67,9 +69,9 @@ class MavenBuild { private final Properties properties = new Properties(); - private ProjectCallback preparation; + private @Nullable ProjectCallback preparation; - private File projectDir; + private @Nullable File projectDir; MavenBuild(File home) { this.home = home; @@ -133,6 +135,7 @@ private void execute(ProjectCallback callback, int expectedExitCode) { InvocationRequest request = new DefaultInvocationRequest(); try { Path destination = this.temp.toPath(); + Assert.notNull(this.projectDir, "'projectDir' must not be null"); Path source = this.projectDir.toPath(); Files.walkFileTree(source, new SimpleFileVisitor<>() { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuildExtension.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuildExtension.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuildExtension.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuildExtension.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/RunIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/RunIntegrationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/RunIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/RunIntegrationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/StartStopIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/StartStopIntegrationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/StartStopIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/StartStopIntegrationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/TestRunIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/TestRunIntegrationTests.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/TestRunIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/TestRunIntegrationTests.java index cdb207357351..396b45288399 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/TestRunIntegrationTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/TestRunIntegrationTests.java @@ -42,7 +42,7 @@ void whenTheTestRunGoalIsExecutedTheApplicationIsRunWithTestAndMainClassesAndTes .contains("1. " + canonicalPathOf(project, "target/test-classes")) .contains("2. " + canonicalPathOf(project, "target/classes")) .containsPattern("3\\. .*spring-core") - .containsPattern("4\\. .*spring-jcl")); + .containsPattern("4\\. .*commons-logging")); } private String canonicalPathOf(File project, String path) throws IOException { diff --git a/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/Versions.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/Versions.java new file mode 100644 index 000000000000..0af8e705d6bc --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/Versions.java @@ -0,0 +1,62 @@ +/* + * 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.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.jspecify.annotations.Nullable; + +/** + * Provides access to various versions. + * + * @author Andy Wilkinson + */ +class Versions { + + private final Map versions; + + Versions() { + this.versions = loadVersions(); + } + + private static Map loadVersions() { + try (InputStream input = Versions.class.getClassLoader().getResourceAsStream("extracted-versions.properties")) { + Properties properties = new Properties(); + properties.load(input); + Map versions = new HashMap<>(); + properties.forEach((key, value) -> versions.put((String) key, (String) value)); + return versions; + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + @Nullable String get(String name) { + return this.versions.get(name); + } + + Map asMap() { + return Collections.unmodifiableMap(this.versions); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java similarity index 88% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java index ca528506e002..502e84041ce7 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java @@ -30,6 +30,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.loader.tools.JarModeLibrary; +import org.springframework.boot.loader.tools.LibraryCoordinates; import org.springframework.boot.testsupport.FileUtils; import org.springframework.util.FileSystemUtils; @@ -56,7 +57,7 @@ void warRepackaging(MavenBuild mavenBuild) { .execute((project) -> assertThat(jar(new File(project, "target/war-0.0.1.BUILD-SNAPSHOT.war"))) .hasEntryWithNameStartingWith("WEB-INF/lib/spring-context") .hasEntryWithNameStartingWith("WEB-INF/lib/spring-core") - .hasEntryWithNameStartingWith("WEB-INF/lib/spring-jcl") + .hasEntryWithNameStartingWith("WEB-INF/lib/commons-logging") .hasEntryWithNameStartingWith("WEB-INF/lib-provided/jakarta.servlet-api-6") .hasEntryWithName("org/springframework/boot/loader/launch/WarLauncher.class") .hasEntryWithName("WEB-INF/classes/org/test/SampleApplication.class") @@ -80,7 +81,7 @@ void whenRequiresUnpackConfigurationIsProvidedItIsReflectedInTheRepackagedWar(Ma .execute((project) -> assertThat(jar(new File(project, "target/war-with-unpack-0.0.1.BUILD-SNAPSHOT.war"))) .hasUnpackEntryWithNameStartingWith("WEB-INF/lib/spring-core-") .hasEntryWithNameStartingWith("WEB-INF/lib/spring-context-") - .hasEntryWithNameStartingWith("WEB-INF/lib/spring-jcl-")); + .hasEntryWithNameStartingWith("WEB-INF/lib/commons-logging-")); } @TestTemplate @@ -113,22 +114,26 @@ private String buildWarWithOutputTimestamp(MavenBuild mavenBuild) { throw new RuntimeException(ex); } }); - return warHash.get(); + String hash = warHash.get(); + assertThat(hash).isNotNull(); + return hash; } @TestTemplate void whenWarIsRepackagedWithOutputTimestampConfiguredThenLibrariesAreSorted(MavenBuild mavenBuild) { mavenBuild.project("war-output-timestamp").execute((project) -> { File repackaged = new File(project, "target/war-output-timestamp-0.0.1.BUILD-SNAPSHOT.war"); + LibraryCoordinates coordinates = JarModeLibrary.TOOLS.getCoordinates(); + assertThat(coordinates).isNotNull(); List sortedLibs = Arrays.asList( // these libraries are copied from the original war, sorted when // packaged by Maven - "WEB-INF/lib/micrometer-commons", "WEB-INF/lib/micrometer-observation", "WEB-INF/lib/spring-aop", - "WEB-INF/lib/spring-beans", "WEB-INF/lib/spring-context", "WEB-INF/lib/spring-core", - "WEB-INF/lib/spring-expression", "WEB-INF/lib/spring-jcl", + "WEB-INF/lib/commons-logging", "WEB-INF/lib/jspecify", "WEB-INF/lib/micrometer-commons", + "WEB-INF/lib/micrometer-observation", "WEB-INF/lib/spring-aop", "WEB-INF/lib/spring-beans", + "WEB-INF/lib/spring-context", "WEB-INF/lib/spring-core", "WEB-INF/lib/spring-expression", // these libraries are contributed by Spring Boot repackaging, and // sorted separately - "WEB-INF/lib/" + JarModeLibrary.TOOLS.getCoordinates().getArtifactId()); + "WEB-INF/lib/" + coordinates.getArtifactId()); assertThat(jar(repackaged)).entryNamesInPath("WEB-INF/lib/") .zipSatisfy(sortedLibs, (String jarLib, String expectedLib) -> assertThat(jarLib).startsWith(expectedLib)); @@ -148,10 +153,12 @@ void whenADependencyHasSystemScopeAndInclusionOfSystemScopeDependenciesIsEnabled void repackagedWarContainsTheLayersIndexByDefault(MavenBuild mavenBuild) { mavenBuild.project("war-layered").execute((project) -> { File repackaged = new File(project, "war/target/war-layered-0.0.1.BUILD-SNAPSHOT.war"); + LibraryCoordinates coordinates = JarModeLibrary.TOOLS.getCoordinates(); + assertThat(coordinates).isNotNull(); assertThat(jar(repackaged)).hasEntryWithNameStartingWith("WEB-INF/classes/") .hasEntryWithNameStartingWith("WEB-INF/lib/jar-release") .hasEntryWithNameStartingWith("WEB-INF/lib/jar-snapshot") - .hasEntryWithNameStartingWith("WEB-INF/lib/" + JarModeLibrary.TOOLS.getCoordinates().getArtifactId()); + .hasEntryWithNameStartingWith("WEB-INF/lib/" + coordinates.getArtifactId()); try (JarFile jarFile = new JarFile(repackaged)) { Map> layerIndex = readLayerIndex(jarFile); assertThat(layerIndex.keySet()).containsExactly("dependencies", "spring-boot-loader", @@ -176,10 +183,12 @@ void repackagedWarContainsTheLayersIndexByDefault(MavenBuild mavenBuild) { void whenWarIsRepackagedWithTheLayersDisabledDoesNotContainLayersIndex(MavenBuild mavenBuild) { mavenBuild.project("war-layered-disabled").execute((project) -> { File repackaged = new File(project, "war/target/war-layered-0.0.1.BUILD-SNAPSHOT.war"); + LibraryCoordinates coordinates = JarModeLibrary.TOOLS.getCoordinates(); + assertThat(coordinates).isNotNull(); assertThat(jar(repackaged)).hasEntryWithNameStartingWith("WEB-INF/classes/") .hasEntryWithNameStartingWith("WEB-INF/lib/jar-release") .hasEntryWithNameStartingWith("WEB-INF/lib/jar-snapshot") - .hasEntryWithNameStartingWith("WEB-INF/lib/" + JarModeLibrary.TOOLS.getCoordinates().getArtifactId()) + .hasEntryWithNameStartingWith("WEB-INF/lib/" + coordinates.getArtifactId()) .doesNotHaveEntryWithName("WEB-INF/layers.idx"); }); } @@ -188,11 +197,12 @@ void whenWarIsRepackagedWithTheLayersDisabledDoesNotContainLayersIndex(MavenBuil void whenWarIsRepackagedWithToolsExclude(MavenBuild mavenBuild) { mavenBuild.project("war-no-tools").execute((project) -> { File repackaged = new File(project, "war/target/war-no-tools-0.0.1.BUILD-SNAPSHOT.war"); + LibraryCoordinates coordinates = JarModeLibrary.TOOLS.getCoordinates(); + assertThat(coordinates).isNotNull(); assertThat(jar(repackaged)).hasEntryWithNameStartingWith("WEB-INF/classes/") .hasEntryWithNameStartingWith("WEB-INF/lib/jar-release") .hasEntryWithNameStartingWith("WEB-INF/lib/jar-snapshot") - .doesNotHaveEntryWithNameStartingWith( - "WEB-INF/lib/" + JarModeLibrary.TOOLS.getCoordinates().getArtifactId()); + .doesNotHaveEntryWithNameStartingWith("WEB-INF/lib/" + coordinates.getArtifactId()); }); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/src/main/java/org/test/TestProfileConfiguration.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/src/main/java/org/test/TestProfileConfiguration.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/src/main/java/org/test/TestProfileConfiguration.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-arguments/src/main/java/org/test/TestProfileConfiguration.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/src/main/java/org/test/SampleRunner.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/src/main/java/org/test/SampleRunner.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/src/main/java/org/test/SampleRunner.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-class-proxy/src/main/java/org/test/SampleRunner.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-compiler-arguments/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-compiler-arguments/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-compiler-arguments/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-compiler-arguments/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-compiler-arguments/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-compiler-arguments/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-compiler-arguments/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-compiler-arguments/src/main/java/org/test/SampleApplication.java diff --git a/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-exclude-devtools/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-exclude-devtools/pom.xml new file mode 100644 index 000000000000..4c7520628f46 --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-exclude-devtools/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + org.springframework.boot.maven.it + aot-exclude-devtools + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + process-aot + + + + + + + + + org.springframework.boot + spring-boot + @project.version@ + + + org.springframework.boot + spring-boot-devtools + @project.version@ + true + + + diff --git a/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-exclude-devtools/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-exclude-devtools/src/main/java/org/test/SampleApplication.java new file mode 100644 index 000000000000..e26ea880dc7a --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-exclude-devtools/src/main/java/org/test/SampleApplication.java @@ -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); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jdk-proxy/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jdk-proxy/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jdk-proxy/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jdk-proxy/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jdk-proxy/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jdk-proxy/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jdk-proxy/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jdk-proxy/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/src/main/java/org/test/TestProfileConfiguration.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/src/main/java/org/test/TestProfileConfiguration.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/src/main/java/org/test/TestProfileConfiguration.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-jvm-arguments/src/main/java/org/test/TestProfileConfiguration.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/module-info.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/module-info.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/module-info.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/module-info.java index 88171fda2660..b5ad64d79bb4 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/module-info.java +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/module-info.java @@ -15,6 +15,6 @@ */ module sampleApp { - requires spring.context; requires spring.boot; + requires spring.context; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-module-info/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-profile/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-profile/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-profile/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-profile/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-profile/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-profile/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-profile/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-profile/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-profile/src/main/java/org/test/TestProfileConfiguration.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-profile/src/main/java/org/test/TestProfileConfiguration.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-profile/src/main/java/org/test/TestProfileConfiguration.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-profile/src/main/java/org/test/TestProfileConfiguration.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-release/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-release/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-release/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-release/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/java/org/test/ResourceRegisteringAotProcessor.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/java/org/test/ResourceRegisteringAotProcessor.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/java/org/test/ResourceRegisteringAotProcessor.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/java/org/test/ResourceRegisteringAotProcessor.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/resources/META-INF/spring/aot.factories b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/resources/META-INF/spring/aot.factories similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/resources/META-INF/spring/aot.factories rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-resource-generation/src/main/resources/META-INF/spring/aot.factories diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/src/main/java/org/test/TestProfileConfiguration.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/src/main/java/org/test/TestProfileConfiguration.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/src/main/java/org/test/TestProfileConfiguration.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-system-properties/src/main/java/org/test/TestProfileConfiguration.java diff --git a/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/pom.xml new file mode 100644 index 000000000000..0d361d64adaf --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + org.springframework.boot.maven.it + aot-test-exclude-devtools + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + process-test-aot + + + + + + + + + org.springframework.boot + spring-boot + @project.version@ + + + org.springframework.boot + spring-boot-devtools + @project.version@ + true + + + + org.springframework.boot + spring-boot-test + @project.version@ + test + + + org.junit.jupiter + junit-jupiter + @junit-jupiter.version@ + test + + + diff --git a/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/src/main/java/org/test/SampleApplication.java new file mode 100644 index 000000000000..e26ea880dc7a --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/src/main/java/org/test/SampleApplication.java @@ -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); + } + +} diff --git a/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/src/test/java/org/test/SampleApplicationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/src/test/java/org/test/SampleApplicationTests.java new file mode 100644 index 000000000000..973696313bf5 --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test-exclude-devtools/src/test/java/org/test/SampleApplicationTests.java @@ -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() { + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test/src/test/java/org/test/SampleApplicationTests.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test/src/test/java/org/test/SampleApplicationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot-test/src/test/java/org/test/SampleApplicationTests.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot-test/src/test/java/org/test/SampleApplicationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/aot/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/aot/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-disable-build-time/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-disable-build-time/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-disable-build-time/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-disable-build-time/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-properties/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-properties/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-properties/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-properties/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-properties/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-properties/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-properties/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-properties/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-time/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-time/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-time/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-time/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-time/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-time/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-time/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-exclude-build-time/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible-epoch-seconds/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible-epoch-seconds/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible-epoch-seconds/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible-epoch-seconds/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible-epoch-seconds/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible-epoch-seconds/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible-epoch-seconds/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible-epoch-seconds/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info-reproducible/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/build-info/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayout.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayout.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayout.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayout.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayoutFactory.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayoutFactory.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayoutFactory.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayoutFactory.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/resources/META-INF/spring.factories b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/resources/META-INF/spring.factories similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/resources/META-INF/spring.factories rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/resources/META-INF/spring.factories diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-include-entry/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-include-entry/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-include-entry/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-include-entry/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-include-entry/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-include-entry/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-classifier/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-classifier/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-classifier/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-classifier/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-snapshot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-snapshot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-snapshot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar-snapshot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/pom.xml diff --git a/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/layers.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/layers.xml new file mode 100644 index 000000000000..a7a3dc82f48b --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/layers.xml @@ -0,0 +1,26 @@ + + + + **/application*.* + + + + + + + + + *:*:*-SNAPSHOT + + + + + my-dependencies-name + snapshot-dependencies + configuration + application + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-executable/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-executable/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/main/resources/application.yml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/main/resources/application.yml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/main/resources/application.yml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/main/resources/application.yml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar-snapshot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar-snapshot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar-snapshot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar-snapshot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-include-entry/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-include-entry/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar-snapshot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar-snapshot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar-snapshot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar-snapshot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-custom/jar/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-layered/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/acme-lib/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/acme-lib/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/acme-lib/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/acme-lib/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/another-acme-lib/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/another-acme-lib/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/another-acme-lib/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/another-acme-lib/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered-disabled/jar/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar-snapshot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar-snapshot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar-snapshot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar-snapshot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-layered/jar/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-default/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-default/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-default/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-default/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-default/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-default/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-exclude/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-exclude/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-exclude/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-exclude/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-exclude/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-no-tools/jar/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-exclude/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-include/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-include/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-include/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-include/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-default/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-include/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-default/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-optional-include/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-output-timestamp/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-output-timestamp/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-output-timestamp/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-output-timestamp/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-exclude/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-output-timestamp/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-exclude/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-output-timestamp/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-pom/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-pom/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-pom/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-pom/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-signed/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-signed/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-signed/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-signed/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-include/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-signed/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-optional-include/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-signed/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-skip/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-skip/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-skip/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-skip/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/sample-1.0.0.jar b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/sample-1.0.0.jar similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/sample-1.0.0.jar rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/sample-1.0.0.jar diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-output-timestamp/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-output-timestamp/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/sample-1.0.0.jar b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/sample-1.0.0.jar similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/sample-1.0.0.jar rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/sample-1.0.0.jar diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-signed/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-signed/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/src/main/kotlin/org/test/SampleApplication.kt b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/src/main/kotlin/org/test/SampleApplication.kt similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/src/main/kotlin/org/test/SampleApplication.kt rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/src/main/kotlin/org/test/SampleApplication.kt diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-layout-property/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-layout-property/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-layout-property/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-layout-property/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-layout-property/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-layout-property/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-layout-property/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-layout-property/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-unpack/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-unpack/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-unpack/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-unpack/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-unpack/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-unpack/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-classic-loader/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-classic-loader/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/jar/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/additional-elements/another/two.txt b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/additional-elements/another/two.txt similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/additional-elements/another/two.txt rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/additional-elements/another/two.txt diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/additional-elements/one.txt b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/additional-elements/one.txt similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/additional-elements/one.txt rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/additional-elements/one.txt diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-directory/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/src/main/additional-jar/resources-1.0.0.jar b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/src/main/additional-jar/resources-1.0.0.jar similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/src/main/additional-jar/resources-1.0.0.jar rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/src/main/additional-jar/resources-1.0.0.jar diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-additional-classpath-jar/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-arguments/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-arguments/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-arguments/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-arguments/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-envargs/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-envargs/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-envargs/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-envargs/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-envargs/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-envargs/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-envargs/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-envargs/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-exclude/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-exclude/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-exclude/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-exclude/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-exclude/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-exclude/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-exclude/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-exclude/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-fork/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-fork/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-fork/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-fork/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-fork/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-fork/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-fork/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-fork/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs-commandline/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs-commandline/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs-commandline/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs-commandline/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs-commandline/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs-commandline/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs-commandline/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs-commandline/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-profiles/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-profiles/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-profiles/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-profiles/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/jdkHome/bin/java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/jdkHome/bin/java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/jdkHome/bin/java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/jdkHome/bin/java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/toolchains.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/toolchains.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/toolchains.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-toolchains/toolchains.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/run/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/run/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/settings.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/settings.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-skip/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/start-stop-skip/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-skip/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/start-stop-skip/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-skip/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/start-stop-skip/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-skip/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/start-stop-skip/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/start-stop/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/start-stop/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/start-stop/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/start-stop/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/test-run/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/test-run/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/test-run/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/test-run/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/test-run/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/test-run/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/test-run/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/test-run/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/test-run/src/test/java/org/test/TestSampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/test-run/src/test/java/org/test/TestSampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/test-run/src/test/java/org/test/TestSampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/test-run/src/test/java/org/test/TestSampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-unpack/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-unpack/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-classifier/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-classifier/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-classifier/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-classifier/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-snapshot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-snapshot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-snapshot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/jar-snapshot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/pom.xml diff --git a/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/layers.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/layers.xml new file mode 100644 index 000000000000..a7a3dc82f48b --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/layers.xml @@ -0,0 +1,26 @@ + + + + **/application*.* + + + + + + + + + *:*:*-SNAPSHOT + + + + + my-dependencies-name + snapshot-dependencies + configuration + application + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/jar-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/jar-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/jar-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/jar-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/jar-snapshot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/jar-snapshot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/jar-snapshot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/jar-snapshot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/jar-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/jar-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/jar-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/jar-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/jar-snapshot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/jar-snapshot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/jar-snapshot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/jar-snapshot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-exclude-entry/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/jar-release/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/jar-release/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/jar-release/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/jar-release/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/jar-snapshot/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/jar-snapshot/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/jar-snapshot/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/jar-snapshot/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-custom/war/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered-disabled/war/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/jar/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/jar/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/jar/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/jar/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/src/main/java/com/example/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-layered/war/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/src/main/java/com/example/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-signed/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-signed/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-signed/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-signed/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-signed/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-no-tools/war/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-signed/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/sample-1.0.0.jar b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/sample-1.0.0.jar similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/sample-1.0.0.jar rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/sample-1.0.0.jar diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-output-timestamp/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-system-scope/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/src/main/java/com/example/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-reactor/war/src/main/java/com/example/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war/pom.xml b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-signed/src/main/java/org/test/SampleApplication.java b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-signed/src/main/java/org/test/SampleApplication.java rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war/src/main/webapp/index.html b/build-plugin/spring-boot-maven-plugin/src/intTest/projects/war/src/main/webapp/index.html similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war/src/main/webapp/index.html rename to build-plugin/spring-boot-maven-plugin/src/intTest/projects/war/src/main/webapp/index.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java index 3adcd5c53616..74681400eb89 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java @@ -44,6 +44,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter; import org.apache.maven.toolchain.ToolchainManager; +import org.jspecify.annotations.Nullable; /** * Abstract base class for AOT processing MOJOs. @@ -59,6 +60,7 @@ public abstract class AbstractAotMojo extends AbstractDependencyFilterMojo { * The current Maven session. This is used for toolchain manager API calls. */ @Parameter(defaultValue = "${session}", readonly = true) + @SuppressWarnings("NullAway.Init") private MavenSession session; /** @@ -76,21 +78,21 @@ public abstract class AbstractAotMojo extends AbstractDependencyFilterMojo { * List of JVM system properties to pass to the AOT process. */ @Parameter - private Map systemPropertyVariables; + private @Nullable Map systemPropertyVariables; /** * JVM arguments that should be associated with the AOT process. On command line, make * sure to wrap multiple values between quotes. */ @Parameter(property = "spring-boot.aot.jvmArguments") - private String jvmArguments; + private @Nullable String jvmArguments; /** * Arguments that should be provided to the AOT compile process. On command line, make * sure to wrap multiple values between quotes. */ @Parameter(property = "spring-boot.aot.compilerArguments") - private String compilerArguments; + private @Nullable String compilerArguments; protected AbstractAotMojo(ToolchainManager toolchainManager) { this.toolchainManager = toolchainManager; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractDependencyFilterMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractDependencyFilterMojo.java similarity index 94% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractDependencyFilterMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractDependencyFilterMojo.java index da70807079fc..ce689c450231 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractDependencyFilterMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractDependencyFilterMojo.java @@ -36,6 +36,7 @@ import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException; import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter; import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts; +import org.jspecify.annotations.Nullable; /** * A base mojo filtering the dependencies of the project. @@ -67,6 +68,7 @@ public abstract class AbstractDependencyFilterMojo extends AbstractMojo { * @since 3.0.0 */ @Parameter(defaultValue = "${project}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") protected MavenProject project; /** @@ -78,7 +80,7 @@ public abstract class AbstractDependencyFilterMojo extends AbstractMojo { * @since 1.2.0 */ @Parameter(property = "spring-boot.includes") - private List includes; + private @Nullable List includes; /** * Collection of artifact definitions to exclude. The {@link Exclude} element defines @@ -89,20 +91,20 @@ public abstract class AbstractDependencyFilterMojo extends AbstractMojo { * @since 1.1.0 */ @Parameter(property = "spring-boot.excludes") - private List excludes; + private @Nullable List excludes; /** * Comma separated list of groupId names to exclude (exact match). * @since 1.1.0 */ @Parameter(property = "spring-boot.excludeGroupIds", defaultValue = "") - private String excludeGroupIds; + private @Nullable String excludeGroupIds; - protected void setExcludes(List excludes) { + protected void setExcludes(@Nullable List excludes) { this.excludes = excludes; } - protected void setIncludes(List includes) { + protected void setIncludes(@Nullable List includes) { this.includes = includes; } @@ -163,7 +165,7 @@ private FilterArtifacts getFilters(ArtifactsFilter... additionalFilters) { return filters; } - private String cleanFilterConfig(String content) { + private String cleanFilterConfig(@Nullable String content) { if (content == null || content.trim().isEmpty()) { return ""; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractPackagerMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractPackagerMojo.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractPackagerMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractPackagerMojo.java index 386be8f8cea4..f4383ab65bd7 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractPackagerMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractPackagerMojo.java @@ -36,6 +36,7 @@ import org.apache.maven.project.MavenProjectHelper; import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter; import org.apache.maven.shared.artifact.filter.collection.ScopeFilter; +import org.jspecify.annotations.Nullable; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -46,7 +47,6 @@ 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; @@ -67,6 +67,7 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo * @since 1.0.0 */ @Parameter(defaultValue = "${project}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") protected MavenProject project; /** @@ -74,6 +75,7 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo * @since 2.4.0 */ @Parameter(defaultValue = "${session}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") protected MavenSession session; /** @@ -88,7 +90,7 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo * @since 1.0.0 */ @Parameter - private String mainClass; + private @Nullable String mainClass; /** * Exclude Spring Boot devtools from the repackaged archive. @@ -115,8 +117,8 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo * Include optional dependencies. * @since 3.5.7 */ - @Parameter(defaultValue = "true") - public boolean includeOptional = true; + @Parameter(defaultValue = "false") + public boolean includeOptional; /** * Include JAR tools. @@ -142,16 +144,7 @@ protected AbstractPackagerMojo(MavenProjectHelper projectHelper) { * @return {@code null}, indicating a layout type will be chosen based on the original * archive type */ - protected LayoutType getLayout() { - return null; - } - - /** - * Return the loader implementation that should be used. - * @return the loader implementation or {@code null} - * @since 3.2.0 - */ - protected LoaderImplementation getLoaderImplementation() { + protected @Nullable LayoutType getLayout() { return null; } @@ -160,7 +153,7 @@ protected LoaderImplementation getLoaderImplementation() { * no explicit layout is set. * @return {@code null}, indicating a default layout factory will be chosen */ - protected LayoutFactory getLayoutFactory() { + protected @Nullable LayoutFactory getLayoutFactory() { return null; } @@ -172,7 +165,6 @@ protected LayoutFactory getLayoutFactory() { */ protected

P getConfiguredPackager(Supplier

supplier) { P packager = supplier.get(); - packager.setLoaderImplementation(getLoaderImplementation()); packager.setLayoutFactory(getLayoutFactory()); packager.addMainClassTimeoutWarningListener(new LoggingMainClassTimeoutWarningListener(this::getLog)); packager.setMainClass(this.mainClass); @@ -218,7 +210,7 @@ private Document getDocumentIfAvailable(File xmlFile) throws Exception { * @return the libraries to use * @throws MojoExecutionException on execution error */ - protected final Libraries getLibraries(Collection unpacks) throws MojoExecutionException { + protected final Libraries getLibraries(@Nullable Collection unpacks) throws MojoExecutionException { Set artifacts = this.project.getArtifacts(); Set includedArtifacts = filterDependencies(artifacts, getAdditionalFilters()); return new ArtifactsLibraries(artifacts, includedArtifacts, this.session.getProjects(), unpacks, getLog()); @@ -248,12 +240,12 @@ private ArtifactsFilter[] getAdditionalFilters() { * @param classifier the artifact classifier * @return the source artifact to repackage */ - protected Artifact getSourceArtifact(String classifier) { + protected Artifact getSourceArtifact(@Nullable String classifier) { Artifact sourceArtifact = getArtifact(classifier); return (sourceArtifact != null) ? sourceArtifact : this.project.getArtifact(); } - private Artifact getArtifact(String classifier) { + private @Nullable Artifact getArtifact(@Nullable String classifier) { if (classifier != null) { for (Artifact attachedArtifact : this.project.getAttachedArtifacts()) { if (classifier.equals(attachedArtifact.getClassifier()) && attachedArtifact.getFile() != null @@ -265,7 +257,7 @@ private Artifact getArtifact(String classifier) { return null; } - protected File getTargetFile(String finalName, String classifier, File targetDirectory) { + protected File getTargetFile(String finalName, @Nullable String classifier, File targetDirectory) { String classifierSuffix = (classifier != null) ? classifier.trim() : ""; if (!classifierSuffix.isEmpty() && !classifierSuffix.startsWith("-")) { classifierSuffix = "-" + classifierSuffix; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java similarity index 93% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java index f15b2408d057..08feb075567f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java @@ -37,6 +37,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.apache.maven.toolchain.ToolchainManager; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.FileUtils; import org.springframework.util.StringUtils; @@ -62,6 +63,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 1.0.0 */ @Parameter(defaultValue = "${project}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") private MavenProject project; /** @@ -70,6 +72,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 2.3.0 */ @Parameter(defaultValue = "${session}", readonly = true) + @SuppressWarnings("NullAway.Init") private MavenSession session; /** @@ -97,6 +100,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 2.2.0 */ @Parameter(property = "spring-boot.run.agents") + @SuppressWarnings("NullAway") // maven-maven-plugin can't handle annotated arrays private File[] agents; /** @@ -114,7 +118,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 1.5.0 */ @Parameter(property = "spring-boot.run.workingDirectory") - private File workingDirectory; + private @Nullable File workingDirectory; /** * JVM arguments that should be associated with the forked process used to run the @@ -123,7 +127,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 1.1.0 */ @Parameter(property = "spring-boot.run.jvmArguments") - private String jvmArguments; + private @Nullable String jvmArguments; /** * List of JVM system properties to pass to the process. @@ -131,7 +135,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 2.1.0 */ @Parameter - private Map systemPropertyVariables; + private @Nullable Map systemPropertyVariables; /** * List of Environment variables that should be associated with the forked process @@ -140,7 +144,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 2.1.0 */ @Parameter - private Map environmentVariables; + private @Nullable Map environmentVariables; /** * Arguments that should be passed to the application. @@ -148,6 +152,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 1.0.0 */ @Parameter + @SuppressWarnings("NullAway") // maven-maven-plugin can't handle annotated arrays private String[] arguments; /** @@ -158,7 +163,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 2.2.3 */ @Parameter(property = "spring-boot.run.arguments") - private String commandlineArguments; + private @Nullable String commandlineArguments; /** * The spring profiles to activate. Convenience shortcut of specifying the @@ -168,6 +173,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 1.3.0 */ @Parameter(property = "spring-boot.run.profiles") + @SuppressWarnings("NullAway") // maven-maven-plugin can't handle annotated arrays private String[] profiles; /** @@ -177,7 +183,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 1.0.0 */ @Parameter(property = "spring-boot.run.main-class") - private String mainClass; + private @Nullable String mainClass; /** * Additional classpath elements that should be added to the classpath. An element can @@ -186,6 +192,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 3.2.0 */ @Parameter(property = "spring-boot.run.additional-classpath-elements") + @SuppressWarnings("NullAway") // maven-maven-plugin can't handle annotated arrays private String[] additionalClasspathElements; /** @@ -195,6 +202,7 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo { * @since 1.0.0 */ @Parameter(defaultValue = "${project.build.outputDirectory}", required = true) + @SuppressWarnings("NullAway.Init") private File classesDirectory; /** @@ -304,7 +312,7 @@ private Map determineEnvironmentVariables() { * @return a {@link RunArguments} defining the JVM arguments */ protected RunArguments resolveJvmArguments() { - List arguments = new ArrayList<>(); + List<@Nullable String> arguments = new ArrayList<>(); if (this.systemPropertyVariables != null) { for (Entry systemProperty : this.systemPropertyVariables.entrySet()) { String argument = SystemPropertyFormatter.format(systemProperty.getKey(), systemProperty.getValue()); @@ -341,7 +349,7 @@ private void addAgents(List args) { } private void addActiveProfileArgument(RunArguments arguments) { - if (this.profiles.length > 0) { + if (this.profiles != null && this.profiles.length > 0) { StringBuilder arg = new StringBuilder("--spring.profiles.active="); for (int i = 0; i < this.profiles.length; i++) { arg.append(this.profiles[i]); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java index d7b50579d637..8ed3efb08b75 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java @@ -29,6 +29,7 @@ import org.apache.maven.model.Dependency; import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.Libraries; import org.springframework.boot.loader.tools.Library; @@ -64,7 +65,7 @@ public class ArtifactsLibraries implements Libraries { private final Collection localProjects; - private final Collection unpacks; + private final @Nullable Collection unpacks; private final Log log; @@ -78,7 +79,7 @@ public class ArtifactsLibraries implements Libraries { * @since 2.4.0 */ public ArtifactsLibraries(Set artifacts, Collection localProjects, - Collection unpacks, Log log) { + @Nullable Collection unpacks, Log log) { this(artifacts, artifacts, localProjects, unpacks, log); } @@ -93,7 +94,7 @@ public ArtifactsLibraries(Set artifacts, Collection loca * @since 2.4.8 */ public ArtifactsLibraries(Set artifacts, Set includedArtifacts, - Collection localProjects, Collection unpacks, Log log) { + Collection localProjects, @Nullable Collection unpacks, Log log) { this.artifacts = artifacts; this.includedArtifacts = includedArtifacts; this.localProjects = localProjects; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageForkMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageForkMojo.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageForkMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageForkMojo.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java similarity index 92% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java index 065db26b039a..24b07f85b932 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageMojo.java @@ -34,6 +34,7 @@ import org.apache.maven.plugin.logging.Log; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProjectHelper; +import org.jspecify.annotations.Nullable; import org.springframework.boot.buildpack.platform.build.AbstractBuildLog; import org.springframework.boot.buildpack.platform.build.BuildLog; @@ -49,7 +50,7 @@ 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; /** @@ -71,13 +72,15 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.3.0 */ @Parameter(defaultValue = "${project.build.directory}", required = true) + @SuppressWarnings("NullAway.Init") private File sourceDirectory; /** * Name of the source archive. * @since 2.3.0 */ - @Parameter(defaultValue = "${project.build.finalName}", readonly = true) + @Parameter(defaultValue = "${project.build.finalName}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") private String finalName; /** @@ -92,7 +95,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.3.0 */ @Parameter - private String classifier; + private @Nullable String classifier; /** * Image configuration, with {@code builder}, {@code runImage}, {@code name}, @@ -101,7 +104,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.3.0 */ @Parameter - private Image image; + private @Nullable Image image; /** * Alias for {@link Image#name} to support configuration through command-line @@ -109,7 +112,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.3.0 */ @Parameter(property = "spring-boot.build-image.imageName") - String imageName; + @Nullable String imageName; /** * Alias for {@link Image#builder} to support configuration through command-line @@ -117,14 +120,14 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.3.0 */ @Parameter(property = "spring-boot.build-image.builder") - String imageBuilder; + @Nullable String imageBuilder; /** * Alias for {@link Image#trustBuilder} to support configuration through command-line * property. */ @Parameter(property = "spring-boot.build-image.trustBuilder") - Boolean trustBuilder; + @Nullable Boolean trustBuilder; /** * Alias for {@link Image#runImage} to support configuration through command-line @@ -132,7 +135,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.3.1 */ @Parameter(property = "spring-boot.build-image.runImage") - String runImage; + @Nullable String runImage; /** * Alias for {@link Image#cleanCache} to support configuration through command-line @@ -140,21 +143,21 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.4.0 */ @Parameter(property = "spring-boot.build-image.cleanCache") - Boolean cleanCache; + @Nullable Boolean cleanCache; /** * Alias for {@link Image#pullPolicy} to support configuration through command-line * property. */ @Parameter(property = "spring-boot.build-image.pullPolicy") - PullPolicy pullPolicy; + @Nullable PullPolicy pullPolicy; /** * Alias for {@link Image#publish} to support configuration through command-line * property. */ @Parameter(property = "spring-boot.build-image.publish") - Boolean publish; + @Nullable Boolean publish; /** * Alias for {@link Image#network} to support configuration through command-line @@ -162,7 +165,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.6.0 */ @Parameter(property = "spring-boot.build-image.network") - String network; + @Nullable String network; /** * Alias for {@link Image#createdDate} to support configuration through command-line @@ -170,7 +173,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 3.1.0 */ @Parameter(property = "spring-boot.build-image.createdDate") - String createdDate; + @Nullable String createdDate; /** * Alias for {@link Image#applicationDirectory} to support configuration through @@ -178,7 +181,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 3.1.0 */ @Parameter(property = "spring-boot.build-image.applicationDirectory") - String applicationDirectory; + @Nullable String applicationDirectory; /** * Alias for {@link Image#imagePlatform} to support configuration through command-line @@ -186,14 +189,14 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 3.4.0 */ @Parameter(property = "spring-boot.build-image.imagePlatform") - String imagePlatform; + @Nullable String imagePlatform; /** * Docker configuration options. * @since 2.4.0 */ @Parameter - private Docker docker; + private @Nullable Docker docker; /** * The type of archive (which corresponds to how the dependencies are laid out inside @@ -202,14 +205,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.3.11 */ @Parameter - private LayoutType layout; - - /** - * The loader implementation that should be used. - * @since 3.2.0 - */ - @Parameter - private LoaderImplementation loaderImplementation; + private @Nullable LayoutType layout; /** * The layout factory that will be used to create the executable archive if no @@ -218,7 +214,7 @@ public abstract class BuildImageMojo extends AbstractPackagerMojo { * @since 2.3.11 */ @Parameter - private LayoutFactory layoutFactory; + private @Nullable LayoutFactory layoutFactory; protected BuildImageMojo(MavenProjectHelper projectHelper) { super(projectHelper); @@ -230,15 +226,10 @@ protected BuildImageMojo(MavenProjectHelper projectHelper) { * is not provided */ @Override - protected LayoutType getLayout() { + protected @Nullable LayoutType getLayout() { return this.layout; } - @Override - protected 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. @@ -246,7 +237,7 @@ protected LoaderImplementation getLoaderImplementation() { * parameter is not provided */ @Override - protected LayoutFactory getLayoutFactory() { + protected @Nullable LayoutFactory getLayoutFactory() { return this.layoutFactory; } @@ -340,7 +331,7 @@ private File getArchiveFile() { * Return the {@link File} to use to back up the original source. * @return the file to use to back up the original source */ - private File getBackupFile() { + private @Nullable File getBackupFile() { // We can't use 'project.getAttachedArtifacts()' because package can be done in a // forked lifecycle and will be null if (this.classifier != null) { @@ -451,11 +442,12 @@ public void writeTo(OutputStream outputStream) throws IOException { } } - 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(); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageNoForkMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageNoForkMojo.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageNoForkMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildImageNoForkMojo.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java index 3e52e8888128..7877a60ad4e5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java @@ -33,6 +33,7 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.Nullable; import org.sonatype.plexus.build.incremental.BuildContext; import org.springframework.boot.loader.tools.BuildPropertiesWriter; @@ -56,18 +57,21 @@ public class BuildInfoMojo extends AbstractMojo { * The Maven session. */ @Parameter(defaultValue = "${session}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") private MavenSession session; /** * The Maven project. */ @Parameter(defaultValue = "${project}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") private MavenProject project; /** * The location of the generated {@code build-info.properties} file. */ @Parameter(defaultValue = "${project.build.outputDirectory}/META-INF/build-info.properties") + @SuppressWarnings("NullAway.Init") private File outputFile; /** @@ -79,14 +83,14 @@ public class BuildInfoMojo extends AbstractMojo { * @since 2.2.0 */ @Parameter(defaultValue = "${project.build.outputTimestamp}") - private String time; + private @Nullable String time; /** * Additional properties to store in the {@code build-info.properties} file. Each * entry is prefixed by {@code build.} in the generated {@code build-info.properties}. */ @Parameter - private Map additionalProperties; + private @Nullable Map additionalProperties; /** * Properties that should be excluded {@code build-info.properties} file. Can be used @@ -95,7 +99,7 @@ public class BuildInfoMojo extends AbstractMojo { * {@code additionalProperties}. */ @Parameter - private List excludeInfoProperties; + private @Nullable List excludeInfoProperties; /** * Skip the execution. @@ -138,11 +142,11 @@ private ProjectDetails getProjectDetails() { return new ProjectDetails(group, artifact, version, name, time, additionalProperties); } - private T getIfNotExcluded(String name, T value) { + private @Nullable T getIfNotExcluded(String name, @Nullable T value) { return (this.excludeInfoProperties == null || !this.excludeInfoProperties.contains(name)) ? value : null; } - private Map applyExclusions(Map source) { + private @Nullable Map applyExclusions(@Nullable Map source) { if (source == null || this.excludeInfoProperties == null) { return source; } @@ -151,7 +155,7 @@ private Map applyExclusions(Map source) { return result; } - private Instant getBuildTime() { + private @Nullable Instant getBuildTime() { if (this.time == null || this.time.isEmpty()) { Date startTime = this.session.getRequest().getStartTime(); return (startTime != null) ? startTime.toInstant() : Instant.now(); diff --git a/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CacheInfo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CacheInfo.java new file mode 100644 index 000000000000..98d23db744bd --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CacheInfo.java @@ -0,0 +1,119 @@ +/* + * 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 org.jspecify.annotations.Nullable; + +import org.springframework.boot.buildpack.platform.build.Cache; +import org.springframework.util.Assert; + +/** + * Encapsulates configuration of an image building cache. + * + * @author Scott Frederick + * @since 2.6.0 + */ +public class CacheInfo { + + private @Nullable Cache cache; + + public CacheInfo() { + } + + private CacheInfo(Cache cache) { + this.cache = cache; + } + + public void setVolume(VolumeCacheInfo info) { + Assert.state(this.cache == null, "Each image building cache can be configured only once"); + String name = info.getName(); + Assert.state(name != null, "'name' must not be null"); + this.cache = Cache.volume(name); + } + + public void setBind(BindCacheInfo info) { + Assert.state(this.cache == null, "Each image building cache can be configured only once"); + String source = info.getSource(); + Assert.state(source != null, "'source' must not be null"); + this.cache = Cache.bind(source); + } + + @Nullable Cache asCache() { + return this.cache; + } + + static CacheInfo fromVolume(VolumeCacheInfo cacheInfo) { + String name = cacheInfo.getName(); + Assert.state(name != null, "'name' must not be null"); + return new CacheInfo(Cache.volume(name)); + } + + static CacheInfo fromBind(BindCacheInfo cacheInfo) { + String source = cacheInfo.getSource(); + Assert.state(source != null, "'source' must not be null"); + return new CacheInfo(Cache.bind(source)); + } + + /** + * Encapsulates configuration of an image building cache stored in a volume. + */ + public static class VolumeCacheInfo { + + private @Nullable String name; + + public VolumeCacheInfo() { + } + + VolumeCacheInfo(String name) { + this.name = name; + } + + public @Nullable String getName() { + return this.name; + } + + void setName(@Nullable String name) { + this.name = name; + } + + } + + /** + * Encapsulates configuration of an image building cache stored in a bind mount. + */ + public static class BindCacheInfo { + + private @Nullable String source; + + public BindCacheInfo() { + } + + BindCacheInfo(String name) { + this.source = name; + } + + public @Nullable String getSource() { + return this.source; + } + + void setSource(@Nullable String source) { + this.source = source; + } + + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ClassPath.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ClassPath.java similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ClassPath.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ClassPath.java index d4d8a6098e8b..0b65402e8502 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ClassPath.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ClassPath.java @@ -33,6 +33,8 @@ import java.util.stream.Collector; import java.util.stream.Collectors; +import org.jspecify.annotations.Nullable; + import org.springframework.util.StringUtils; /** @@ -125,12 +127,12 @@ static ClassPath of(List urls) { * @param urls the class path URLs * @return a new {@link ClassPath} instance */ - static ClassPath of(UnaryOperator getSystemProperty, List urls) { + static ClassPath of(UnaryOperator<@Nullable String> getSystemProperty, List urls) { boolean preferArgFile = urls.size() > 1 && isWindows(getSystemProperty); return new ClassPath(preferArgFile, urls.stream().map(ClassPath::toPathString).collect(JOIN_BY_PATH_SEPARATOR)); } - private static boolean isWindows(UnaryOperator getSystemProperty) { + private static boolean isWindows(UnaryOperator<@Nullable String> getSystemProperty) { String os = getSystemProperty.apply("os.name"); return StringUtils.hasText(os) && os.toLowerCase(Locale.ROOT).contains("win"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CommandLineBuilder.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CommandLineBuilder.java similarity index 85% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CommandLineBuilder.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CommandLineBuilder.java index 2e48c4f8891f..045a9aad877a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CommandLineBuilder.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CommandLineBuilder.java @@ -24,6 +24,8 @@ import java.util.Map.Entry; import java.util.Objects; +import org.jspecify.annotations.Nullable; + import org.springframework.util.StringUtils; /** @@ -49,14 +51,15 @@ static CommandLineBuilder forMainClass(String mainClass) { return new CommandLineBuilder(mainClass); } - CommandLineBuilder withJvmArguments(String... jvmArguments) { + // Do not use String @Nullable ... jvmArguments, Maven can't deal with that + CommandLineBuilder withJvmArguments(@Nullable String... jvmArguments) { if (jvmArguments != null) { this.options.addAll(Arrays.stream(jvmArguments).filter(Objects::nonNull).toList()); } return this; } - CommandLineBuilder withSystemProperties(Map systemProperties) { + CommandLineBuilder withSystemProperties(@Nullable Map systemProperties) { if (systemProperties != null) { for (Entry systemProperty : systemProperties.entrySet()) { String option = SystemPropertyFormatter.format(systemProperty.getKey(), systemProperty.getValue()); @@ -73,7 +76,8 @@ CommandLineBuilder withClasspath(URL... elements) { return this; } - CommandLineBuilder withArguments(String... arguments) { + // Do not use String @Nullable ... arguments, Maven can't deal with that + CommandLineBuilder withArguments(@Nullable String... arguments) { if (arguments != null) { this.arguments.addAll(Arrays.stream(arguments).filter(Objects::nonNull).toList()); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CustomLayersProvider.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CustomLayersProvider.java similarity index 98% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CustomLayersProvider.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CustomLayersProvider.java index f1c17b533935..5bc0fe8f513e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CustomLayersProvider.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/CustomLayersProvider.java @@ -29,6 +29,7 @@ import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; +import org.jspecify.annotations.Nullable; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -157,7 +158,7 @@ private List getChildNodeTextContent(Element element, String tagName) { return patterns; } - private Element getChildElement(Element element, String tagName) { + private @Nullable Element getChildElement(Element element, String tagName) { NodeList nodes = element.getElementsByTagName(tagName); if (nodes.getLength() == 0) { return null; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/DependencyFilter.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/DependencyFilter.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/DependencyFilter.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/DependencyFilter.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Docker.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Docker.java similarity index 78% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Docker.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Docker.java index f86c1cbea5c4..5a95ddf613c7 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Docker.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Docker.java @@ -17,9 +17,11 @@ package org.springframework.boot.maven; import org.apache.maven.plugin.logging.Log; +import org.jspecify.annotations.Nullable; import org.springframework.boot.buildpack.platform.build.BuilderDockerConfiguration; import org.springframework.boot.buildpack.platform.docker.configuration.DockerRegistryAuthentication; +import org.springframework.util.Assert; /** * Docker configuration options. @@ -30,29 +32,29 @@ */ public class Docker { - private String host; + private @Nullable String host; - private String context; + private @Nullable String context; private boolean tlsVerify; - private String certPath; + private @Nullable String certPath; private boolean bindHostToBuilder; - private DockerRegistry builderRegistry; + private @Nullable DockerRegistry builderRegistry; - private DockerRegistry publishRegistry; + private @Nullable DockerRegistry publishRegistry; /** * The host address of the Docker daemon. * @return the Docker host */ - public String getHost() { + public @Nullable String getHost() { return this.host; } - void setHost(String host) { + void setHost(@Nullable String host) { this.host = host; } @@ -60,11 +62,11 @@ void setHost(String host) { * The Docker context to use to retrieve host configuration. * @return the Docker context */ - public String getContext() { + public @Nullable String getContext() { return this.context; } - public void setContext(String context) { + public void setContext(@Nullable String context) { this.context = context; } @@ -85,11 +87,11 @@ void setTlsVerify(boolean tlsVerify) { * Docker daemon. * @return the TLS certificate path */ - public String getCertPath() { + public @Nullable String getCertPath() { return this.certPath; } - void setCertPath(String certPath) { + void setCertPath(@Nullable String certPath) { this.certPath = certPath; } @@ -109,7 +111,7 @@ void setBindHostToBuilder(boolean bindHostToBuilder) { * Configuration of the Docker registry where builder and run images are stored. * @return the registry configuration */ - DockerRegistry getBuilderRegistry() { + @Nullable DockerRegistry getBuilderRegistry() { return this.builderRegistry; } @@ -118,7 +120,7 @@ DockerRegistry getBuilderRegistry() { * registry. * @param builderRegistry the registry configuration */ - void setBuilderRegistry(DockerRegistry builderRegistry) { + void setBuilderRegistry(@Nullable DockerRegistry builderRegistry) { this.builderRegistry = builderRegistry; } @@ -126,7 +128,7 @@ void setBuilderRegistry(DockerRegistry builderRegistry) { * Configuration of the Docker registry where the generated image will be published. * @return the registry configuration */ - DockerRegistry getPublishRegistry() { + @Nullable DockerRegistry getPublishRegistry() { return this.publishRegistry; } @@ -135,7 +137,7 @@ DockerRegistry getPublishRegistry() { * registry. * @param builderRegistry the registry configuration */ - void setPublishRegistry(DockerRegistry builderRegistry) { + void setPublishRegistry(@Nullable DockerRegistry builderRegistry) { this.publishRegistry = builderRegistry; } @@ -189,17 +191,22 @@ private BuilderDockerConfiguration customizePublishAuthentication(Log log, getRegistryAuthentication("publish", this.publishRegistry, authentication)); } - private DockerRegistryAuthentication getRegistryAuthentication(String type, DockerRegistry registry, + private DockerRegistryAuthentication getRegistryAuthentication(String type, @Nullable DockerRegistry registry, DockerRegistryAuthentication fallback) { if (registry == null || registry.isEmpty()) { return fallback; } if (registry.hasTokenAuth() && !registry.hasUserAuth()) { - return DockerRegistryAuthentication.token(registry.getToken()); + String token = registry.getToken(); + Assert.state(token != null, "'token' must not be null"); + return DockerRegistryAuthentication.token(token); } if (registry.hasUserAuth() && !registry.hasTokenAuth()) { - return DockerRegistryAuthentication.user(registry.getUsername(), registry.getPassword(), registry.getUrl(), - registry.getEmail()); + String username = registry.getUsername(); + String password = registry.getPassword(); + Assert.state(username != null, "'username' must not be null"); + Assert.state(password != null, "'password' must not be null"); + return DockerRegistryAuthentication.user(username, password, registry.getUrl(), registry.getEmail()); } throw new IllegalArgumentException("Invalid Docker " + type + " registry configuration, either token or username/password must be provided"); @@ -210,20 +217,21 @@ private DockerRegistryAuthentication getRegistryAuthentication(String type, Dock */ public static class DockerRegistry { - private String username; + private @Nullable String username; - private String password; + private @Nullable String password; - private String url; + private @Nullable String url; - private String email; + private @Nullable String email; - private String token; + private @Nullable String token; public DockerRegistry() { } - public DockerRegistry(String username, String password, String url, String email) { + public DockerRegistry(@Nullable String username, @Nullable String password, @Nullable String url, + @Nullable String email) { this.username = username; this.password = password; this.url = url; @@ -238,11 +246,11 @@ public DockerRegistry(String token) { * The username that will be used for user authentication to the registry. * @return the username */ - public String getUsername() { + public @Nullable String getUsername() { return this.username; } - void setUsername(String username) { + void setUsername(@Nullable String username) { this.username = username; } @@ -250,11 +258,11 @@ void setUsername(String username) { * The password that will be used for user authentication to the registry. * @return the password */ - public String getPassword() { + public @Nullable String getPassword() { return this.password; } - void setPassword(String password) { + void setPassword(@Nullable String password) { this.password = password; } @@ -262,11 +270,11 @@ void setPassword(String password) { * The email address that will be used for user authentication to the registry. * @return the email address */ - public String getEmail() { + public @Nullable String getEmail() { return this.email; } - void setEmail(String email) { + void setEmail(@Nullable String email) { this.email = email; } @@ -274,11 +282,11 @@ void setEmail(String email) { * The URL of the registry. * @return the registry URL */ - String getUrl() { + @Nullable String getUrl() { return this.url; } - void setUrl(String url) { + void setUrl(@Nullable String url) { this.url = url; } @@ -286,11 +294,11 @@ void setUrl(String url) { * The token that will be used for token authentication to the registry. * @return the authentication token */ - public String getToken() { + public @Nullable String getToken() { return this.token; } - void setToken(String token) { + void setToken(@Nullable String token) { this.token = token; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/EnvVariables.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/EnvVariables.java similarity index 87% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/EnvVariables.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/EnvVariables.java index a26f04c7f7ab..0a2b458d3f88 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/EnvVariables.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/EnvVariables.java @@ -22,6 +22,8 @@ import java.util.List; import java.util.Map; +import org.jspecify.annotations.Nullable; + /** * Utility class for working with Env variables. * @@ -31,11 +33,11 @@ class EnvVariables { private final Map variables; - EnvVariables(Map variables) { + EnvVariables(@Nullable Map variables) { this.variables = parseEnvVariables(variables); } - private static Map parseEnvVariables(Map args) { + private static Map parseEnvVariables(@Nullable Map args) { if (args == null || args.isEmpty()) { return Collections.emptyMap(); } @@ -48,7 +50,7 @@ private static Map parseEnvVariables(Map args) { return result; } - private static String getValue(String value) { + private static String getValue(@Nullable String value) { return (value != null) ? value : ""; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Exclude.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Exclude.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Exclude.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Exclude.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ExcludeFilter.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ExcludeFilter.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ExcludeFilter.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ExcludeFilter.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/FilterableDependency.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/FilterableDependency.java similarity index 89% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/FilterableDependency.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/FilterableDependency.java index 5960233aece2..0324c8791fbb 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/FilterableDependency.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/FilterableDependency.java @@ -17,6 +17,7 @@ package org.springframework.boot.maven; import org.apache.maven.plugins.annotations.Parameter; +import org.jspecify.annotations.Nullable; import org.springframework.util.Assert; @@ -33,19 +34,21 @@ public abstract class FilterableDependency { * The groupId of the artifact to exclude. */ @Parameter(required = true) + @SuppressWarnings("NullAway.Init") private String groupId; /** * The artifactId of the artifact to exclude. */ @Parameter(required = true) + @SuppressWarnings("NullAway.Init") private String artifactId; /** * The classifier of the artifact to exclude. */ @Parameter - private String classifier; + private @Nullable String classifier; String getGroupId() { return this.groupId; @@ -63,11 +66,11 @@ void setArtifactId(String artifactId) { this.artifactId = artifactId; } - String getClassifier() { + @Nullable String getClassifier() { return this.classifier; } - void setClassifier(String classifier) { + void setClassifier(@Nullable String classifier) { this.classifier = classifier; } diff --git a/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Image.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Image.java new file mode 100644 index 000000000000..42e7f7ca4cdb --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Image.java @@ -0,0 +1,316 @@ +/* + * 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.List; +import java.util.Map; +import java.util.function.Function; + +import org.apache.maven.artifact.Artifact; +import org.jspecify.annotations.Nullable; + +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.type.Binding; +import org.springframework.boot.buildpack.platform.docker.type.ImageName; +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; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +/** + * Image configuration options. + * + * @author Phillip Webb + * @author Scott Frederick + * @author Jeroen Meijer + * @author Rafael Ceccone + * @author Julian Liebig + * @since 2.3.0 + */ +public class Image { + + @Nullable String name; + + @Nullable String builder; + + @Nullable Boolean trustBuilder; + + @Nullable String runImage; + + @Nullable Map env; + + @Nullable Boolean cleanCache; + + boolean verboseLogging; + + @Nullable PullPolicy pullPolicy; + + @Nullable Boolean publish; + + @Nullable List buildpacks; + + @Nullable List bindings; + + @Nullable String network; + + @Nullable List tags; + + @Nullable CacheInfo buildWorkspace; + + @Nullable CacheInfo buildCache; + + @Nullable CacheInfo launchCache; + + @Nullable String createdDate; + + @Nullable String applicationDirectory; + + @Nullable List securityOptions; + + @Nullable String imagePlatform; + + /** + * The name of the created image. + * @return the image name + */ + public @Nullable String getName() { + return this.name; + } + + void setName(@Nullable String name) { + this.name = name; + } + + /** + * The name of the builder image to use to create the image. + * @return the builder image name + */ + public @Nullable String getBuilder() { + return this.builder; + } + + void setBuilder(@Nullable String builder) { + this.builder = builder; + } + + /** + * If the builder should be treated as trusted. + * @return {@code true} if the builder should be treated as trusted + */ + public @Nullable Boolean getTrustBuilder() { + return this.trustBuilder; + } + + void setTrustBuilder(@Nullable Boolean trustBuilder) { + this.trustBuilder = trustBuilder; + } + + /** + * The name of the run image to use to create the image. + * @return the builder image name + */ + public @Nullable String getRunImage() { + return this.runImage; + } + + void setRunImage(@Nullable String runImage) { + this.runImage = runImage; + } + + /** + * Environment properties that should be passed to the builder. + * @return the environment properties + */ + public @Nullable Map getEnv() { + return this.env; + } + + /** + * If the cache should be cleaned before building. + * @return {@code true} if the cache should be cleaned + */ + public @Nullable Boolean getCleanCache() { + return this.cleanCache; + } + + void setCleanCache(@Nullable Boolean cleanCache) { + this.cleanCache = cleanCache; + } + + /** + * If verbose logging is required. + * @return {@code true} for verbose logging + */ + public boolean isVerboseLogging() { + return this.verboseLogging; + } + + /** + * If images should be pulled from a remote repository during image build. + * @return the pull policy + */ + public @Nullable PullPolicy getPullPolicy() { + return this.pullPolicy; + } + + void setPullPolicy(@Nullable PullPolicy pullPolicy) { + this.pullPolicy = pullPolicy; + } + + /** + * If the built image should be pushed to a registry. + * @return {@code true} if the image should be published + */ + public @Nullable Boolean getPublish() { + return this.publish; + } + + void setPublish(@Nullable Boolean publish) { + this.publish = publish; + } + + /** + * Returns the network the build container will connect to. + * @return the network + */ + public @Nullable String getNetwork() { + return this.network; + } + + public void setNetwork(@Nullable String network) { + this.network = network; + } + + /** + * Returns the created date for the image. + * @return the created date + */ + public @Nullable String getCreatedDate() { + return this.createdDate; + } + + public void setCreatedDate(@Nullable String createdDate) { + this.createdDate = createdDate; + } + + /** + * Returns the application content directory for the image. + * @return the application directory + */ + public @Nullable String getApplicationDirectory() { + return this.applicationDirectory; + } + + public void setApplicationDirectory(@Nullable String applicationDirectory) { + this.applicationDirectory = applicationDirectory; + } + + /** + * Returns the platform (os/architecture/variant) that will be used for all pulled + * images. When {@code null}, the system will choose a platform based on the host + * operating system and architecture. + * @return the image platform + */ + public @Nullable String getImagePlatform() { + return this.imagePlatform; + } + + public void setImagePlatform(@Nullable String imagePlatform) { + this.imagePlatform = imagePlatform; + } + + BuildRequest getBuildRequest(Artifact artifact, Function applicationContent) { + return customize(BuildRequest.of(getOrDeduceName(artifact), applicationContent)); + } + + private ImageReference getOrDeduceName(Artifact artifact) { + if (StringUtils.hasText(this.name)) { + return ImageReference.of(this.name); + } + ImageName imageName = ImageName.of(artifact.getArtifactId()); + return ImageReference.of(imageName, artifact.getVersion()); + } + + private BuildRequest customize(BuildRequest request) { + if (StringUtils.hasText(this.builder)) { + request = request.withBuilder(ImageReference.of(this.builder)); + } + if (this.trustBuilder != null) { + request = request.withTrustBuilder(this.trustBuilder); + } + if (StringUtils.hasText(this.runImage)) { + request = request.withRunImage(ImageReference.of(this.runImage)); + } + if (!CollectionUtils.isEmpty(this.env)) { + request = request.withEnv(this.env); + } + if (this.cleanCache != null) { + request = request.withCleanCache(this.cleanCache); + } + request = request.withVerboseLogging(this.verboseLogging); + if (this.pullPolicy != null) { + request = request.withPullPolicy(this.pullPolicy); + } + if (this.publish != null) { + request = request.withPublish(this.publish); + } + if (!CollectionUtils.isEmpty(this.buildpacks)) { + request = request.withBuildpacks(this.buildpacks.stream().map(BuildpackReference::of).toList()); + } + if (!CollectionUtils.isEmpty(this.bindings)) { + request = request.withBindings(this.bindings.stream().map(Binding::of).toList()); + } + request = request.withNetwork(this.network); + if (!CollectionUtils.isEmpty(this.tags)) { + request = request.withTags(this.tags.stream().map(ImageReference::of).toList()); + } + if (this.buildWorkspace != null) { + Cache cache = this.buildWorkspace.asCache(); + Assert.state(cache != null, "'cache' must not be null"); + request = request.withBuildWorkspace(cache); + } + if (this.buildCache != null) { + Cache cache = this.buildCache.asCache(); + Assert.state(cache != null, "'cache' must not be null"); + request = request.withBuildCache(cache); + } + if (this.launchCache != null) { + Cache cache = this.launchCache.asCache(); + Assert.state(cache != null, "'cache' must not be null"); + request = request.withLaunchCache(cache); + } + if (StringUtils.hasText(this.createdDate)) { + request = request.withCreatedDate(this.createdDate); + } + if (StringUtils.hasText(this.applicationDirectory)) { + request = request.withApplicationDirectory(this.applicationDirectory); + } + if (this.securityOptions != null) { + request = request.withSecurityOptions(this.securityOptions); + } + if (StringUtils.hasText(this.imagePlatform)) { + request = request.withImagePlatform(this.imagePlatform); + } + return request; + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Include.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Include.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Include.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Include.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/IncludeFilter.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/IncludeFilter.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/IncludeFilter.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/IncludeFilter.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JarTypeFilter.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JarTypeFilter.java similarity index 93% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JarTypeFilter.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JarTypeFilter.java index c9b0765ebaf5..445debcb6737 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JarTypeFilter.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JarTypeFilter.java @@ -34,8 +34,8 @@ */ class JarTypeFilter extends DependencyFilter { - private static final Set EXCLUDED_JAR_TYPES = Collections - .unmodifiableSet(new HashSet<>(Arrays.asList("annotation-processor", "dependencies-starter"))); + private static final Set EXCLUDED_JAR_TYPES = Collections.unmodifiableSet( + new HashSet<>(Arrays.asList("annotation-processor", "dependencies-starter", "development-tool"))); JarTypeFilter() { super(Collections.emptyList()); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaCompilerPluginConfiguration.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaCompilerPluginConfiguration.java similarity index 82% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaCompilerPluginConfiguration.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaCompilerPluginConfiguration.java index 43612027a74a..33e8f0f8dd80 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaCompilerPluginConfiguration.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaCompilerPluginConfiguration.java @@ -21,6 +21,9 @@ import org.apache.maven.model.Plugin; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.jspecify.annotations.Nullable; + +import org.springframework.lang.Contract; /** * Provides access to the Maven Java Compiler plugin configuration. @@ -35,7 +38,7 @@ class JavaCompilerPluginConfiguration { this.project = project; } - String getSourceMajorVersion() { + @Nullable String getSourceMajorVersion() { String version = getConfigurationValue("source"); if (version == null) { @@ -45,7 +48,7 @@ String getSourceMajorVersion() { return majorVersionFor(version); } - String getTargetMajorVersion() { + @Nullable String getTargetMajorVersion() { String version = getConfigurationValue("target"); if (version == null) { @@ -55,7 +58,7 @@ String getTargetMajorVersion() { return majorVersionFor(version); } - String getReleaseVersion() { + @Nullable String getReleaseVersion() { String version = getConfigurationValue("release"); if (version == null) { @@ -65,7 +68,7 @@ String getReleaseVersion() { return majorVersionFor(version); } - private String getConfigurationValue(String propertyName) { + private @Nullable String getConfigurationValue(String propertyName) { Plugin plugin = this.project.getPlugin("org.apache.maven.plugins:maven-compiler-plugin"); if (plugin != null) { Object pluginConfiguration = plugin.getConfiguration(); @@ -76,14 +79,14 @@ private String getConfigurationValue(String propertyName) { return null; } - private String getPropertyValue(String propertyName) { + private @Nullable String getPropertyValue(String propertyName) { if (this.project.getProperties().containsKey(propertyName)) { return this.project.getProperties().get(propertyName).toString(); } return null; } - private String getNodeValue(Xpp3Dom dom, String... childNames) { + private @Nullable String getNodeValue(Xpp3Dom dom, String... childNames) { Xpp3Dom childNode = dom.getChild(childNames[0]); if (childNode == null) { @@ -97,7 +100,8 @@ private String getNodeValue(Xpp3Dom dom, String... childNames) { return childNode.getValue(); } - private String majorVersionFor(String version) { + @Contract("!null -> !null") + private @Nullable String majorVersionFor(@Nullable String version) { if (version != null && version.startsWith("1.")) { return version.substring("1.".length()); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaProcessExecutor.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaProcessExecutor.java similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaProcessExecutor.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaProcessExecutor.java index 28a019d61407..3b1d7f793278 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaProcessExecutor.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/JavaProcessExecutor.java @@ -26,6 +26,7 @@ import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.toolchain.Toolchain; import org.apache.maven.toolchain.ToolchainManager; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.JavaExecutable; import org.springframework.boot.loader.tools.RunProcess; @@ -43,14 +44,14 @@ class JavaProcessExecutor { private final ToolchainManager toolchainManager; - private final Consumer runProcessCustomizer; + private final @Nullable Consumer runProcessCustomizer; JavaProcessExecutor(MavenSession mavenSession, ToolchainManager toolchainManager) { this(mavenSession, toolchainManager, null); } private JavaProcessExecutor(MavenSession mavenSession, ToolchainManager toolchainManager, - Consumer runProcessCustomizer) { + @Nullable Consumer runProcessCustomizer) { this.mavenSession = mavenSession; this.toolchainManager = toolchainManager; this.runProcessCustomizer = runProcessCustomizer; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Layers.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Layers.java similarity index 88% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Layers.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Layers.java index 28ec52102b6d..9ac86ff3b1a1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Layers.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/Layers.java @@ -18,6 +18,8 @@ import java.io.File; +import org.jspecify.annotations.Nullable; + /** * Layer configuration options. * @@ -28,7 +30,7 @@ public class Layers { private boolean enabled = true; - private File configuration; + private @Nullable File configuration; /** * Whether a {@code layers.idx} file should be added to the jar. @@ -44,11 +46,11 @@ public boolean isEnabled() { * {@code snapshot-dependencies} and {@code dependencies}. * @return the layers configuration file */ - public File getConfiguration() { + public @Nullable File getConfiguration() { return this.configuration; } - public void setConfiguration(File configuration) { + public void setConfiguration(@Nullable File configuration) { this.configuration = configuration; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/LoggingMainClassTimeoutWarningListener.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/LoggingMainClassTimeoutWarningListener.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/LoggingMainClassTimeoutWarningListener.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/LoggingMainClassTimeoutWarningListener.java index 04d1e68e30b6..fa9805c57144 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/LoggingMainClassTimeoutWarningListener.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/LoggingMainClassTimeoutWarningListener.java @@ -19,6 +19,7 @@ import java.util.function.Supplier; import org.apache.maven.plugin.logging.Log; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.Packager.MainClassTimeoutWarningListener; @@ -36,7 +37,7 @@ class LoggingMainClassTimeoutWarningListener implements MainClassTimeoutWarningL } @Override - public void handleTimeoutWarning(long duration, String mainMethod) { + public void handleTimeoutWarning(long duration, @Nullable String mainMethod) { this.log.get() .warn("Searching for the main-class is taking some time, " + "consider using the mainClass configuration parameter"); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MatchingGroupIdFilter.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MatchingGroupIdFilter.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MatchingGroupIdFilter.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MatchingGroupIdFilter.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java similarity index 94% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java index 2bf9f613fa7b..8ba41302b47d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/MavenBuildOutputTimestamp.java @@ -22,6 +22,8 @@ import java.time.ZoneOffset; import java.time.format.DateTimeParseException; +import org.jspecify.annotations.Nullable; + import org.springframework.util.StringUtils; /** @@ -42,13 +44,13 @@ class MavenBuildOutputTimestamp { private static final Instant DATE_MAX = Instant.parse("2099-12-31T23:59:59Z"); - private final String timestamp; + private final @Nullable String timestamp; /** * Creates a new {@link MavenBuildOutputTimestamp}. * @param timestamp timestamp or {@code null} */ - MavenBuildOutputTimestamp(String timestamp) { + MavenBuildOutputTimestamp(@Nullable String timestamp) { this.timestamp = timestamp; } @@ -59,7 +61,7 @@ class MavenBuildOutputTimestamp { * integer, or it's not within the valid range 1980-01-01T00:00:02Z to * 2099-12-31T23:59:59Z */ - FileTime toFileTime() { + @Nullable FileTime toFileTime() { Instant instant = toInstant(); if (instant == null) { return null; @@ -74,7 +76,7 @@ FileTime toFileTime() { * integer, or it's not within the valid range 1980-01-01T00:00:02Z to * 2099-12-31T23:59:59Z */ - Instant toInstant() { + @Nullable Instant toInstant() { if (!StringUtils.hasLength(this.timestamp)) { return null; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java index c6c940e4e2b7..d5d13895ccd4 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java @@ -28,6 +28,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.toolchain.ToolchainManager; +import org.jspecify.annotations.Nullable; import org.springframework.util.ObjectUtils; @@ -50,24 +51,28 @@ public class ProcessAotMojo extends AbstractAotMojo { * the archive. */ @Parameter(defaultValue = "${project.build.outputDirectory}", required = true) + @SuppressWarnings("NullAway.Init") private File classesDirectory; /** * Directory containing the generated sources. */ @Parameter(defaultValue = "${project.build.directory}/spring-aot/main/sources", required = true) + @SuppressWarnings("NullAway.Init") private File generatedSources; /** * Directory containing the generated resources. */ @Parameter(defaultValue = "${project.build.directory}/spring-aot/main/resources", required = true) + @SuppressWarnings("NullAway.Init") private File generatedResources; /** * Directory containing the generated classes. */ @Parameter(defaultValue = "${project.build.directory}/spring-aot/main/classes", required = true) + @SuppressWarnings("NullAway.Init") private File generatedClasses; /** @@ -75,18 +80,20 @@ public class ProcessAotMojo extends AbstractAotMojo { * the first compiled class found that contains a 'main' method will be used. */ @Parameter(property = "spring-boot.aot.main-class") - private String mainClass; + private @Nullable String mainClass; /** * Application arguments that should be taken into account for AOT processing. */ @Parameter + @SuppressWarnings("NullAway") // maven-maven-plugin can't handle annotated arrays private String[] arguments; /** * Spring profiles to take into account for AOT processing. */ @Parameter + @SuppressWarnings("NullAway") // maven-maven-plugin can't handle annotated arrays private String[] profiles; @Inject @@ -123,7 +130,7 @@ private String[] getAotArguments(String applicationClass) { 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() { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java index 8cf523bdf114..b88e15ce77ea 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java @@ -71,6 +71,7 @@ public class ProcessTestAotMojo extends AbstractAotMojo { * the archive. */ @Parameter(defaultValue = "${project.build.testOutputDirectory}", required = true) + @SuppressWarnings("NullAway.Init") private File testClassesDirectory; /** @@ -78,30 +79,35 @@ public class ProcessTestAotMojo extends AbstractAotMojo { * tests. */ @Parameter(defaultValue = "${project.build.outputDirectory}", required = true) + @SuppressWarnings("NullAway.Init") private File classesDirectory; /** * Directory containing the generated sources. */ @Parameter(defaultValue = "${project.build.directory}/spring-aot/test/sources", required = true) + @SuppressWarnings("NullAway.Init") private File generatedSources; /** * Directory containing the generated test resources. */ @Parameter(defaultValue = "${project.build.directory}/spring-aot/test/resources", required = true) + @SuppressWarnings("NullAway.Init") private File generatedResources; /** * Directory containing the generated test classes. */ @Parameter(defaultValue = "${project.build.directory}/spring-aot/test/classes", required = true) + @SuppressWarnings("NullAway.Init") private File generatedTestClasses; /** * Directory containing the generated test classes. */ @Parameter(defaultValue = "${project.build.directory}/spring-aot/main/classes", required = true) + @SuppressWarnings("NullAway.Init") private File generatedClasses; private final RepositorySystem repositorySystem; @@ -148,7 +154,7 @@ private String[] getAotArguments() { 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; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/PropertiesMergingResourceTransformer.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/PropertiesMergingResourceTransformer.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/PropertiesMergingResourceTransformer.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/PropertiesMergingResourceTransformer.java index c324b72137d4..aa56e026f0a6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/PropertiesMergingResourceTransformer.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/PropertiesMergingResourceTransformer.java @@ -25,6 +25,9 @@ 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 Maven @@ -38,7 +41,7 @@ public class PropertiesMergingResourceTransformer implements ReproducibleResourceTransformer { // Set this in pom configuration with ... - private String resource; + private @Nullable String resource; private final Properties data = new Properties(); @@ -87,6 +90,7 @@ public boolean hasTransformedResource() { @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); @@ -95,11 +99,11 @@ public void modifyOutputStream(JarOutputStream os) throws IOException { this.data.clear(); } - public String getResource() { + public @Nullable String getResource() { return this.resource; } - public void setResource(String resource) { + public void setResource(@Nullable String resource) { this.resource = resource; } diff --git a/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RepackageMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RepackageMojo.java new file mode 100644 index 000000000000..781fd69b11e7 --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RepackageMojo.java @@ -0,0 +1,254 @@ +/* + * 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.io.File; +import java.io.IOException; +import java.nio.file.attribute.FileTime; +import java.util.List; +import java.util.regex.Pattern; + +import javax.inject.Inject; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.model.Dependency; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProjectHelper; +import org.jspecify.annotations.Nullable; + +import org.springframework.boot.loader.tools.LayoutFactory; +import org.springframework.boot.loader.tools.Libraries; +import org.springframework.boot.loader.tools.Repackager; +import org.springframework.lang.Contract; + +/** + * Repackage existing JAR and WAR archives so that they can be executed from the command + * line using {@literal java -jar}. With layout=NONE can also be used simply + * to package a JAR with nested dependencies (and no main class, so not executable). + * + * @author Phillip Webb + * @author Dave Syer + * @author Stephane Nicoll + * @author Björn Lindström + * @author Scott Frederick + * @since 1.0.0 + */ +@Mojo(name = "repackage", defaultPhase = LifecyclePhase.PACKAGE, requiresProject = true, threadSafe = true, + requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, + requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME) +public class RepackageMojo extends AbstractPackagerMojo { + + private static final Pattern WHITE_SPACE_PATTERN = Pattern.compile("\\s+"); + + /** + * Directory containing the generated archive. + * @since 1.0.0 + */ + @Parameter(defaultValue = "${project.build.directory}", required = true) + @SuppressWarnings("NullAway.Init") + private File outputDirectory; + + /** + * Name of the generated archive. + * @since 1.0.0 + */ + @Parameter(defaultValue = "${project.build.finalName}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") + private String finalName; + + /** + * Skip the execution. + * @since 1.2.0 + */ + @Parameter(property = "spring-boot.repackage.skip", defaultValue = "false") + private boolean skip; + + /** + * Classifier to add to the repackaged archive. If not given, the main artifact will + * be replaced by the repackaged archive. If given, the classifier will also be used + * to determine the source archive to repackage: if an artifact with that classifier + * already exists, it will be used as source and replaced. If no such artifact exists, + * the main artifact will be used as source and the repackaged archive will be + * attached as a supplemental artifact with that classifier. Attaching the artifact + * allows to deploy it alongside to the original one, see the Maven documentation for more details. + * @since 1.0.0 + */ + @Parameter + private @Nullable String classifier; + + /** + * Attach the repackaged archive to be installed into your local Maven repository or + * deployed to a remote repository. If no classifier has been configured, it will + * replace the normal jar. If a {@code classifier} has been configured such that the + * normal jar and the repackaged jar are different, it will be attached alongside the + * normal jar. When the property is set to {@code false}, the repackaged archive will + * not be installed or deployed. + * @since 1.4.0 + */ + @Parameter(defaultValue = "true") + private boolean attach = true; + + /** + * A list of the libraries that must be unpacked from uber jars in order to run. + * Specify each library as a {@code } with a {@code } and a + * {@code } and they will be unpacked at runtime. + * @since 1.1.0 + */ + @Parameter + private @Nullable List requiresUnpack; + + /** + * Timestamp for reproducible output archive entries, either formatted as ISO 8601 + * (yyyy-MM-dd'T'HH:mm:ssXXX) or an {@code int} representing seconds + * since the epoch. + * @since 2.3.0 + */ + @Parameter(defaultValue = "${project.build.outputTimestamp}") + private @Nullable String outputTimestamp; + + /** + * The type of archive (which corresponds to how the dependencies are laid out inside + * it). Possible values are {@code JAR}, {@code WAR}, {@code ZIP}, {@code DIR}, + * {@code NONE}. Defaults to a guess based on the archive type. + * @since 1.0.0 + */ + @Parameter(property = "spring-boot.repackage.layout") + private @Nullable LayoutType layout; + + /** + * 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 + * parties. + * @since 1.5.0 + */ + @Parameter + private @Nullable LayoutFactory layoutFactory; + + @Inject + public RepackageMojo(MavenProjectHelper projectHelper) { + super(projectHelper); + } + + /** + * Return the type of archive that should be packaged by this MOJO. + * @return the value of the {@code layout} parameter, or {@code null} if the parameter + * is not provided + */ + @Override + protected @Nullable LayoutType getLayout() { + return this.layout; + } + + /** + * Return the layout factory that will be used to determine the + * {@link AbstractPackagerMojo.LayoutType} if no explicit layout is set. + * @return the value of the {@code layoutFactory} parameter, or {@code null} if the + * parameter is not provided + */ + @Override + protected @Nullable LayoutFactory getLayoutFactory() { + return this.layoutFactory; + } + + @Override + public void execute() throws MojoExecutionException, MojoFailureException { + if (this.project.getPackaging().equals("pom")) { + getLog().debug("repackage goal could not be applied to pom project."); + return; + } + if (this.skip) { + getLog().debug("skipping repackaging as per configuration."); + return; + } + repackage(); + } + + private void repackage() throws MojoExecutionException { + Artifact source = getSourceArtifact(this.classifier); + File target = getTargetFile(this.finalName, this.classifier, this.outputDirectory); + if (source.getFile() == null) { + throw new MojoExecutionException( + "Source file is not available, make sure 'package' runs as part of the same lifecycle"); + } + Repackager repackager = getRepackager(source.getFile()); + Libraries libraries = getLibraries(this.requiresUnpack); + try { + repackager.repackage(target, libraries, parseOutputTimestamp()); + } + catch (IOException ex) { + throw new MojoExecutionException(ex.getMessage(), ex); + } + updateArtifact(source, target, repackager.getBackupFile()); + } + + private @Nullable FileTime parseOutputTimestamp() throws MojoExecutionException { + try { + return new MavenBuildOutputTimestamp(this.outputTimestamp).toFileTime(); + } + catch (IllegalArgumentException ex) { + throw new MojoExecutionException("Invalid value for parameter 'outputTimestamp'", ex); + } + } + + private Repackager getRepackager(File source) { + return getConfiguredPackager(() -> new Repackager(source)); + } + + @Contract("!null -> !null") + private @Nullable String removeLineBreaks(@Nullable String description) { + return (description != null) ? WHITE_SPACE_PATTERN.matcher(description).replaceAll(" ") : null; + } + + private void updateArtifact(Artifact source, File target, File original) { + if (this.attach) { + attachArtifact(source, target, original); + } + else if (source.getFile().equals(target) && original.exists()) { + String artifactId = (this.classifier != null) ? "artifact with classifier " + this.classifier + : "main artifact"; + getLog().info(String.format("Updating %s %s to %s", artifactId, source.getFile(), original)); + source.setFile(original); + } + else if (this.classifier != null) { + getLog().info("Creating repackaged archive " + target + " with classifier " + this.classifier); + } + } + + private void attachArtifact(Artifact source, File target, File original) { + if (this.classifier != null && !source.getFile().equals(target)) { + getLog().info("Attaching repackaged archive " + target + " with classifier " + this.classifier); + this.projectHelper.attachArtifact(this.project, this.project.getPackaging(), this.classifier, target); + } + else { + String artifactId = (this.classifier != null) ? "artifact with classifier " + this.classifier + : "main artifact"; + getLog() + .info(String.format("Replacing %s %s with repackaged archive, adding nested dependencies in BOOT-INF/.", + artifactId, source.getFile())); + getLog().info("The original artifact has been renamed to " + original); + source.setFile(target); + } + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunArguments.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunArguments.java similarity index 84% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunArguments.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunArguments.java index a6a0712700a9..63712f5a130d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunArguments.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunArguments.java @@ -21,6 +21,7 @@ import java.util.LinkedList; import org.codehaus.plexus.util.cli.CommandLineUtils; +import org.jspecify.annotations.Nullable; /** * Parse and expose arguments specified in a single string. @@ -33,15 +34,16 @@ class RunArguments { private final Deque args = new LinkedList<>(); - RunArguments(String arguments) { + RunArguments(@Nullable String arguments) { 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(Iterable args) { + RunArguments(@Nullable Iterable<@Nullable String> args) { if (args != null) { for (String arg : args) { if (arg != null) { @@ -59,7 +61,7 @@ String[] asArray() { return this.args.toArray(new String[0]); } - static String[] parseArgs(String arguments) { + static String[] parseArgs(@Nullable String arguments) { if (arguments == null || arguments.trim().isEmpty()) { return NO_ARGS; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunMojo.java similarity index 98% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunMojo.java index c9a533c40be6..8992ed3d55f6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunMojo.java @@ -59,7 +59,7 @@ public class RunMojo extends AbstractRunMojo { * @since 1.3.0 */ @Parameter(property = "spring-boot.run.useTestClasspath", defaultValue = "false") - private Boolean useTestClasspath; + private boolean useTestClasspath; @Inject public RunMojo(ToolchainManager toolchainManager) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SpringApplicationAdminClient.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SpringApplicationAdminClient.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SpringApplicationAdminClient.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SpringApplicationAdminClient.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SpringBootApplicationClassFinder.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SpringBootApplicationClassFinder.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SpringBootApplicationClassFinder.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SpringBootApplicationClassFinder.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StartMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StartMojo.java similarity index 94% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StartMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StartMojo.java index 1e09838e36da..4a9c98f4dac9 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StartMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StartMojo.java @@ -36,6 +36,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.toolchain.ToolchainManager; +import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.tools.RunProcess; @@ -62,6 +63,7 @@ public class StartMojo extends AbstractRunMojo { * spring application. */ @Parameter(defaultValue = SpringApplicationAdminClient.DEFAULT_OBJECT_NAME) + @SuppressWarnings("NullAway.Init") private String jmxName; /** @@ -91,7 +93,7 @@ public class StartMojo extends AbstractRunMojo { * Flag to include the test classpath when running. */ @Parameter(property = "spring-boot.run.useTestClasspath", defaultValue = "false") - private Boolean useTestClasspath; + private boolean useTestClasspath; @Inject public StartMojo(ToolchainManager toolchainManager) { @@ -158,7 +160,8 @@ 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()); @@ -178,7 +181,7 @@ private void doWaitForSpringApplication(MBeanServerConnection connection) * @return the result * @throws Exception in case of execution errors */ - public T execute(long wait, int maxAttempts, Callable callback) throws Exception { + public T execute(long wait, int maxAttempts, Callable<@Nullable T> callback) throws Exception { getLog().debug("Waiting for spring application to start..."); for (int i = 0; i < maxAttempts; i++) { T result = callback.call(); @@ -206,7 +209,7 @@ protected boolean isUseTestClasspath() { return this.useTestClasspath; } - private class CreateJmxConnector implements Callable { + private class CreateJmxConnector implements Callable<@Nullable JMXConnector> { private final int port; @@ -215,7 +218,7 @@ private class CreateJmxConnector implements Callable { } @Override - public JMXConnector call() throws Exception { + public @Nullable JMXConnector call() throws Exception { try { return SpringApplicationAdminClient.connect(this.port); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StopMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StopMojo.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StopMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StopMojo.java index 617de231285f..d86834cd34de 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StopMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StopMojo.java @@ -45,6 +45,7 @@ public class StopMojo extends AbstractMojo { * @since 1.4.1 */ @Parameter(defaultValue = "${project}", readonly = true, required = true) + @SuppressWarnings("NullAway.Init") private MavenProject project; /** @@ -52,6 +53,7 @@ public class StopMojo extends AbstractMojo { * application. */ @Parameter(defaultValue = SpringApplicationAdminClient.DEFAULT_OBJECT_NAME) + @SuppressWarnings("NullAway.Init") private String jmxName; /** diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SystemPropertyFormatter.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SystemPropertyFormatter.java similarity index 89% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SystemPropertyFormatter.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SystemPropertyFormatter.java index 11e1136651fc..3031097e4b52 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SystemPropertyFormatter.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/SystemPropertyFormatter.java @@ -16,6 +16,8 @@ package org.springframework.boot.maven; +import org.jspecify.annotations.Nullable; + /** * Format System properties. * @@ -27,7 +29,7 @@ final class SystemPropertyFormatter { private SystemPropertyFormatter() { } - static String format(String key, String value) { + static String format(@Nullable String key, @Nullable String value) { if (key == null) { return ""; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/TestRunMojo.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/TestRunMojo.java similarity index 99% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/TestRunMojo.java rename to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/TestRunMojo.java index 8a9d2413c923..4be0c6185e6a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/TestRunMojo.java +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/TestRunMojo.java @@ -62,6 +62,7 @@ public class TestRunMojo extends AbstractRunMojo { * the application. */ @Parameter(defaultValue = "${project.build.testOutputDirectory}", required = true) + @SuppressWarnings("NullAway.Init") private File testClassesDirectory; @Inject diff --git a/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/VersionExtractor.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/VersionExtractor.java new file mode 100644 index 000000000000..13a3860795b3 --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/VersionExtractor.java @@ -0,0 +1,69 @@ +/* + * 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.io.File; +import java.io.IOException; +import java.net.JarURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.util.jar.Attributes; +import java.util.jar.JarFile; + +import org.jspecify.annotations.Nullable; + +/** + * Extracts version information for a Class. + * + * @author Andy Wilkinson + * @author Scott Frederick + */ +final class VersionExtractor { + + private VersionExtractor() { + } + + /** + * Return the version information for the provided {@link Class}. + * @param cls the Class to retrieve the version for + * @return the version, or {@code null} if a version can not be extracted + */ + static @Nullable String forClass(Class cls) { + String implementationVersion = cls.getPackage().getImplementationVersion(); + if (implementationVersion != null) { + return implementationVersion; + } + URL codeSourceLocation = cls.getProtectionDomain().getCodeSource().getLocation(); + try { + URLConnection connection = codeSourceLocation.openConnection(); + if (connection instanceof JarURLConnection jarURLConnection) { + return getImplementationVersion(jarURLConnection.getJarFile()); + } + try (JarFile jarFile = new JarFile(new File(codeSourceLocation.toURI()))) { + return getImplementationVersion(jarFile); + } + } + catch (Exception ex) { + return null; + } + } + + private static String getImplementationVersion(JarFile jarFile) throws IOException { + return jarFile.getManifest().getMainAttributes().getValue(Attributes.Name.IMPLEMENTATION_VERSION); + } + +} diff --git a/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/package-info.java b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/package-info.java new file mode 100644 index 000000000000..d0829a7de76a --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/package-info.java @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Maven plugin for Spring Boot. + */ +@NullMarked +package org.springframework.boot.maven; + +import org.jspecify.annotations.NullMarked; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml b/build-plugin/spring-boot-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml rename to build-plugin/spring-boot-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.3.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.3.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.3.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.3.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.4.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.4.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.4.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.4.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.5.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.5.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.5.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.5.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.6.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.6.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.6.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.6.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.7.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.7.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-2.7.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-2.7.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.0.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.0.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.0.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.0.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.1.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.1.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.1.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.1.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.2.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.2.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.2.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.2.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.3.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.3.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.3.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.3.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.4.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.4.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.4.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.4.xsd diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.5.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.5.xsd similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/xsd/layers-3.5.xsd rename to build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-3.5.xsd diff --git a/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-4.0.xsd b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-4.0.xsd new file mode 100644 index 000000000000..20219b9bd8b1 --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/main/xsd/layers-4.0.xsd @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/maven/resources/pom.xml b/build-plugin/spring-boot-maven-plugin/src/maven/resources/pom.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/maven/resources/pom.xml rename to build-plugin/spring-boot-maven-plugin/src/maven/resources/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java index ae03d1f8af6c..41c7980ac54e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java @@ -38,6 +38,7 @@ import org.springframework.boot.loader.tools.Library; import org.springframework.boot.loader.tools.LibraryCallback; +import org.springframework.boot.loader.tools.LibraryCoordinates; import org.springframework.boot.loader.tools.LibraryScope; import static org.assertj.core.api.Assertions.assertThat; @@ -56,9 +57,11 @@ class ArtifactsLibrariesTests { @Mock + @SuppressWarnings("NullAway.Init") private Artifact artifact; @Mock + @SuppressWarnings("NullAway.Init") private ArtifactHandler artifactHandler; private Set artifacts; @@ -68,9 +71,11 @@ class ArtifactsLibrariesTests { private ArtifactsLibraries libs; @Mock + @SuppressWarnings("NullAway.Init") private LibraryCallback callback; @Captor + @SuppressWarnings("NullAway.Init") private ArgumentCaptor libraryCaptor; @BeforeEach @@ -146,7 +151,9 @@ void libraryCoordinatesVersionUsesBaseVersionOfArtifact() throws IOException { .doWithLibraries((library) -> { assertThat(library.isIncluded()).isTrue(); assertThat(library.isLocal()).isFalse(); - assertThat(library.getCoordinates().getVersion()).isEqualTo("1.0-SNAPSHOT"); + LibraryCoordinates coordinates = library.getCoordinates(); + assertThat(coordinates).isNotNull(); + assertThat(coordinates.getVersion()).isEqualTo("1.0-SNAPSHOT"); }); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ClassPathTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ClassPathTests.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ClassPathTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ClassPathTests.java index 6341e8078a1f..aed122f6dc93 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ClassPathTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ClassPathTests.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.function.UnaryOperator; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -93,11 +94,11 @@ void toStringShouldReturnClassPath(@TempDir Path temp) throws Exception { assertThat(classPath.toString()).isEqualTo(path1 + File.pathSeparator + path2); } - private UnaryOperator onWindows() { + private UnaryOperator<@Nullable String> onWindows() { return Map.of("os.name", "windows")::get; } - private UnaryOperator onLinux() { + private UnaryOperator<@Nullable String> onLinux() { return Map.of("os.name", "linux")::get; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CommandLineBuilderTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CommandLineBuilderTests.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CommandLineBuilderTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CommandLineBuilderTests.java index 7eccf586b37e..c48f8ca7f8f5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CommandLineBuilderTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CommandLineBuilderTests.java @@ -49,6 +49,7 @@ class CommandLineBuilderTests { public static final String CLASS_NAME = ClassWithMainMethod.class.getName(); @Test + @SuppressWarnings("NullAway") // Maven can't deal with @Nullable arrays / varargs void buildWithNullJvmArgumentsIsIgnored() { assertThat(CommandLineBuilder.forMainClass(CLASS_NAME).withJvmArguments((String[]) null).build()) .containsExactly(CLASS_NAME); @@ -80,6 +81,7 @@ void buildWithSystemProperty() { } @Test + @SuppressWarnings("NullAway") // Maven can't deal with @Nullable arrays / varargs void buildWithNullArgumentsIsIgnored() { assertThat(CommandLineBuilder.forMainClass(CLASS_NAME).withArguments((String[]) null).build()) .containsExactly(CLASS_NAME); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CustomLayersProviderTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CustomLayersProviderTests.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CustomLayersProviderTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CustomLayersProviderTests.java index f1eddebabe32..0b38e99d4097 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CustomLayersProviderTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/CustomLayersProviderTests.java @@ -19,6 +19,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.w3c.dom.Document; @@ -69,7 +70,7 @@ void getLayerResolverWhenDocumentValid() throws Exception { assertThat(layers.getLayer("test")).hasToString("application"); } - private Library mockLibrary(String name, String groupId, String version) { + private Library mockLibrary(String name, String groupId, @Nullable String version) { Library library = mock(Library.class); given(library.getName()).willReturn(name); given(library.getCoordinates()).willReturn(LibraryCoordinates.of(groupId, null, version)); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterMojoTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterMojoTests.java similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterMojoTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterMojoTests.java index ca74efc1b519..51b772d6558c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterMojoTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterMojoTests.java @@ -33,6 +33,7 @@ import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter; import org.apache.maven.shared.artifact.filter.collection.ScopeFilter; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -48,6 +49,7 @@ class DependencyFilterMojoTests { @TempDir + @SuppressWarnings("NullAway.Init") static Path temp; @Test @@ -121,11 +123,12 @@ private static Artifact createArtifact(String groupId, String artifactId) { return createArtifact(groupId, artifactId, null); } - private static Artifact createArtifact(String groupId, String artifactId, String scope) { + private static Artifact createArtifact(String groupId, String artifactId, @Nullable String scope) { return createArtifact(groupId, artifactId, scope, null); } - private static Artifact createArtifact(String groupId, String artifactId, String scope, String jarType) { + private static Artifact createArtifact(String groupId, String artifactId, @Nullable String scope, + @Nullable String jarType) { Artifact a = mock(Artifact.class); given(a.getGroupId()).willReturn(groupId); given(a.getArtifactId()).willReturn(artifactId); @@ -136,7 +139,7 @@ private static Artifact createArtifact(String groupId, String artifactId, String return a; } - private static File createArtifactFile(String jarType) { + private static File createArtifactFile(@Nullable String jarType) { Path jarPath = temp.resolve(UUID.randomUUID() + ".jar"); Manifest manifest = new Manifest(); manifest.getMainAttributes().putValue("Manifest-Version", "1.0"); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DependencyFilterTests.java diff --git a/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DockerTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DockerTests.java new file mode 100644 index 000000000000..fad447193f05 --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/DockerTests.java @@ -0,0 +1,260 @@ +/* + * 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.Base64; + +import org.apache.maven.plugin.logging.Log; +import org.apache.maven.plugin.logging.SystemStreamLog; +import org.junit.jupiter.api.Test; + +import org.springframework.boot.buildpack.platform.build.BuilderDockerConfiguration; +import org.springframework.boot.buildpack.platform.docker.configuration.DockerConnectionConfiguration; +import org.springframework.boot.buildpack.platform.docker.configuration.DockerRegistryAuthentication; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; + +/** + * Tests for {@link Docker}. + * + * @author Wei Jiang + * @author Scott Frederick + */ +class DockerTests { + + private final Log log = new SystemStreamLog(); + + @Test + void asDockerConfigurationWithDefaults() { + Docker docker = new Docker(); + BuilderDockerConfiguration dockerConfiguration = createDockerConfiguration(docker); + assertThat(dockerConfiguration.connection()).isNull(); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + String authHeader = publishRegistryAuthentication.getAuthHeader(); + assertThat(authHeader).isNotNull(); + assertThat(decoded(authHeader)).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithHostConfiguration() { + Docker docker = new Docker(); + docker.setHost("docker.example.com"); + docker.setTlsVerify(true); + docker.setCertPath("/tmp/ca-cert"); + BuilderDockerConfiguration dockerConfiguration = createDockerConfiguration(docker); + DockerConnectionConfiguration.Host host = (DockerConnectionConfiguration.Host) dockerConfiguration.connection(); + assertThat(host).isNotNull(); + assertThat(host.address()).isEqualTo("docker.example.com"); + assertThat(host.secure()).isTrue(); + assertThat(host.certificatePath()).isEqualTo("/tmp/ca-cert"); + assertThat(dockerConfiguration.bindHostToBuilder()).isFalse(); + DockerRegistryAuthentication builderRegistryAuthentication = createDockerConfiguration(docker) + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + String authHeader = publishRegistryAuthentication.getAuthHeader(); + assertThat(authHeader).isNotNull(); + assertThat(decoded(authHeader)).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithContextConfiguration() { + Docker docker = new Docker(); + docker.setContext("test-context"); + BuilderDockerConfiguration dockerConfiguration = createDockerConfiguration(docker); + DockerConnectionConfiguration.Context context = (DockerConnectionConfiguration.Context) dockerConfiguration + .connection(); + assertThat(context).isNotNull(); + assertThat(context.context()).isEqualTo("test-context"); + assertThat(dockerConfiguration.bindHostToBuilder()).isFalse(); + DockerRegistryAuthentication builderRegistryAuthentication = createDockerConfiguration(docker) + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + String authHeader = publishRegistryAuthentication.getAuthHeader(); + assertThat(authHeader).isNotNull(); + assertThat(decoded(authHeader)).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithHostAndContextFails() { + Docker docker = new Docker(); + docker.setContext("test-context"); + docker.setHost("docker.example.com"); + assertThatIllegalArgumentException().isThrownBy(() -> createDockerConfiguration(docker)) + .withMessageContaining("Invalid Docker configuration"); + } + + @Test + void asDockerConfigurationWithBindHostToBuilder() { + Docker docker = new Docker(); + docker.setHost("docker.example.com"); + docker.setTlsVerify(true); + docker.setCertPath("/tmp/ca-cert"); + docker.setBindHostToBuilder(true); + BuilderDockerConfiguration dockerConfiguration = createDockerConfiguration(docker); + DockerConnectionConfiguration.Host host = (DockerConnectionConfiguration.Host) dockerConfiguration.connection(); + assertThat(host).isNotNull(); + assertThat(host.address()).isEqualTo("docker.example.com"); + assertThat(host.secure()).isTrue(); + assertThat(host.certificatePath()).isEqualTo("/tmp/ca-cert"); + assertThat(dockerConfiguration.bindHostToBuilder()).isTrue(); + DockerRegistryAuthentication builderRegistryAuthentication = createDockerConfiguration(docker) + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + assertThat(builderRegistryAuthentication.getAuthHeader()).isNull(); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + String authHeader = publishRegistryAuthentication.getAuthHeader(); + assertThat(authHeader).isNotNull(); + assertThat(decoded(authHeader)).contains("\"username\" : \"\"") + .contains("\"password\" : \"\"") + .contains("\"email\" : \"\"") + .contains("\"serveraddress\" : \"\""); + } + + @Test + void asDockerConfigurationWithUserAuth() { + Docker docker = new Docker(); + docker.setBuilderRegistry( + new Docker.DockerRegistry("user1", "secret1", "https://docker1.example.com", "docker1@example.com")); + docker.setPublishRegistry( + new Docker.DockerRegistry("user2", "secret2", "https://docker2.example.com", "docker2@example.com")); + BuilderDockerConfiguration dockerConfiguration = createDockerConfiguration(docker); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + String authHeader = builderRegistryAuthentication.getAuthHeader(); + assertThat(authHeader).isNotNull(); + assertThat(decoded(authHeader)).contains("\"username\" : \"user1\"") + .contains("\"password\" : \"secret1\"") + .contains("\"email\" : \"docker1@example.com\"") + .contains("\"serveraddress\" : \"https://docker1.example.com\""); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + authHeader = publishRegistryAuthentication.getAuthHeader(); + assertThat(authHeader).isNotNull(); + assertThat(decoded(authHeader)).contains("\"username\" : \"user2\"") + .contains("\"password\" : \"secret2\"") + .contains("\"email\" : \"docker2@example.com\"") + .contains("\"serveraddress\" : \"https://docker2.example.com\""); + } + + @Test + void asDockerConfigurationWithIncompleteBuilderUserAuthFails() { + Docker docker = new Docker(); + docker.setBuilderRegistry( + new Docker.DockerRegistry("user", null, "https://docker.example.com", "docker@example.com")); + assertThatIllegalArgumentException().isThrownBy(() -> createDockerConfiguration(docker)) + .withMessageContaining("Invalid Docker builder registry configuration"); + } + + @Test + void asDockerConfigurationWithIncompletePublishUserAuthFails() { + Docker docker = new Docker(); + docker.setPublishRegistry( + new Docker.DockerRegistry("user", null, "https://docker.example.com", "docker@example.com")); + assertThatIllegalArgumentException().isThrownBy(() -> createDockerConfiguration(docker)) + .withMessageContaining("Invalid Docker publish registry configuration"); + } + + @Test + void asDockerConfigurationWithIncompletePublishUserAuthDoesNotFailIfPublishIsDisabled() { + Docker docker = new Docker(); + docker.setPublishRegistry( + new Docker.DockerRegistry("user", null, "https://docker.example.com", "docker@example.com")); + BuilderDockerConfiguration dockerConfiguration = docker.asDockerConfiguration(this.log, false); + assertThat(dockerConfiguration.publishRegistryAuthentication()).isNull(); + } + + @Test + void asDockerConfigurationWithTokenAuth() { + Docker docker = new Docker(); + docker.setBuilderRegistry(new Docker.DockerRegistry("token1")); + docker.setPublishRegistry(new Docker.DockerRegistry("token2")); + BuilderDockerConfiguration dockerConfiguration = createDockerConfiguration(docker); + DockerRegistryAuthentication builderRegistryAuthentication = dockerConfiguration + .builderRegistryAuthentication(); + assertThat(builderRegistryAuthentication).isNotNull(); + String authHeader = builderRegistryAuthentication.getAuthHeader(); + assertThat(authHeader).isNotNull(); + assertThat(decoded(authHeader)).contains("\"identitytoken\" : \"token1\""); + DockerRegistryAuthentication publishRegistryAuthentication = dockerConfiguration + .publishRegistryAuthentication(); + assertThat(publishRegistryAuthentication).isNotNull(); + authHeader = publishRegistryAuthentication.getAuthHeader(); + assertThat(authHeader).isNotNull(); + assertThat(decoded(authHeader)).contains("\"identitytoken\" : \"token2\""); + } + + @Test + void asDockerConfigurationWithUserAndTokenAuthFails() { + Docker.DockerRegistry dockerRegistry = new Docker.DockerRegistry(); + dockerRegistry.setUsername("user"); + dockerRegistry.setPassword("secret"); + dockerRegistry.setToken("token"); + Docker docker = new Docker(); + docker.setBuilderRegistry(dockerRegistry); + assertThatIllegalArgumentException().isThrownBy(() -> createDockerConfiguration(docker)) + .withMessageContaining("Invalid Docker builder registry configuration"); + } + + @Test + void asDockerConfigurationWithUserAndTokenAuthDoesNotFailIfPublishingIsDisabled() { + Docker.DockerRegistry dockerRegistry = new Docker.DockerRegistry(); + dockerRegistry.setUsername("user"); + dockerRegistry.setPassword("secret"); + dockerRegistry.setToken("token"); + Docker docker = new Docker(); + docker.setPublishRegistry(dockerRegistry); + BuilderDockerConfiguration dockerConfiguration = docker.asDockerConfiguration(this.log, false); + assertThat(dockerConfiguration.publishRegistryAuthentication()).isNull(); + } + + private BuilderDockerConfiguration createDockerConfiguration(Docker docker) { + return docker.asDockerConfiguration(this.log, true); + } + + String decoded(String value) { + return new String(Base64.getDecoder().decode(value)); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/EnvVariablesTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/EnvVariablesTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/EnvVariablesTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/EnvVariablesTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ExcludeFilterTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ExcludeFilterTests.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ExcludeFilterTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ExcludeFilterTests.java index 20918af1bfdc..852e87303e7b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ExcludeFilterTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ExcludeFilterTests.java @@ -23,6 +23,7 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -106,7 +107,7 @@ private Exclude createExclude(String groupId, String artifactId) { return createExclude(groupId, artifactId, null); } - private Exclude createExclude(String groupId, String artifactId, String classifier) { + private Exclude createExclude(String groupId, String artifactId, @Nullable String classifier) { Exclude exclude = new Exclude(); exclude.setGroupId(groupId); exclude.setArtifactId(artifactId); @@ -116,7 +117,7 @@ private Exclude createExclude(String groupId, String artifactId, String classifi return exclude; } - private Artifact createArtifact(String groupId, String artifactId, String classifier) { + private Artifact createArtifact(String groupId, String artifactId, @Nullable String classifier) { Artifact a = mock(Artifact.class); given(a.getGroupId()).willReturn(groupId); given(a.getArtifactId()).willReturn(artifactId); diff --git a/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ImageTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ImageTests.java new file mode 100644 index 000000000000..a6a2b4d55bac --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ImageTests.java @@ -0,0 +1,312 @@ +/* + * 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.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.DefaultArtifact; +import org.apache.maven.artifact.handler.DefaultArtifactHandler; +import org.apache.maven.artifact.versioning.VersionRange; +import org.junit.jupiter.api.Test; + +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.ImageReference; +import org.springframework.boot.buildpack.platform.io.Owner; +import org.springframework.boot.buildpack.platform.io.TarArchive; +import org.springframework.boot.maven.CacheInfo.BindCacheInfo; +import org.springframework.boot.maven.CacheInfo.VolumeCacheInfo; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.entry; +import static org.mockito.Mockito.mock; + +/** + * Tests for {@link Image}. + * + * @author Phillip Webb + * @author Scott Frederick + * @author Jeroen Meijer + * @author Rafael Ceccone + * @author Moritz Halbritter + */ +class ImageTests { + + @Test + void getBuildRequestWhenNameIsNullDeducesName() { + BuildRequest request = new Image().getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getName()).hasToString("docker.io/library/my-app:0.0.1-SNAPSHOT"); + } + + @Test + void getBuildRequestWhenNameIsSetUsesName() { + Image image = new Image(); + image.name = "demo"; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getName()).hasToString("docker.io/library/demo:latest"); + } + + @Test + void getBuildRequestWhenNoCustomizationsUsesDefaults() { + BuildRequest request = new Image().getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getName()).hasToString("docker.io/library/my-app:0.0.1-SNAPSHOT"); + assertThat(request.getBuilder().toString()).contains("paketobuildpacks/builder-noble-java-tiny"); + assertThat(request.isTrustBuilder()).isTrue(); + assertThat(request.getRunImage()).isNull(); + assertThat(request.getEnv()).isEmpty(); + assertThat(request.isCleanCache()).isFalse(); + assertThat(request.isVerboseLogging()).isFalse(); + assertThat(request.getPullPolicy()).isEqualTo(PullPolicy.ALWAYS); + assertThat(request.isPublish()).isFalse(); + assertThat(request.getBuildpacks()).isEmpty(); + assertThat(request.getBindings()).isEmpty(); + assertThat(request.getNetwork()).isNull(); + assertThat(request.getImagePlatform()).isNull(); + } + + @Test + void getBuildRequestWhenHasBuilderUsesBuilder() { + Image image = new Image(); + image.builder = "springboot/builder:2.2.x"; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBuilder()).hasToString("docker.io/springboot/builder:2.2.x"); + assertThat(request.isTrustBuilder()).isFalse(); + } + + @Test + void getBuildRequestWhenHasBuilderAndTrustBuilderUsesBuilderAndTrustBuilder() { + Image image = new Image(); + image.builder = "springboot/builder:2.2.x"; + image.trustBuilder = true; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBuilder()).hasToString("docker.io/springboot/builder:2.2.x"); + assertThat(request.isTrustBuilder()).isTrue(); + } + + @Test + void getBuildRequestWhenHasDefaultBuilderAndTrustBuilderUsesTrustBuilder() { + Image image = new Image(); + image.trustBuilder = false; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBuilder().toString()).contains("paketobuildpacks/builder-noble-java-tiny"); + assertThat(request.isTrustBuilder()).isFalse(); + } + + @Test + void getBuildRequestWhenHasRunImageUsesRunImage() { + Image image = new Image(); + image.runImage = "springboot/run:latest"; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getRunImage()).hasToString("docker.io/springboot/run:latest"); + } + + @Test + void getBuildRequestWhenHasEnvUsesEnv() { + Image image = new Image(); + image.env = Collections.singletonMap("test", "test"); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getEnv()).containsExactly(entry("test", "test")); + } + + @Test + void getBuildRequestWhenHasCleanCacheUsesCleanCache() { + Image image = new Image(); + image.cleanCache = true; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.isCleanCache()).isTrue(); + } + + @Test + void getBuildRequestWhenHasVerboseLoggingUsesVerboseLogging() { + Image image = new Image(); + image.verboseLogging = true; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.isVerboseLogging()).isTrue(); + } + + @Test + void getBuildRequestWhenHasPullPolicyUsesPullPolicy() { + Image image = new Image(); + image.setPullPolicy(PullPolicy.NEVER); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getPullPolicy()).isEqualTo(PullPolicy.NEVER); + } + + @Test + void getBuildRequestWhenHasPublishUsesPublish() { + Image image = new Image(); + image.publish = true; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.isPublish()).isTrue(); + } + + @Test + void getBuildRequestWhenHasBuildpacksUsesBuildpacks() { + Image image = new Image(); + image.buildpacks = Arrays.asList("example/buildpack1@0.0.1", "example/buildpack2@0.0.2"); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBuildpacks()).containsExactly(BuildpackReference.of("example/buildpack1@0.0.1"), + BuildpackReference.of("example/buildpack2@0.0.2")); + } + + @Test + void getBuildRequestWhenHasBindingsUsesBindings() { + Image image = new Image(); + image.bindings = Arrays.asList("host-src:container-dest:ro", "volume-name:container-dest:rw"); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBindings()).containsExactly(Binding.of("host-src:container-dest:ro"), + Binding.of("volume-name:container-dest:rw")); + } + + @Test + void getBuildRequestWhenNetworkUsesNetwork() { + Image image = new Image(); + image.network = "test"; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getNetwork()).isEqualTo("test"); + } + + @Test + void getBuildRequestWhenHasTagsUsesTags() { + Image image = new Image(); + image.tags = Arrays.asList("my-app:latest", "example.com/my-app:0.0.1-SNAPSHOT", "example.com/my-app:latest"); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getTags()).containsExactly(ImageReference.of("my-app:latest"), + ImageReference.of("example.com/my-app:0.0.1-SNAPSHOT"), ImageReference.of("example.com/my-app:latest")); + } + + @Test + void getBuildRequestWhenHasBuildWorkspaceVolumeUsesWorkspace() { + Image image = new Image(); + image.buildWorkspace = CacheInfo.fromVolume(new VolumeCacheInfo("build-work-vol")); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBuildWorkspace()).isEqualTo(Cache.volume("build-work-vol")); + } + + @Test + void getBuildRequestWhenHasBuildCacheVolumeUsesCache() { + Image image = new Image(); + image.buildCache = CacheInfo.fromVolume(new VolumeCacheInfo("build-cache-vol")); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBuildCache()).isEqualTo(Cache.volume("build-cache-vol")); + } + + @Test + void getBuildRequestWhenHasLaunchCacheVolumeUsesCache() { + Image image = new Image(); + image.launchCache = CacheInfo.fromVolume(new VolumeCacheInfo("launch-cache-vol")); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getLaunchCache()).isEqualTo(Cache.volume("launch-cache-vol")); + } + + @Test + void getBuildRequestWhenHasBuildWorkspaceBindUsesWorkspace() { + Image image = new Image(); + image.buildWorkspace = CacheInfo.fromBind(new BindCacheInfo("build-work-dir")); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBuildWorkspace()).isEqualTo(Cache.bind("build-work-dir")); + } + + @Test + void getBuildRequestWhenHasBuildCacheBindUsesCache() { + Image image = new Image(); + image.buildCache = CacheInfo.fromBind(new BindCacheInfo("build-cache-dir")); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getBuildCache()).isEqualTo(Cache.bind("build-cache-dir")); + } + + @Test + void getBuildRequestWhenHasLaunchCacheBindUsesCache() { + Image image = new Image(); + image.launchCache = CacheInfo.fromBind(new BindCacheInfo("launch-cache-dir")); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getLaunchCache()).isEqualTo(Cache.bind("launch-cache-dir")); + } + + @Test + void getBuildRequestWhenHasCreatedDateUsesCreatedDate() { + Image image = new Image(); + image.createdDate = "2020-07-01T12:34:56Z"; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getCreatedDate()).isEqualTo("2020-07-01T12:34:56Z"); + } + + @Test + void getBuildRequestWhenHasApplicationDirectoryUsesApplicationDirectory() { + Image image = new Image(); + image.applicationDirectory = "/application"; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getApplicationDirectory()).isEqualTo("/application"); + } + + @Test + void getBuildRequestWhenHasNoSecurityOptionsUsesNoSecurityOptions() { + Image image = new Image(); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getSecurityOptions()).isNull(); + } + + @Test + void getBuildRequestWhenHasSecurityOptionsUsesSecurityOptions() { + Image image = new Image(); + image.securityOptions = List.of("label=user:USER", "label=role:ROLE"); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getSecurityOptions()).containsExactly("label=user:USER", "label=role:ROLE"); + } + + @Test + void getBuildRequestWhenHasEmptySecurityOptionsUsesSecurityOptions() { + Image image = new Image(); + image.securityOptions = Collections.emptyList(); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getSecurityOptions()).isEmpty(); + } + + @Test + void getBuildRequestWhenHasImagePlatformUsesImagePlatform() { + Image image = new Image(); + image.imagePlatform = "linux/arm64"; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getImagePlatform()).isEqualTo(ImagePlatform.of("linux/arm64")); + } + + @Test + void getBuildRequestWhenImagePlatformIsEmptyDoesntSetImagePlatform() { + Image image = new Image(); + image.imagePlatform = ""; + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getImagePlatform()).isNull(); + } + + private Artifact createArtifact() { + return new DefaultArtifact("com.example", "my-app", VersionRange.createFromVersion("0.0.1-SNAPSHOT"), "compile", + "jar", null, new DefaultArtifactHandler()); + } + + private Function mockApplicationContent() { + return (owner) -> mock(TarArchive.class); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/IncludeFilterTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/IncludeFilterTests.java similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/IncludeFilterTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/IncludeFilterTests.java index 01a451f49b6e..08788f39b39b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/IncludeFilterTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/IncludeFilterTests.java @@ -23,6 +23,7 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -104,7 +105,7 @@ private Include createInclude(String groupId, String artifactId) { return createInclude(groupId, artifactId, null); } - private Include createInclude(String groupId, String artifactId, String classifier) { + private Include createInclude(String groupId, String artifactId, @Nullable String classifier) { Include include = new Include(); include.setGroupId(groupId); include.setArtifactId(artifactId); @@ -114,7 +115,7 @@ private Include createInclude(String groupId, String artifactId, String classifi return include; } - private Artifact createArtifact(String groupId, String artifactId, String classifier) { + private Artifact createArtifact(String groupId, String artifactId, @Nullable String classifier) { Artifact a = mock(Artifact.class); given(a.getGroupId()).willReturn(groupId); given(a.getArtifactId()).willReturn(artifactId); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JarTypeFilterTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JarTypeFilterTests.java similarity index 90% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JarTypeFilterTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JarTypeFilterTests.java index 382dca1d30f2..7a0984e6575d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JarTypeFilterTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JarTypeFilterTests.java @@ -23,6 +23,7 @@ import java.util.jar.Manifest; import org.apache.maven.artifact.Artifact; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -38,6 +39,7 @@ class JarTypeFilterTests { @TempDir + @SuppressWarnings("NullAway.Init") Path temp; @Test @@ -60,12 +62,17 @@ void whenArtifactHasAnnotationProcessorJarTypeThenItIsExcluded() { 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(); } - private Artifact createArtifact(String springBootJarType) { + private Artifact createArtifact(@Nullable String springBootJarType) { Path jarPath = this.temp.resolve("test.jar"); Manifest manifest = new Manifest(); manifest.getMainAttributes().putValue("Manifest-Version", "1.0"); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JavaCompilerPluginConfigurationTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JavaCompilerPluginConfigurationTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JavaCompilerPluginConfigurationTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/JavaCompilerPluginConfigurationTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java similarity index 93% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java index a60a294d86d0..860efc1d2835 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/MavenBuildOutputTimestampTests.java @@ -19,6 +19,7 @@ import java.nio.file.attribute.FileTime; import java.time.Instant; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -88,11 +89,11 @@ void shouldParseToFileTime() { assertThat(parseFileTime("2019-10-05T14:37:42Z")).isEqualTo(FileTime.fromMillis(1570286262000L)); } - private static Instant parse(String timestamp) { + private static @Nullable Instant parse(@Nullable String timestamp) { return new MavenBuildOutputTimestamp(timestamp).toInstant(); } - private static FileTime parseFileTime(String timestamp) { + private static @Nullable FileTime parseFileTime(@Nullable String timestamp) { return new MavenBuildOutputTimestamp(timestamp).toFileTime(); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/PropertiesMergingResourceTransformerTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/PropertiesMergingResourceTransformerTests.java similarity index 90% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/PropertiesMergingResourceTransformerTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/PropertiesMergingResourceTransformerTests.java index 460e131b200f..4136485dc372 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/PropertiesMergingResourceTransformerTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/PropertiesMergingResourceTransformerTests.java @@ -19,6 +19,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; @@ -40,14 +41,17 @@ class PropertiesMergingResourceTransformerTests { @Test void testProcess() throws Exception { assertThat(this.transformer.hasTransformedResource()).isFalse(); - this.transformer.processResource("foo", new ByteArrayInputStream("foo=bar".getBytes()), null, 0); + this.transformer.processResource("foo", new ByteArrayInputStream("foo=bar".getBytes()), Collections.emptyList(), + 0); assertThat(this.transformer.hasTransformedResource()).isTrue(); } @Test void testMerge() throws Exception { - this.transformer.processResource("foo", new ByteArrayInputStream("foo=bar".getBytes()), null, 0); - this.transformer.processResource("bar", new ByteArrayInputStream("foo=spam".getBytes()), null, 0); + this.transformer.processResource("foo", new ByteArrayInputStream("foo=bar".getBytes()), Collections.emptyList(), + 0); + this.transformer.processResource("bar", new ByteArrayInputStream("foo=spam".getBytes()), + Collections.emptyList(), 0); assertThat(this.transformer.getData().getProperty("foo")).isEqualTo("bar,spam"); } @@ -55,7 +59,8 @@ void testMerge() throws Exception { void testOutput() throws Exception { this.transformer.setResource("foo"); long time = 1592911068000L; - this.transformer.processResource("foo", new ByteArrayInputStream("foo=bar".getBytes()), null, time); + this.transformer.processResource("foo", new ByteArrayInputStream("foo=bar".getBytes()), Collections.emptyList(), + time); ByteArrayOutputStream out = new ByteArrayOutputStream(); JarOutputStream os = new JarOutputStream(out); this.transformer.modifyOutputStream(os); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/RunArgumentsTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/RunArgumentsTests.java similarity index 94% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/RunArgumentsTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/RunArgumentsTests.java index a4ff430c2532..c137d66a01d1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/RunArgumentsTests.java +++ b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/RunArgumentsTests.java @@ -16,6 +16,7 @@ package org.springframework.boot.maven; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -35,6 +36,7 @@ void parseNull() { } @Test + @SuppressWarnings("NullAway") // Maven can't handle nullable arrays void parseNullArray() { String[] args = new RunArguments((String[]) null).asArray(); assertThat(args).isNotNull(); @@ -92,7 +94,7 @@ void quoteHandledProperly() { assertThat(args[0]).isEqualTo("-Dvalue=My Value"); } - private String[] parseArgs(String args) { + private String[] parseArgs(@Nullable String args) { return new RunArguments(args).asArray(); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/sample/ClassWithMainMethod.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/sample/ClassWithMainMethod.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/sample/ClassWithMainMethod.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/sample/ClassWithMainMethod.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/sample/ClassWithoutMainMethod.java b/build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/sample/ClassWithoutMainMethod.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/sample/ClassWithoutMainMethod.java rename to build-plugin/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/sample/ClassWithoutMainMethod.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/resources/application-layer-no-filter.xml b/build-plugin/spring-boot-maven-plugin/src/test/resources/application-layer-no-filter.xml similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/resources/application-layer-no-filter.xml rename to build-plugin/spring-boot-maven-plugin/src/test/resources/application-layer-no-filter.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/resources/dependencies-layer-no-filter.xml b/build-plugin/spring-boot-maven-plugin/src/test/resources/dependencies-layer-no-filter.xml similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/resources/dependencies-layer-no-filter.xml rename to build-plugin/spring-boot-maven-plugin/src/test/resources/dependencies-layer-no-filter.xml index 4a65ffd54c6f..32808c3122fa 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/resources/dependencies-layer-no-filter.xml +++ b/build-plugin/spring-boot-maven-plugin/src/test/resources/dependencies-layer-no-filter.xml @@ -1,7 +1,7 @@ + https://www.springframework.org/schema/boot/layers/layers-4.0.xsd"> diff --git a/build-plugin/spring-boot-maven-plugin/src/test/resources/layers.xml b/build-plugin/spring-boot-maven-plugin/src/test/resources/layers.xml new file mode 100644 index 000000000000..b91c1f65d8e8 --- /dev/null +++ b/build-plugin/spring-boot-maven-plugin/src/test/resources/layers.xml @@ -0,0 +1,36 @@ + + + + META-INF/resources/** + *.properties + + + **/application*.* + + + + + + *:*:*-SNAPSHOT + + + + + + + com.acme:* + + + + + my-deps + my-dependencies-name + snapshot-dependencies + my-resources + configuration + application + + \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/resources/resource-layer-no-filter.xml b/build-plugin/spring-boot-maven-plugin/src/test/resources/resource-layer-no-filter.xml similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/resources/resource-layer-no-filter.xml rename to build-plugin/spring-boot-maven-plugin/src/test/resources/resource-layer-no-filter.xml index 76d65328d8eb..2669650cfc76 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/resources/resource-layer-no-filter.xml +++ b/build-plugin/spring-boot-maven-plugin/src/test/resources/resource-layer-no-filter.xml @@ -1,7 +1,7 @@ + https://www.springframework.org/schema/boot/layers/layers-4.0.xsd"> diff --git a/build.gradle b/build.gradle index 218a8fb5c6fb..84acc8603902 100644 --- a/build.gradle +++ b/build.gradle @@ -31,6 +31,14 @@ subprojects { repositories { mavenCentral() + maven { + name = "Shibboleth Releases" + url = "https://build.shibboleth.net/nexus/content/repositories/releases" + content { + includeGroup "org.opensaml" + includeGroup "net.shibboleth" + } + } spring.mavenRepositories() } diff --git a/buildSrc/SpringRepositorySupport.groovy b/buildSrc/SpringRepositorySupport.groovy index b3ad5c8f352b..f9f8b5e3b2c1 100644 --- a/buildSrc/SpringRepositorySupport.groovy +++ b/buildSrc/SpringRepositorySupport.groovy @@ -87,8 +87,8 @@ class SpringRepositoriesExtension { addRepositories { } } - def mavenRepositories(condition) { - if (condition) addRepositories { } + def mavenRepositoriesFor(version) { + addRepositories(version) { } } def mavenRepositoriesExcludingBootGroup() { @@ -100,12 +100,13 @@ class SpringRepositoriesExtension { } private void addRepositories(action) { - addCommercialRepository("release", false, "/spring-enterprise-maven-prod-local", action) - if (this.version.contains("-")) { - addOssRepository("milestone", false, "/milestone", action) - } - if (this.version.endsWith("-SNAPSHOT")) { - addCommercialRepository("snapshot", true, "/spring-enterprise-maven-dev-local", action) + addRepositories(this.version, action) + } + + private void addRepositories(version, action) { + addCommercialRepositoryIfNecessary("release", false, "/spring-enterprise-maven-prod-local", action) + if (version.endsWith("-SNAPSHOT")) { + addCommercialRepositoryIfNecessary("snapshot", true, "/spring-enterprise-maven-dev-local", action) addOssRepository("snapshot", true, "/snapshot", action) } } @@ -116,7 +117,7 @@ class SpringRepositoriesExtension { addRepository(name, snapshot, url, action) } - private void addCommercialRepository(id, snapshot, path, action) { + private void addCommercialRepositoryIfNecessary(id, snapshot, path, action) { if (!"commercial".equalsIgnoreCase(this.buildType)) return def name = "spring-commercial-" + id def url = fromEnv("COMMERCIAL_%SREPO_URL", id, "https://usw1.packages.broadcom.com" + path) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 45468bd407a2..1ca099e6b5a3 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -19,10 +19,12 @@ plugins { id "io.spring.javaformat" version "${javaFormatVersion}" id "checkstyle" id "eclipse" + id "org.jetbrains.dokka" version "2.1.0" } repositories { mavenCentral() + spring.mavenRepositoriesFor("${springFrameworkVersion}") gradlePluginPortal() } @@ -31,10 +33,6 @@ java { targetCompatibility = 17 } -repositories { - spring.mavenRepositories("${springFrameworkVersion}".contains("-")) -} - checkstyle { toolVersion = "${checkstyleToolVersion}" } @@ -43,16 +41,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.github.node-gradle:gradle-node-plugin:7.1.0") implementation("com.gradle:develocity-gradle-plugin:3.17.2") - implementation("com.tngtech.archunit:archunit:1.3.0") + 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("org.jetbrains.dokka:dokka-gradle-plugin:2.1.0") + 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") @@ -60,11 +58,12 @@ dependencies { implementation("org.apache.maven:maven-artifact:${mavenVersion}") implementation("org.antora:gradle-antora-plugin:1.0.0") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") - implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:${kotlinVersion}") implementation("org.springframework:spring-context") implementation("org.springframework:spring-core") 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}") @@ -112,6 +111,10 @@ gradlePlugin { id = "org.springframework.boot.bom" implementationClass = "org.springframework.boot.build.bom.BomPlugin" } + configurationMetadataPlugin { + id = "org.springframework.boot.configuration-metadata" + implementationClass = "org.springframework.boot.build.context.properties.ConfigurationMetadataPlugin" + } configurationPropertiesPlugin { id = "org.springframework.boot.configuration-properties" implementationClass = "org.springframework.boot.build.context.properties.ConfigurationPropertiesPlugin" @@ -132,10 +135,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 +151,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" + } } } diff --git a/buildSrc/config/checkstyle/checkstyle.xml b/buildSrc/config/checkstyle/checkstyle.xml index 1ad50d8fcb84..8abf498ddd16 100644 --- a/buildSrc/config/checkstyle/checkstyle.xml +++ b/buildSrc/config/checkstyle/checkstyle.xml @@ -6,4 +6,11 @@ - \ No newline at end of file + + + + + + + diff --git a/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java index 4942e0c6a2a2..cd51d1d1040e 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java @@ -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.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.tasks.Copy; import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskProvider; +import tools.jackson.databind.json.JsonMapper; import org.springframework.boot.build.antora.AntoraAsciidocAttributes; import org.springframework.boot.build.antora.GenerateAntoraPlaybook; @@ -59,7 +57,7 @@ */ public class AntoraConventions { - private static final String DEPENDENCIES_PATH = ":spring-boot-project:spring-boot-dependencies"; + private static final String DEPENDENCIES_PATH = ":platform:spring-boot-dependencies"; private static final List NAV_FILES = List.of("nav.adoc", "local-nav.adoc"); @@ -198,18 +196,13 @@ private void logWarningIfNodeModulesInUserHome(Project project) { } 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"); + JsonMapper jsonMapper = new JsonMapper(); + Map json = jsonMapper.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) { diff --git a/buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java index 3307342df018..6753e3d732b6 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java @@ -27,6 +27,8 @@ import com.gradle.develocity.agent.gradle.test.DevelocityTestConfiguration; import com.gradle.develocity.agent.gradle.test.PredictiveTestSelectionConfiguration; import com.gradle.develocity.agent.gradle.test.TestRetryConfiguration; +import io.spring.gradle.nullability.NullabilityPlugin; +import io.spring.gradle.nullability.NullabilityPluginExtension; import io.spring.javaformat.gradle.SpringJavaFormatPlugin; import io.spring.javaformat.gradle.tasks.CheckFormat; import io.spring.javaformat.gradle.tasks.Format; @@ -68,8 +70,8 @@ *