From ce99db19028b54886ae99c1fd916e613a982b65f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 10 Jan 2020 13:48:43 +0000 Subject: [PATCH] Port the build to Gradle Closes gh-19609 Closes gh-19608 --- .bomr/bomr.yaml | 28 - .gitignore | 4 + .mvn/jvm.config | 1 - .mvn/wrapper/maven-wrapper.jar | Bin 50709 -> 0 bytes .mvn/wrapper/maven-wrapper.properties | 2 - CONTRIBUTING.adoc | 105 +- build.gradle | 20 + buildSrc/README.adoc | 26 + buildSrc/build.gradle | 84 + buildSrc/settings.gradle | 16 + .../boot/build/AsciidoctorConventions.java | 213 + .../boot/build/ConventionsPlugin.java | 207 + .../boot/build/DeployedPlugin.java | 54 + .../boot/build/MavenRepositoryPlugin.java | 111 + .../AutoConfigurationMetadata.java | 93 + .../AutoConfigurationPlugin.java | 78 + .../DocumentAutoConfigurationClasses.java | 136 + .../boot/build/bom/BomExtension.java | 297 ++ .../boot/build/bom/BomPlugin.java | 295 ++ .../boot/build/bom/CheckBom.java | 86 + .../boot/build/bom/Library.java | 196 + .../boot/build/bom/UpgradePolicy.java | 61 + .../bom/bomr/InteractiveUpgradeResolver.java | 142 + .../bomr/MavenMetadataVersionResolver.java | 98 + .../boot/build/bom/bomr/Upgrade.java | 46 + .../boot/build/bom/bomr/UpgradeBom.java | 146 + .../boot/build/bom/bomr/UpgradeResolver.java | 29 +- .../boot/build/bom/bomr/VersionResolver.java | 39 + .../boot/build/bom/bomr/github/GitHub.java | 46 + .../bom/bomr/github/GitHubRepository.java | 50 + .../boot/build/bom/bomr/github/Milestone.java | 56 + .../build/bom/bomr/github/StandardGitHub.java | 74 + .../bomr/github/StandardGitHubRepository.java | 74 + .../version/AbstractDependencyVersion.java | 69 + .../ArtifactVersionDependencyVersion.java | 100 + ...nedPatchAndQualifierDependencyVersion.java | 58 + .../bom/bomr/version/DependencyVersion.java | 69 + .../LeadingZeroesDependencyVersion.java | 56 + .../NumericQualifierDependencyVersion.java | 56 + .../ReleaseTrainDependencyVersion.java | 125 + .../UnstructuredDependencyVersion.java | 60 + .../classpath/CheckClasspathForConflicts.java | 135 + ...eckClasspathForProhibitedDependencies.java | 85 + .../AbstractPackageManagerDefinitionTask.java | 112 + .../boot/build/cli/HomebrewFormula.java | 23 +- .../boot/build/cli/ScoopManifest.java | 25 +- .../DocumentConstrainedVersions.java | 81 + .../ExtractVersionConstraints.java | 139 + .../context/properties}/AsciidocBuilder.java | 4 +- .../CompoundConfigurationTableEntry.java | 10 +- .../ConfigurationMetadataDocumentWriter.java | 37 +- .../properties/ConfigurationProperties.java | 81 + .../ConfigurationPropertiesPlugin.java | 94 + .../properties/ConfigurationProperty.java | 68 + .../properties}/ConfigurationTable.java | 4 +- .../properties}/ConfigurationTableEntry.java | 4 +- .../DocumentConfigurationProperties.java | 95 + .../context/properties}/DocumentOptions.java | 4 +- .../SingleConfigurationTableEntry.java | 10 +- .../ReproducibleLog4j2PluginsDatAction.java | 111 + .../mavenplugin/DocumentPluginGoals.java | 194 + .../boot/build/mavenplugin/MavenExec.java | 101 + .../build/mavenplugin/MavenPluginPlugin.java | 211 + .../build/mavenplugin/PluginXmlParser.java | 287 ++ .../mavenplugin/PrepareMavenBinaries.java | 70 + .../optional/OptionalDependenciesPlugin.java | 65 + .../boot/build/starters/DocumentStarters.java | 163 + .../boot/build/starters/StarterMetadata.java | 82 + .../boot/build/starters/StarterPlugin.java | 78 + .../build/test/IntegrationTestPlugin.java | 82 + .../autoconfigure/DocumentTestSlices.java | 129 + .../test/autoconfigure/TestSliceMetadata.java | 172 + .../main/resources/effective-bom-settings.xml | 24 + .../boot/build/assertj/NodeAssert.java | 87 + .../build/bom/BomPluginIntegrationTests.java | 193 + ...ArtifactVersionDependencyVersionTests.java | 119 + .../bomr/version/DependencyVersionTests.java | 55 + ...umericQualifierDependencyVersionTests.java | 54 + .../ReleaseTrainDependencyVersionTests.java | 99 + .../CompoundConfigurationTableEntryTests.java | 20 +- .../properties}/ConfigurationTableTests.java | 22 +- .../SingleConfigurationTableEntryTests.java | 54 +- .../ReproduciblePluginsDatActionTests.java | 80 + .../mavenplugin/PluginXmlParserTests.java | 29 +- ...nalDependenciesPluginIntegrationTests.java | 110 + buildSrc/src/test/resources/plugin.xml | 911 +++++ ci/pipeline.yml | 89 +- ci/scripts/build-deployment-tests.sh | 9 - ci/scripts/build-integration-tests.sh | 9 - ci/scripts/build-project-windows.bat | 4 +- ci/scripts/build-project.sh | 3 +- ci/scripts/build-smoke-tests.sh | 9 - ci/scripts/stage.sh | 13 +- ci/tasks/build-deployment-tests.yml | 10 - ci/tasks/build-integration-tests.yml | 10 - ci/tasks/build-pr-project.yml | 3 + ci/tasks/build-project.yml | 6 +- ci/tasks/build-smoke-tests.yml | 10 - ci/tasks/stage.yml | 4 + eclipse/spring-boot-project.setup | 14 +- gradle.properties | 7 + gradle/build-cache-settings.gradle | 18 + gradle/build-scan-user-data.gradle | 67 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58702 bytes .../wrapper/gradle-wrapper.properties | 2 +- .../gradlew => gradlew | 51 +- .../gradlew.bat => gradlew.bat | 18 +- pom.xml | 384 -- settings.gradle | 71 + spring-boot-project/pom.xml | 33 - .../build.gradle | 185 + .../pom.xml | 863 ---- .../asciidoc/endpoints/auditevents.adoc | 8 +- .../asciidoc/endpoints/beans.adoc | 6 +- .../asciidoc/endpoints/caches.adoc | 20 +- .../asciidoc/endpoints/conditions.adoc | 6 +- .../asciidoc/endpoints/configprops.adoc | 6 +- .../asciidoc/endpoints/env.adoc | 12 +- .../asciidoc/endpoints/flyway.adoc | 6 +- .../asciidoc/endpoints/health.adoc | 18 +- .../asciidoc/endpoints/heapdump.adoc | 2 +- .../asciidoc/endpoints/httptrace.adoc | 6 +- .../asciidoc/endpoints/info.adoc | 8 +- .../asciidoc/endpoints/integrationgraph.adoc | 8 +- .../asciidoc/endpoints/liquibase.adoc | 6 +- .../asciidoc/endpoints/logfile.adoc | 8 +- .../asciidoc/endpoints/loggers.adoc | 28 +- .../asciidoc/endpoints/mappings.adoc | 14 +- .../asciidoc/endpoints/metrics.adoc | 18 +- .../asciidoc/endpoints/prometheus.adoc | 4 +- .../asciidoc/endpoints/scheduledtasks.adoc | 6 +- .../asciidoc/endpoints/sessions.adoc | 16 +- .../asciidoc/endpoints/shutdown.adoc | 6 +- .../asciidoc/endpoints/threaddump.adoc | 10 +- .../src/{main => docs}/asciidoc/index.adoc | 0 .../spring-boot-actuator/build.gradle | 96 + .../spring-boot-actuator/pom.xml | 401 -- ...EndpointTestInvocationContextProvider.java | 9 +- .../spring-boot-autoconfigure/build.gradle | 185 + .../spring-boot-autoconfigure/pom.xml | 1044 ----- ...ctiveRestClientAutoConfigurationTests.java | 9 +- .../TransactionAutoConfigurationTests.java | 4 +- .../spring-boot-cli/build.gradle | 195 + spring-boot-project/spring-boot-cli/pom.xml | 469 --- .../boot/cli/CommandLineIT.java | 21 +- .../boot/cli/JarCommandIT.java | 89 +- .../boot/cli/WarCommandIT.java | 15 +- .../infrastructure/CommandLineInvoker.java | 32 +- .../resources/jar-command/bad.groovy | 0 .../resources/jar-command/jar.groovy | 0 .../resources/jar-command/public/public.txt | 0 .../jar-command/resources/resource.txt | 0 .../resources/jar-command/root.properties | 0 .../resources/jar-command/static/static.txt | 0 .../jar-command/templates/template.txt | 0 .../resources/run-command/quiet.groovy | 0 .../src/intTest/resources/settings.xml | 23 + .../resources/war-command/root.properties | 0 .../resources/war-command/war.groovy | 0 .../src/main/homebrew/springboot.rb | 2 +- ...gBootDependenciesDependencyManagement.java | 4 +- .../compiler/maven/MavenSettingsReader.java | 17 +- .../src/main/scoop/springboot.json | 12 +- .../springframework/boot/cli/CliTester.java | 7 +- .../boot/cli/GrabCommandIntegrationTests.java | 5 +- .../boot/cli/RunCommandIntegrationTests.java | 2 +- ...DependenciesDependencyManagementTests.java | 3 +- .../grape/AetherGrapeEngineTests.java | 11 +- .../src/test/resources/.m2/settings.xml | 5 +- .../resources/cli-tester/.m2}/settings.xml | 29 +- .../test/resources/run-command/quiet.groovy | 10 + .../spring-boot-dependencies/build.gradle | 1900 +++++++++ .../spring-boot-dependencies/pom.xml | 3531 ----------------- .../spring-boot-devtools/build.gradle | 86 + .../spring-boot-devtools/pom.xml | 220 - .../java/com/example/ControllerOne.java | 0 .../com/example/DevToolsTestApplication.java | 0 .../tests/AbstractApplicationLauncher.java | 0 .../AbstractDevToolsIntegrationTests.java | 1 - .../devtools/tests/ApplicationLauncher.java | 0 .../boot/devtools/tests/ApplicationState.java | 0 .../tests/DevToolsIntegrationTests.java | 73 +- ...ithLazyInitializationIntegrationTests.java | 0 .../boot/devtools/tests/Directories.java | 0 .../ExplodedRemoteApplicationLauncher.java | 0 .../boot/devtools/tests/FileContents.java | 0 .../JarFileRemoteApplicationLauncher.java | 0 .../boot/devtools/tests/JvmLauncher.java | 0 .../devtools/tests/LaunchedApplication.java | 0 .../tests/LocalApplicationLauncher.java | 0 .../tests/RemoteApplicationLauncher.java | 0 .../META-INF/spring-devtools.properties | 10 +- .../filewatch/FileSystemWatcherTests.java | 11 +- .../devtools/restart/ChangeableUrlsTests.java | 2 +- .../DefaultRestartInitializerTests.java | 17 +- .../settings/DevToolsSettingsTests.java | 2 +- .../spring-boot-docs/build.gradle | 241 ++ spring-boot-project/spring-boot-docs/pom.xml | 1760 -------- .../appendix-application-properties.adoc | 34 +- .../appendix-auto-configuration-classes.adoc | 6 +- .../appendix-configuration-metadata.adoc | 2 +- .../appendix-dependency-versions.adoc | 4 +- .../appendix-executable-jar-format.adoc | 2 +- .../appendix-test-auto-configuration.adoc | 4 +- .../{main => docs}/asciidoc/attributes.adoc | 4 +- .../asciidoc/build-tool-plugins.adoc | 0 .../{main => docs}/asciidoc/deployment.adoc | 0 .../asciidoc/documentation-overview.adoc | 0 .../asciidoc/getting-started.adoc | 0 .../src/{main => docs}/asciidoc/howto.adoc | 0 .../{main => docs}/asciidoc/index-docinfo.xml | 0 .../{main => docs}/asciidoc/index.htmladoc | 0 .../asciidoc/index.htmlsingleadoc | 0 .../src/{main => docs}/asciidoc/legal.adoc | 0 .../asciidoc/production-ready-features.adoc | 0 .../asciidoc/spring-boot-cli.adoc | 0 .../asciidoc/spring-boot-features.adoc | 0 .../asciidoc/spring-boot-reference.pdfadoc | 0 .../asciidoc/using-spring-boot.adoc | 6 +- .../spring-boot-parent/build.gradle | 41 + .../spring-boot-parent/pom.xml | 559 --- .../build.gradle | 18 + .../spring-boot-properties-migrator/pom.xml | 39 - .../spring-boot-starters/pom.xml | 174 - .../spring-boot-starter-activemq/build.gradle | 15 + .../spring-boot-starter-activemq/pom.xml | 45 - .../spring-boot-starter-actuator/build.gradle | 12 + .../spring-boot-starter-actuator/pom.xml | 36 - .../spring-boot-starter-amqp/build.gradle | 12 + .../spring-boot-starter-amqp/pom.xml | 35 - .../spring-boot-starter-aop/build.gradle | 12 + .../spring-boot-starter-aop/pom.xml | 35 - .../spring-boot-starter-artemis/build.gradle | 18 + .../spring-boot-starter-artemis/pom.xml | 49 - .../spring-boot-starter-batch/build.gradle | 12 + .../spring-boot-starter-batch/pom.xml | 68 - .../spring-boot-starter-cache/build.gradle | 11 + .../spring-boot-starter-cache/pom.xml | 31 - .../build.gradle | 14 + .../pom.xml | 45 - .../build.gradle | 13 + .../pom.xml | 47 - .../build.gradle | 12 + .../pom.xml | 42 - .../build.gradle | 15 + .../pom.xml | 54 - .../build.gradle | 13 + .../pom.xml | 46 - .../build.gradle | 11 + .../pom.xml | 68 - .../build.gradle | 11 + .../spring-boot-starter-data-jdbc/pom.xml | 31 - .../spring-boot-starter-data-jpa/build.gradle | 23 + .../spring-boot-starter-data-jpa/pom.xml | 83 - .../build.gradle | 11 + .../spring-boot-starter-data-ldap/pom.xml | 37 - .../build.gradle | 17 + .../pom.xml | 58 - .../build.gradle | 14 + .../spring-boot-starter-data-mongodb/pom.xml | 46 - .../build.gradle | 11 + .../spring-boot-starter-data-neo4j/pom.xml | 37 - .../build.gradle | 10 + .../pom.xml | 27 - .../build.gradle | 12 + .../spring-boot-starter-data-redis/pom.xml | 42 - .../build.gradle | 11 + .../spring-boot-starter-data-rest/pom.xml | 38 - .../build.gradle | 17 + .../spring-boot-starter-data-solr/pom.xml | 46 - .../build.gradle | 12 + .../spring-boot-starter-freemarker/pom.xml | 35 - .../build.gradle | 11 + .../pom.xml | 48 - .../spring-boot-starter-hateoas/build.gradle | 12 + .../spring-boot-starter-hateoas/pom.xml | 32 - .../build.gradle | 11 + .../spring-boot-starter-integration/pom.xml | 31 - .../spring-boot-starter-jdbc/build.gradle | 12 + .../spring-boot-starter-jdbc/pom.xml | 35 - .../spring-boot-starter-jersey/build.gradle | 27 + .../spring-boot-starter-jersey/pom.xml | 176 - .../spring-boot-starter-jetty/build.gradle | 25 + .../spring-boot-starter-jetty/pom.xml | 108 - .../spring-boot-starter-jooq/build.gradle | 17 + .../spring-boot-starter-jooq/pom.xml | 54 - .../spring-boot-starter-json/build.gradle | 15 + .../spring-boot-starter-json/pom.xml | 46 - .../build.gradle | 14 + .../spring-boot-starter-jta-atomikos/pom.xml | 49 - .../build.gradle | 15 + .../spring-boot-starter-jta-bitronix/pom.xml | 45 - .../spring-boot-starter-log4j2/build.gradle | 13 + .../spring-boot-starter-log4j2/pom.xml | 40 - .../spring-boot-starter-logging/build.gradle | 12 + .../spring-boot-starter-logging/pom.xml | 35 - .../spring-boot-starter-mail/build.gradle | 12 + .../spring-boot-starter-mail/pom.xml | 36 - .../spring-boot-starter-mustache/build.gradle | 11 + .../spring-boot-starter-mustache/pom.xml | 31 - .../build.gradle | 17 + .../spring-boot-starter-oauth2-client/pom.xml | 53 - .../build.gradle | 14 + .../pom.xml | 44 - .../spring-boot-starter-parent/build.gradle | 226 ++ .../spring-boot-starter-parent/pom.xml | 297 -- .../spring-boot-starter-quartz/build.gradle | 13 + .../spring-boot-starter-quartz/pom.xml | 39 - .../build.gradle | 10 + .../spring-boot-starter-reactor-netty/pom.xml | 31 - .../spring-boot-starter-rsocket/build.gradle | 18 + .../spring-boot-starter-rsocket/pom.xml | 46 - .../spring-boot-starter-security/build.gradle | 13 + .../spring-boot-starter-security/pom.xml | 39 - .../spring-boot-starter-test/build.gradle | 30 + .../spring-boot-starter-test/pom.xml | 129 - .../build.gradle | 12 + .../spring-boot-starter-thymeleaf/pom.xml | 35 - .../spring-boot-starter-tomcat/build.gradle | 17 + .../spring-boot-starter-tomcat/pom.xml | 46 - .../spring-boot-starter-undertow/build.gradle | 20 + .../spring-boot-starter-undertow/pom.xml | 50 - .../build.gradle | 12 + .../spring-boot-starter-validation/pom.xml | 46 - .../build.gradle | 14 + .../spring-boot-starter-web-services/pom.xml | 49 - .../spring-boot-starter-web/build.gradle | 16 + .../spring-boot-starter-web/pom.xml | 54 - .../spring-boot-starter-webflux/build.gradle | 16 + .../spring-boot-starter-webflux/pom.xml | 58 - .../build.gradle | 12 + .../spring-boot-starter-websocket/pom.xml | 36 - .../spring-boot-starter/build.gradle | 17 + .../spring-boot-starter/pom.xml | 48 - .../build.gradle | 96 + .../spring-boot-test-autoconfigure/pom.xml | 384 -- .../neo4j/DataNeo4jTestIntegrationTests.java | 5 +- ...taNeo4jTestPropertiesIntegrationTests.java | 5 +- ...TestWithIncludeFilterIntegrationTests.java | 5 +- .../spring-boot-test/build.gradle | 55 + spring-boot-project/spring-boot-test/pom.xml | 288 -- .../pom.xml | 48 - spring-boot-project/spring-boot-tools/pom.xml | 35 - .../spring-boot-antlib/build.gradle | 75 + .../spring-boot-antlib/pom.xml | 155 - .../src/it/sample/build.xml | 7 +- .../build.gradle | 16 + .../pom.xml | 41 - .../spring-boot-configuration-docs/pom.xml | 26 - .../boot/configurationdocs/package-info.java | 20 - .../build.gradle | 16 + .../pom.xml | 27 - .../build.gradle | 27 + .../pom.xml | 69 - .../configurationprocessor/json/JSON.java | 17 +- .../json/JSONArray.java | 8 +- .../json/JSONObject.java | 22 +- .../json/JSONStringer.java | 3 +- .../json/JSONTokener.java | 4 +- .../spring-boot-gradle-plugin/build.gradle | 129 +- .../gradle.properties | 1 - .../gradle/wrapper/gradle-wrapper.jar | Bin 56177 -> 0 bytes .../spring-boot-gradle-plugin/pom.xml | 399 -- .../src/{main => docs}/asciidoc/css/style.css | 0 .../asciidoc/getting-started.adoc | 0 .../src/{main => docs}/asciidoc/index.adoc | 2 +- .../asciidoc/integrating-with-actuator.adoc | 0 .../asciidoc/managing-dependencies.adoc | 0 .../{main => docs}/asciidoc/packaging.adoc | 0 .../{main => docs}/asciidoc/publishing.adoc | 0 .../src/{main => docs}/asciidoc/reacting.adoc | 0 .../src/{main => docs}/asciidoc/running.adoc | 0 .../apply-plugin-release.gradle | 0 .../apply-plugin-release.gradle.kts | 0 .../apply-plugin-snapshot.gradle | 0 .../getting-started/milestone-settings.gradle | 0 .../milestone-settings.gradle.kts | 0 .../getting-started/snapshot-settings.gradle | 0 .../snapshot-settings.gradle.kts | 0 .../getting-started/typical-plugins.gradle | 0 .../typical-plugins.gradle.kts | 0 .../build-info-additional.gradle | 0 .../build-info-additional.gradle.kts | 0 .../build-info-basic.gradle | 0 .../build-info-basic.gradle.kts | 0 .../build-info-custom-values.gradle | 0 .../build-info-custom-values.gradle.kts | 0 .../configure-bom-with-plugins.gradle.kts | 0 .../configure-bom.gradle | 0 .../configure-bom.gradle.kts | 0 .../custom-version.gradle | 0 .../custom-version.gradle.kts | 0 .../depend-on-plugin-milestone.gradle | 0 .../depend-on-plugin-release.gradle | 0 .../depend-on-plugin-release.gradle.kts | 0 .../depend-on-plugin-snapshot.gradle | 0 .../managing-dependencies/dependencies.gradle | 0 .../dependencies.gradle.kts | 0 .../application-plugin-main-class.gradle | 0 .../application-plugin-main-class.gradle.kts | 0 .../gradle/packaging/boot-jar-and-jar.gradle | 0 .../packaging/boot-jar-and-jar.gradle.kts | 0 .../boot-jar-custom-launch-script.gradle | 0 .../boot-jar-custom-launch-script.gradle.kts | 0 .../boot-jar-include-launch-script.gradle | 0 .../boot-jar-include-launch-script.gradle.kts | 0 .../boot-jar-launch-script-properties.gradle | 0 ...ot-jar-launch-script-properties.gradle.kts | 0 .../packaging/boot-jar-main-class.gradle | 0 .../packaging/boot-jar-main-class.gradle.kts | 0 .../boot-jar-manifest-main-class.gradle | 0 .../boot-jar-manifest-main-class.gradle.kts | 0 .../packaging/boot-jar-requires-unpack.gradle | 0 .../boot-jar-requires-unpack.gradle.kts | 0 .../boot-war-include-devtools.gradle | 0 .../boot-war-include-devtools.gradle.kts | 0 .../boot-war-properties-launcher.gradle | 0 .../boot-war-properties-launcher.gradle.kts | 0 .../spring-boot-dsl-main-class.gradle | 0 .../spring-boot-dsl-main-class.gradle.kts | 0 .../packaging/war-container-dependency.gradle | 0 .../war-container-dependency.gradle.kts | 0 .../gradle/publishing/maven-publish.gradle | 0 .../publishing/maven-publish.gradle.kts | 0 .../gradle/publishing/maven.gradle | 0 .../gradle/publishing/maven.gradle.kts | 0 .../application-plugin-main-class-name.gradle | 0 ...lication-plugin-main-class-name.gradle.kts | 0 .../boot-run-disable-optimized-launch.gradle | 0 ...ot-run-disable-optimized-launch.gradle.kts | 0 .../gradle/running/boot-run-main.gradle | 0 .../gradle/running/boot-run-main.gradle.kts | 0 .../running/boot-run-source-resources.gradle | 0 .../boot-run-source-resources.gradle.kts | 0 .../spring-boot-dsl-main-class-name.gradle | 0 ...spring-boot-dsl-main-class-name.gradle.kts | 0 .../org.springframework.boot.properties | 1 - .../GettingStartedDocumentationTests.java | 2 +- ...gratingWithActuatorDocumentationTests.java | 6 +- ...anagingDependenciesDocumentationTests.java | 8 +- .../docs/PackagingDocumentationTests.java | 24 +- .../docs/PublishingDocumentationTests.java | 4 +- .../docs/RunningDocumentationTests.java | 17 +- .../junit/GradleCompatibilityExtension.java | 15 +- .../bundling/AbstractBootArchiveTests.java | 79 +- .../gradle/tasks/bundling/BootJarTests.java | 4 +- .../gradle/tasks/bundling/BootWarTests.java | 19 +- .../LaunchScriptConfigurationTests.java | 17 +- .../tasks/run/BootRunIntegrationTests.java | 18 +- .../spring-boot-loader-tools/build.gradle | 50 + .../spring-boot-loader-tools/pom.xml | 109 - .../spring-boot-loader/build.gradle | 26 + .../spring-boot-loader/pom.xml | 122 - .../it/executable-dir/application.properties | 2 - .../src/it/executable-dir/pom.xml | 97 - .../launcher/it/jar/EmbeddedJarStarter.java | 47 - .../launcher/it/jar/SpringConfiguration.java | 33 - .../src/it/executable-jar/pom.xml | 111 - .../main/assembly/jar-with-dependencies.xml | 26 - .../launcher/it/jar/EmbeddedJarStarter.java | 47 - .../launcher/it/jar/SpringConfiguration.java | 33 - .../it/executable-props-lib/loader.properties | 1 - .../src/it/executable-props-lib/pom.xml | 114 - .../src/main/assembly/app.xml | 27 - .../src/main/assembly/dependencies.xml | 17 - .../launcher/it/props/EmbeddedJarStarter.java | 34 - .../it/props/SpringConfiguration.java | 53 - .../src/main/resources/application.properties | 1 - .../src/it/executable-props-lib/verify.groovy | 17 - .../src/it/executable-props/pom.xml | 101 - .../main/assembly/jar-with-dependencies.xml | 27 - .../launcher/it/props/EmbeddedJarStarter.java | 34 - .../it/props/SpringConfiguration.java | 53 - .../src/main/resources/application.properties | 1 - .../src/it/executable-props/verify.groovy | 31 - .../src/it/executable-war/pom.xml | 90 - .../launcher/it/war/SpringConfiguration.java | 33 - .../launcher/it/war/SpringInitializer.java | 41 - .../it/war/embedded/EmbeddedWarStarter.java | 46 - ...bApplicationInitializersConfiguration.java | 74 - .../boot/loader/PropertiesLauncherTests.java | 8 +- .../spring-boot-maven-plugin/build.gradle | 88 + .../spring-boot-maven-plugin/pom.xml | 499 --- .../{main => docs}/asciidoc/build-info.adoc | 2 +- .../asciidoc/getting-started.adoc | 2 +- .../src/{main => docs}/asciidoc/help.adoc | 2 +- .../src/{main => docs}/asciidoc/index.adoc | 0 .../asciidoc/integration-tests.adoc | 4 +- .../{main => docs}/asciidoc/packaging.adoc | 2 +- .../src/{main => docs}/asciidoc/running.adoc | 2 +- .../AbstractArchiveIntegrationTests.java | 173 + .../boot/maven/BuildInfoIntegrationTests.java | 147 + .../boot/maven/JarIntegrationTests.java | 283 ++ .../boot/maven/MavenBuild.java | 202 + .../boot/maven/MavenBuildExtension.java | 100 + .../boot/maven/RunIntegrationTests.java | 145 + .../boot/maven/StartStopIntegrationTests.java | 57 + .../boot/maven/WarIntegrationTests.java | 66 + .../build-info-additional-properties/pom.xml | 15 +- .../main/java/org/test/SampleApplication.java | 0 .../build-info-custom-build-time}/pom.xml | 14 +- .../main/java/org/test/SampleApplication.java | 0 .../projects/build-info-custom-file/pom.xml | 33 + .../main/java/org/test/SampleApplication.java | 0 .../build-info-disable-build-time/pom.xml | 0 .../main/java/org/test/SampleApplication.java | 0 .../src/intTest/projects/build-info/pom.xml | 30 + .../main/java/org/test/SampleApplication.java | 0 .../projects/jar-attach-disabled}/pom.xml | 7 +- .../main/java/org/test/SampleApplication.java | 0 .../pom.xml | 33 + .../main/java/org/test/SampleApplication.java | 0 .../projects/jar-classifier-main/pom.xml | 32 + .../main/java/org/test/SampleApplication.java | 0 .../pom.xml | 18 - .../main/java/org/test/SampleApplication.java | 0 .../projects}/jar-classifier-source/pom.xml | 18 - .../main/java/org/test/SampleApplication.java | 0 .../intTest/projects/jar-create-dir/pom.xml | 33 + .../main/java/org/test/SampleApplication.java | 0 .../projects/jar-custom-dir}/pom.xml | 7 +- .../main/java/org/test/SampleApplication.java | 0 .../projects/jar-custom-launcher/pom.xml | 35 + .../src/launcher/custom.script | 0 .../main/java/org/test/SampleApplication.java | 0 .../jar-custom-layout}/custom/pom.xml | 6 +- .../main/java/org/test/SampleApplication.java | 0 .../jar-custom-layout}/default/pom.xml | 6 +- .../main/java/org/test/SampleApplication.java | 0 .../projects/jar-custom-layout/layout/pom.xml | 19 + .../java/smoketest/layout/SampleLayout.java | 0 .../smoketest/layout/SampleLayoutFactory.java | 0 .../main/resources/META-INF/spring.factories | 0 .../projects/jar-custom-layout/pom.xml | 19 + .../projects/jar-exclude-entry}/pom.xml | 18 +- .../main/java/org/test/SampleApplication.java | 0 .../projects}/jar-exclude-group/pom.xml | 6 - .../main/java/org/test/SampleApplication.java | 0 .../projects}/jar-executable/pom.xml | 16 - .../main/java/org/test/SampleApplication.java | 0 .../jar-lib-name-conflict/acme-lib/pom.xml | 7 - .../another-acme-lib/pom.xml | 0 .../projects}/jar-lib-name-conflict/pom.xml | 0 .../test-project/pom.xml | 18 - .../main/java/org/test/SampleApplication.java | 0 .../{it => intTest/projects}/jar-pom/pom.xml | 13 - .../{it => intTest/projects}/jar-skip/pom.xml | 2 +- .../projects/jar-system-scope-default/pom.xml | 38 + .../jar-system-scope-default/sample-1.0.0.jar | Bin .../main/java/org/test/SampleApplication.java | 0 .../projects/jar-system-scope}/pom.xml | 22 +- .../jar-system-scope/sample-1.0.0.jar | Bin .../main/java/org/test/SampleApplication.java | 0 .../projects/jar-test-scope}/pom.xml | 13 +- .../main/java/org/test/SampleApplication.java | 0 .../projects}/jar-with-kotlin-module/pom.xml | 37 - .../main/kotlin/org/test/SampleApplication.kt | 0 .../jar-with-layout-property/pom.xml | 0 .../main/java/org/test/SampleApplication.java | 0 .../projects}/jar-with-unpack/pom.xml | 0 .../main/java/org/test/SampleApplication.java | 0 .../projects/jar-with-zip-layout}/pom.xml | 7 +- .../main/java/org/test/SampleApplication.java | 0 .../src/{it => intTest/projects}/jar/pom.xml | 0 .../java/org/test}/SampleApplication.java | 0 .../run-arguments-commandline/pom.xml | 8 - .../main/java/org/test/SampleApplication.java | 0 .../projects}/run-arguments/pom.xml | 20 +- .../main/java/org/test/SampleApplication.java | 0 .../src/intTest/projects/run-devtools/pom.xml | 27 + .../boot/devtools/restart/Restarter.java | 0 .../main/java/org/test/SampleApplication.java | 0 .../intTest/projects/run-disable-fork/pom.xml | 31 + .../main/java/org/test/SampleApplication.java | 0 .../projects}/run-envargs/pom.xml | 24 +- .../main/java/org/test/SampleApplication.java | 0 .../projects}/run-exclude/pom.xml | 26 +- .../main/java/org/test/SampleApplication.java | 0 .../{it => intTest/projects}/run-fork/pom.xml | 0 .../main/java/org/test/SampleApplication.java | 0 .../projects/run-jvm-system-props/pom.xml | 31 + .../main/java/org/test/SampleApplication.java | 0 .../src/intTest/projects/run-jvmargs/pom.xml | 25 + .../main/java/org/test/SampleApplication.java | 0 .../run-profiles-fork-disabled}/pom.xml | 21 +- .../main/java/org/test/SampleApplication.java | 0 .../projects}/run-profiles/pom.xml | 20 +- .../main/java/org/test/SampleApplication.java | 0 .../projects}/run-toolchains/jdkHome/bin/java | 0 .../projects}/run-toolchains/pom.xml | 0 .../main/java/org/test/SampleApplication.java | 0 .../projects}/run-toolchains/toolchains.xml | 0 .../projects}/run-use-test-classpath/pom.xml | 14 +- .../main/java/org/test/SampleApplication.java | 0 .../projects/run-working-directory/pom.xml | 25 + .../main/java/org/test/SampleApplication.java | 0 .../src/intTest/projects/run/pom.xml | 22 + .../main/java/org/test/SampleApplication.java | 0 .../src/intTest/projects/settings.xml | 76 + .../start-stop-fork-disabled}/pom.xml | 3 - .../main/java/org/test/SampleApplication.java | 0 .../projects}/start-stop-skip/pom.xml | 0 .../main/java/org/test/SampleApplication.java | 0 .../projects/start-stop}/pom.xml | 0 .../main/java/org/test/SampleApplication.java | 0 .../projects}/war-reactor/jar/pom.xml | 0 .../projects}/war-reactor/pom.xml | 0 .../projects}/war-reactor/war/pom.xml | 0 .../java/com/example}/SampleApplication.java | 0 .../war/src/main/webapp/index.html | 0 .../projects}/war-with-unpack/pom.xml | 2 +- .../main/java/org/test/SampleApplication.java | 0 .../src/main/webapp/index.html | 0 .../src/{it => intTest/projects}/war/pom.xml | 0 .../main/java/org/test/SampleApplication.java | 0 .../projects}/war/src/main/webapp/index.html | 0 .../verify.groovy | 13 - .../it/build-info-custom-build-time/pom.xml | 46 - .../verify.groovy | 9 - .../it/build-info-custom-file/verify.groovy | 9 - .../verify.groovy | 9 - .../src/it/build-info/verify.groovy | 9 - .../it/jar-attach-disabled/invoker.properties | 1 - .../src/it/jar-attach-disabled/pom.xml | 60 - .../src/it/jar-attach-disabled/verify.groovy | 18 - .../invoker.properties | 1 - .../pom.xml | 58 - .../verify.groovy | 24 - .../it/jar-classifier-main/invoker.properties | 1 - .../src/it/jar-classifier-main/pom.xml | 57 - .../src/it/jar-classifier-main/verify.groovy | 22 - .../invoker.properties | 1 - .../verify.groovy | 20 - .../jar-classifier-source/invoker.properties | 1 - .../it/jar-classifier-source/verify.groovy | 16 - .../src/it/jar-create-dir/pom.xml | 61 - .../src/it/jar-create-dir/verify.groovy | 6 - .../src/it/jar-custom-dir/invoker.properties | 1 - .../src/it/jar-custom-dir/pom.xml | 60 - .../src/it/jar-custom-dir/verify.groovy | 10 - .../src/it/jar-custom-launcher/pom.xml | 63 - .../src/it/jar-custom-launcher/verify.groovy | 6 - .../src/it/jar-exclude-entry/pom.xml | 68 - .../src/it/jar-exclude-entry/verify.groovy | 27 - .../src/it/jar-exclude-group/verify.groovy | 27 - .../src/it/jar-executable/verify.groovy | 7 - .../it/jar-lib-name-conflict/verify.groovy | 30 - .../src/it/jar-non-executable/pom.xml | 60 - .../src/it/jar-non-executable/verify.groovy | 6 - .../src/it/jar-skip/verify.groovy | 7 - .../src/it/jar-system-scope-default/pom.xml | 61 - .../it/jar-system-scope-default/verify.groovy | 27 - .../src/it/jar-system-scope/pom.xml | 64 - .../src/it/jar-system-scope/verify.groovy | 27 - .../src/it/jar-test-scope/pom.xml | 63 - .../src/it/jar-test-scope/verify.groovy | 27 - .../it/jar-with-kotlin-module/verify.groovy | 30 - .../invoker.properties | 1 - .../it/jar-with-layout-property/verify.groovy | 4 - .../src/it/jar-with-unpack/verify.groovy | 28 - .../src/it/jar/invoker.properties | 1 - .../src/it/jar/verify.groovy | 19 - .../src/it/prop/pom.xml | 57 - .../src/it/prop/verify.groovy | 6 - .../invoker.properties | 1 - .../run-arguments-commandline/test.properties | 1 - .../run-arguments-commandline/verify.groovy | 2 - .../src/it/run-arguments/verify.groovy | 2 - .../src/it/run-devtools/verify.groovy | 6 - .../src/it/run-disable-fork/verify.groovy | 7 - .../src/it/run-envargs/verify.groovy | 3 - .../src/it/run-exclude/verify.groovy | 3 - .../src/it/run-fork/invoker.properties | 1 - .../src/it/run-fork/verify.groovy | 21 - .../src/it/run-jvm-system-props/pom.xml | 39 - .../src/it/run-jvm-system-props/verify.groovy | 3 - .../src/it/run-jvmargs/verify.groovy | 3 - .../src/it/run-profiles-fork/verify.groovy | 2 - .../src/it/run-profiles/verify.groovy | 2 - .../src/it/run-toolchains/invoker.properties | 2 - .../src/it/run-toolchains/verify.groovy | 2 - .../it/run-use-test-classpath/verify.groovy | 3 - .../it/run-working-directory/verify.groovy | 6 - .../src/it/run/verify.groovy | 3 - .../src/it/settings.xml | 35 - .../src/it/start-stop-fork/invoker.properties | 1 - .../src/it/start-stop-fork/verify.groovy | 5 - .../src/it/start-stop-skip/invoker.properties | 1 - .../src/it/start-stop-skip/verify.groovy | 5 - .../src/it/start-stop/invoker.properties | 1 - .../src/it/start-stop/verify.groovy | 5 - .../src/it/war-reactor/verify.groovy | 29 - .../src/it/war-with-unpack/verify.groovy | 29 - .../src/it/war/verify.groovy | 7 - .../src/maven/resources/pom.xml | 45 + .../springframework/boot/maven/Verify.java | 308 -- .../spring-boot-test-support/build.gradle | 37 + .../spring-boot-test-support/pom.xml | 149 - .../boot/testsupport/BuildOutput.java | 15 +- spring-boot-project/spring-boot/build.gradle | 127 + spring-boot-project/spring-boot/pom.xml | 560 --- .../boot/SpringApplicationTests.java | 2 +- .../log4j2/Log4J2LoggingSystemTests.java | 4 + .../AbstractServletWebServerFactoryTests.java | 63 +- spring-boot-tests/pom.xml | 59 - .../spring-boot-deployment-tests/build.gradle | 28 + .../spring-boot-deployment-tests/pom.xml | 85 - .../pom.xml | 117 - .../SampleGlassfishDeployApplication.java | 25 - .../src/main/webapp/WEB-INF/glassfish-web.xml | 4 - .../SampleGlassfishDeployApplicationIT.java | 52 - .../pom.xml | 90 - .../main/java/sample/SampleController.java | 44 - .../sample/SampleTomcatDeployApplication.java | 25 - .../SampleTomcatDeployApplicationIT.java | 98 - .../spring-boot-deployment-test-tomee/pom.xml | 103 - .../main/java/sample/SampleController.java | 30 - .../sample/SampleTomEEDeployApplication.java | 31 - .../SampleTomEEDeployApplicationIT.java | 51 - .../pom.xml | 95 - .../SampleWildFlyDeployApplication.java | 25 - .../WEB-INF/jboss-deployment-structure.xml | 15 - .../SampleWildFlyDeployApplicationIT.java | 51 - .../spring-boot-deployment-test-wlp/pom.xml | 95 - .../main/java/sample/SampleController.java | 30 - .../sample/SampleWlpDeployApplicationIT.java | 51 - .../sample/DeploymentIntegrationTests.java | 139 + .../sample/DeploymentTestApplication.java} | 2 +- .../main/java/sample/SampleController.java | 0 .../spring-boot-integration-tests/pom.xml | 35 - .../build.gradle | 17 + .../pom.xml | 40 - .../spring-boot-devtools-tests/pom.xml | 67 - .../app/build.gradle | 21 + .../app/settings.gradle | 15 + .../LaunchScriptTestApplication.java | 0 .../LaunchVerificationController.java | 0 .../build.gradle | 45 + .../spring-boot-launch-script-tests/pom.xml | 110 - ...SysVinitLaunchScriptIntegrationTests.java} | 23 +- .../conf/CentOS/6.9-a23bced6/Dockerfile | 2 +- .../conf/Ubuntu/trusty-20160914/Dockerfile | 2 +- .../conf/Ubuntu/xenial-20160914/Dockerfile | 2 +- .../{test => intTest}/resources/logback.xml | 0 .../resources/scripts/basic-launch.sh | 0 .../scripts/force-stop-when-stopped.sh | 0 ...launch-with-double-link-single-java-opt.sh | 0 .../scripts/launch-with-missing-log-folder.sh | 0 .../scripts/launch-with-missing-pid-folder.sh | 0 ...ch-with-multiple-command-line-arguments.sh | 0 .../scripts/launch-with-multiple-java-opts.sh | 0 .../scripts/launch-with-multiple-run-args.sh | 0 .../launch-with-relative-log-folder.sh | 0 .../launch-with-relative-pid-folder.sh | 0 .../launch-with-run-as-invalid-user.sh | 0 ...with-run-as-user-preferred-to-jar-owner.sh | 0 .../launch-with-run-as-user-root-required.sh | 0 .../scripts/launch-with-run-as-user.sh | 0 ...aunch-with-single-command-line-argument.sh | 0 .../scripts/launch-with-single-java-opt.sh | 0 .../scripts/launch-with-single-run-arg.sh | 0 ...-with-use-of-start-stop-daemon-disabled.sh | 0 ...-file-ownership-is-changed-when-created.sh | 0 ...file-ownership-is-unchanged-when-exists.sh | 0 .../resources/scripts/log-file-ownership.sh | 0 .../resources/scripts/pid-file-ownership.sh | 0 .../resources/scripts/pid-folder-ownership.sh | 0 .../resources/scripts/restart-when-started.sh | 0 .../resources/scripts/restart-when-stopped.sh | 0 .../resources/scripts/start-when-started.sh | 0 .../resources/scripts/start-when-stopped.sh | 0 .../resources/scripts/status-when-killed.sh | 0 .../resources/scripts/status-when-started.sh | 0 .../resources/scripts/status-when-stopped.sh | 0 .../resources/scripts/stop-when-stopped.sh | 0 .../resources/scripts/test-functions.sh | 10 +- .../spring-boot-server-tests/build.gradle | 51 + .../spring-boot-server-tests/pom.xml | 84 - .../embedded/AbstractApplicationLauncher.java | 2 +- .../context/embedded/ApplicationBuilder.java | 15 +- ...verContainerInvocationContextProvider.java | 6 +- .../embedded/ExplodedApplicationLauncher.java | 1 + .../boot/context/embedded/Versions.java | 35 +- .../src/test/resources/settings-template.xml | 1 + .../spring-boot-smoke-tests-invoker/pom.xml | 81 - .../spring-boot-smoke-tests/pom.xml | 206 - .../build.gradle | 11 + .../spring-boot-smoke-test-activemq/pom.xml | 37 - .../build.gradle | 17 + .../pom.xml | 59 - .../build.gradle | 20 + .../pom.xml | 59 - .../build.gradle | 14 + .../pom.xml | 43 - .../build.gradle | 15 + .../pom.xml | 53 - .../build.gradle | 17 + .../spring-boot-smoke-test-actuator/pom.xml | 85 - .../resources/META-INF/build-info.properties | 5 + .../spring-boot-smoke-test-amqp/build.gradle | 10 + .../spring-boot-smoke-test-amqp/pom.xml | 38 - .../build.gradle | 10 + .../pom.xml | 37 - .../spring-boot-smoke-test-ant/build.gradle | 69 + .../spring-boot-smoke-test-ant/build.xml | 9 +- .../ivysettings.xml | 4 +- .../spring-boot-smoke-test-ant/pom.xml | 107 - .../smoketest/ant/SampleAntApplicationIT.java | 2 +- .../spring-boot-smoke-test-aop/build.gradle | 12 + .../spring-boot-smoke-test-aop/pom.xml | 37 - .../build.gradle | 16 + .../spring-boot-smoke-test-atmosphere/pom.xml | 57 - .../spring-boot-smoke-test-batch/build.gradle | 13 + .../spring-boot-smoke-test-batch/pom.xml | 43 - .../spring-boot-smoke-test-cache/build.gradle | 46 + .../spring-boot-smoke-test-cache/pom.xml | 56 - .../pom.xml | 85 - .../src/it/custom/verify.groovy | 6 - .../main/java/org/test/SampleApplication.java | 24 - .../src/it/default/verify.groovy | 6 - .../src/it/settings.xml | 35 - .../test/java/smoketest/layout/Verify.java | 41 - .../build.gradle | 40 + .../pom.xml | 102 - .../build.gradle | 12 + .../pom.xml | 37 - .../build.gradle | 12 + .../pom.xml | 41 - .../build.gradle | 14 + .../spring-boot-smoke-test-data-jdbc/pom.xml | 47 - .../build.gradle | 14 + .../spring-boot-smoke-test-data-jpa/pom.xml | 47 - .../build.gradle | 13 + .../spring-boot-smoke-test-data-ldap/pom.xml | 45 - .../build.gradle | 13 + .../pom.xml | 45 - .../build.gradle | 12 + .../spring-boot-smoke-test-data-neo4j/pom.xml | 37 - .../build.gradle | 12 + .../spring-boot-smoke-test-data-redis/pom.xml | 51 - .../build.gradle | 19 + .../spring-boot-smoke-test-data-rest/pom.xml | 80 - .../build.gradle | 12 + .../spring-boot-smoke-test-data-solr/pom.xml | 37 - .../build.gradle | 20 + .../spring-boot-smoke-test-devtools/pom.xml | 45 - .../build.gradle | 17 + .../spring-boot-smoke-test-flyway/pom.xml | 69 - .../build.gradle | 12 + .../spring-boot-smoke-test-hateoas/pom.xml | 37 - .../build.gradle | 22 + .../pom.xml | 44 - .../build.gradle | 16 + .../pom.xml | 52 - .../build.gradle | 18 + .../spring-boot-smoke-test-jersey/pom.xml | 67 - .../build.gradle | 25 + .../spring-boot-smoke-test-jetty-jsp/pom.xml | 125 - .../build.gradle | 16 + .../spring-boot-smoke-test-jetty-ssl/pom.xml | 53 - .../spring-boot-smoke-test-jetty/build.gradle | 16 + .../spring-boot-smoke-test-jetty/pom.xml | 48 - .../spring-boot-smoke-test-jooq/build.gradle | 43 + .../spring-boot-smoke-test-jooq/pom.xml | 164 - .../spring-boot-smoke-test-jpa/build.gradle | 25 + .../spring-boot-smoke-test-jpa/pom.xml | 87 - .../build.gradle | 23 + .../pom.xml | 77 - .../build.gradle | 23 + .../pom.xml | 77 - .../spring-boot-smoke-test-jta-jndi/pom.xml | 58 - .../build.gradle | 26 + .../pom.xml | 45 - .../build.gradle | 24 + .../pom.xml | 27 - .../spring-boot-smoke-test-kafka/build.gradle | 15 + .../spring-boot-smoke-test-kafka/pom.xml | 51 - .../build.gradle | 17 + .../spring-boot-smoke-test-liquibase/pom.xml | 55 - .../build.gradle | 12 + .../spring-boot-smoke-test-logback/pom.xml | 37 - .../build.gradle | 14 + .../pom.xml | 46 - .../build.gradle | 14 + .../pom.xml | 47 - .../build.gradle | 15 + .../pom.xml | 51 - .../build.gradle | 12 + .../spring-boot-smoke-test-profile/pom.xml | 37 - .../build.gradle | 14 + .../pom.xml | 43 - .../build.gradle | 16 + .../spring-boot-smoke-test-quartz/pom.xml | 52 - .../build.gradle | 15 + .../pom.xml | 50 - .../build.gradle | 14 + .../pom.xml | 47 - .../build.gradle | 15 + .../spring-boot-smoke-test-rsocket/pom.xml | 67 - .../build.gradle | 14 + .../pom.xml | 45 - .../build.gradle | 15 + .../pom.xml | 77 - .../build.gradle | 15 + .../pom.xml | 59 - .../build.gradle | 12 + .../spring-boot-smoke-test-secure/pom.xml | 37 - .../build.gradle | 14 + .../spring-boot-smoke-test-servlet/pom.xml | 49 - .../build.gradle | 27 + .../pom.xml | 75 - .../build.gradle | 36 + .../spring-boot-smoke-test-session/pom.xml | 105 - .../build.gradle | 16 + .../spring-boot-smoke-test-simple/pom.xml | 51 - .../build.gradle | 18 + .../pom.xml | 52 - .../spring-boot-smoke-test-test/build.gradle | 18 + .../spring-boot-smoke-test-test/pom.xml | 77 - .../build.gradle | 21 + .../spring-boot-smoke-test-testng/pom.xml | 61 - .../testng/SampleTestNGApplicationTests.java | 4 +- .../build.gradle | 16 + .../spring-boot-smoke-test-tomcat-jsp/pom.xml | 56 - .../build.gradle | 13 + .../pom.xml | 42 - .../build.gradle | 13 + .../spring-boot-smoke-test-tomcat-ssl/pom.xml | 42 - .../build.gradle | 14 + .../spring-boot-smoke-test-tomcat/pom.xml | 45 - .../build.gradle | 17 + .../pom.xml | 54 - .../build.gradle | 16 + .../pom.xml | 51 - .../build.gradle | 15 + .../spring-boot-smoke-test-undertow/pom.xml | 47 - .../spring-boot-smoke-test-war/build.gradle | 16 + .../spring-boot-smoke-test-war/pom.xml | 93 - .../build.gradle | 13 + .../pom.xml | 52 - .../build.gradle | 15 + .../pom.xml | 51 - .../build.gradle | 16 + .../spring-boot-smoke-test-web-jsp/pom.xml | 61 - .../build.gradle | 15 + .../pom.xml | 49 - .../build.gradle | 13 + .../pom.xml | 49 - .../build.gradle | 15 + .../pom.xml | 50 - .../build.gradle | 18 + .../pom.xml | 58 - .../build.gradle | 16 + .../spring-boot-smoke-test-web-secure/pom.xml | 54 - .../build.gradle | 17 + .../spring-boot-smoke-test-web-static/pom.xml | 54 - .../build.gradle | 13 + .../spring-boot-smoke-test-web-ui/pom.xml | 45 - .../build.gradle | 30 + .../pom.xml | 77 - .../build.gradle | 14 + .../spring-boot-smoke-test-webflux/pom.xml | 55 - .../build.gradle | 21 + .../pom.xml | 67 - .../build.gradle | 15 + .../pom.xml | 47 - .../build.gradle | 12 + .../pom.xml | 37 - .../build.gradle | 15 + .../pom.xml | 47 - .../spring-boot-smoke-test-xml/build.gradle | 12 + .../spring-boot-smoke-test-xml/pom.xml | 37 - src/checkstyle/checkstyle-suppressions.xml | 2 + src/checkstyle/checkstyle.xml | 7 +- 974 files changed, 17108 insertions(+), 26596 deletions(-) delete mode 100644 .bomr/bomr.yaml delete mode 100644 .mvn/jvm.config delete mode 100755 .mvn/wrapper/maven-wrapper.jar delete mode 100755 .mvn/wrapper/maven-wrapper.properties create mode 100644 build.gradle create mode 100644 buildSrc/README.adoc create mode 100644 buildSrc/build.gradle create mode 100644 buildSrc/settings.gradle create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/ConventionsPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/DeployedPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/MavenRepositoryPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationMetadata.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/BomPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/CheckBom.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/UpgradePolicy.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MavenMetadataVersionResolver.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/Upgrade.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java rename spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/ExampleController.java => buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeResolver.java (53%) create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/VersionResolver.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/GitHub.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/GitHubRepository.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/Milestone.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHub.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHubRepository.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/AbstractDependencyVersion.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/ArtifactVersionDependencyVersion.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/CombinedPatchAndQualifierDependencyVersion.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/DependencyVersion.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/LeadingZeroesDependencyVersion.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/NumericQualifierDependencyVersion.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/ReleaseTrainDependencyVersion.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/UnstructuredDependencyVersion.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForConflicts.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForProhibitedDependencies.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/cli/AbstractPackageManagerDefinitionTask.java rename spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/java/sample/SampleController.java => buildSrc/src/main/java/org/springframework/boot/build/cli/HomebrewFormula.java (57%) rename spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/ExampleController.java => buildSrc/src/main/java/org/springframework/boot/build/cli/ScoopManifest.java (53%) create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/constraints/DocumentConstrainedVersions.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs => buildSrc/src/main/java/org/springframework/boot/build/context/properties}/AsciidocBuilder.java (91%) rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs => buildSrc/src/main/java/org/springframework/boot/build/context/properties}/CompoundConfigurationTableEntry.java (77%) rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs => buildSrc/src/main/java/org/springframework/boot/build/context/properties}/ConfigurationMetadataDocumentWriter.java (77%) create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperties.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationPropertiesPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperty.java rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs => buildSrc/src/main/java/org/springframework/boot/build/context/properties}/ConfigurationTable.java (92%) rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs => buildSrc/src/main/java/org/springframework/boot/build/context/properties}/ConfigurationTableEntry.java (92%) create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/context/properties/DocumentConfigurationProperties.java rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs => buildSrc/src/main/java/org/springframework/boot/build/context/properties}/DocumentOptions.java (95%) rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs => buildSrc/src/main/java/org/springframework/boot/build/context/properties}/SingleConfigurationTableEntry.java (88%) create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/log4j2/ReproducibleLog4j2PluginsDatAction.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/DocumentPluginGoals.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenExec.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenPluginPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/PluginXmlParser.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/PrepareMavenBinaries.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/optional/OptionalDependenciesPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/starters/DocumentStarters.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/starters/StarterMetadata.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/test/IntegrationTestPlugin.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/test/autoconfigure/DocumentTestSlices.java create mode 100644 buildSrc/src/main/java/org/springframework/boot/build/test/autoconfigure/TestSliceMetadata.java create mode 100644 buildSrc/src/main/resources/effective-bom-settings.xml create mode 100644 buildSrc/src/test/java/org/springframework/boot/build/assertj/NodeAssert.java create mode 100644 buildSrc/src/test/java/org/springframework/boot/build/bom/BomPluginIntegrationTests.java create mode 100644 buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/ArtifactVersionDependencyVersionTests.java create mode 100644 buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/DependencyVersionTests.java create mode 100644 buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/NumericQualifierDependencyVersionTests.java create mode 100644 buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/ReleaseTrainDependencyVersionTests.java rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs => buildSrc/src/test/java/org/springframework/boot/build/context/properties}/CompoundConfigurationTableEntryTests.java (65%) rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs => buildSrc/src/test/java/org/springframework/boot/build/context/properties}/ConfigurationTableTests.java (67%) rename {spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs => buildSrc/src/test/java/org/springframework/boot/build/context/properties}/SingleConfigurationTableEntryTests.java (63%) create mode 100644 buildSrc/src/test/java/org/springframework/boot/build/log4j2/ReproduciblePluginsDatActionTests.java rename spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/ExampleController.java => buildSrc/src/test/java/org/springframework/boot/build/mavenplugin/PluginXmlParserTests.java (52%) create mode 100644 buildSrc/src/test/java/org/springframework/boot/build/optional/OptionalDependenciesPluginIntegrationTests.java create mode 100644 buildSrc/src/test/resources/plugin.xml delete mode 100755 ci/scripts/build-deployment-tests.sh delete mode 100755 ci/scripts/build-integration-tests.sh delete mode 100755 ci/scripts/build-smoke-tests.sh delete mode 100644 ci/tasks/build-deployment-tests.yml delete mode 100644 ci/tasks/build-integration-tests.yml delete mode 100644 ci/tasks/build-smoke-tests.yml create mode 100644 gradle.properties create mode 100644 gradle/build-cache-settings.gradle create mode 100644 gradle/build-scan-user-data.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar rename {spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle => gradle}/wrapper/gradle-wrapper.properties (91%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradlew => gradlew (75%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradlew.bat => gradlew.bat (75%) delete mode 100644 pom.xml create mode 100644 settings.gradle delete mode 100644 spring-boot-project/pom.xml create mode 100644 spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle delete mode 100644 spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/auditevents.adoc (79%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/beans.adoc (78%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/caches.adoc (78%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/conditions.adoc (80%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/configprops.adoc (80%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/env.adoc (78%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/flyway.adoc (79%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/health.adoc (82%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/heapdump.adoc (92%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/httptrace.adoc (79%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/info.adoc (81%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/integrationgraph.adoc (80%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/liquibase.adoc (79%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/logfile.adoc (77%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/loggers.adoc (79%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/mappings.adoc (83%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/metrics.adoc (76%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/prometheus.adoc (79%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/scheduledtasks.adoc (78%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/sessions.adoc (78%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/shutdown.adoc (78%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/endpoints/threaddump.adoc (76%) rename spring-boot-project/spring-boot-actuator-autoconfigure/src/{main => docs}/asciidoc/index.adoc (100%) create mode 100644 spring-boot-project/spring-boot-actuator/build.gradle delete mode 100644 spring-boot-project/spring-boot-actuator/pom.xml create mode 100644 spring-boot-project/spring-boot-autoconfigure/build.gradle delete mode 100755 spring-boot-project/spring-boot-autoconfigure/pom.xml create mode 100644 spring-boot-project/spring-boot-cli/build.gradle delete mode 100644 spring-boot-project/spring-boot-cli/pom.xml rename spring-boot-project/spring-boot-cli/src/{it => intTest}/java/org/springframework/boot/cli/CommandLineIT.java (81%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/java/org/springframework/boot/cli/JarCommandIT.java (71%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/java/org/springframework/boot/cli/WarCommandIT.java (83%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java (83%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/jar-command/bad.groovy (100%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/jar-command/jar.groovy (100%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/jar-command/public/public.txt (100%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/jar-command/resources/resource.txt (100%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/jar-command/root.properties (100%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/jar-command/static/static.txt (100%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/jar-command/templates/template.txt (100%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/run-command/quiet.groovy (100%) create mode 100644 spring-boot-project/spring-boot-cli/src/intTest/resources/settings.xml rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/war-command/root.properties (100%) rename spring-boot-project/spring-boot-cli/src/{it => intTest}/resources/war-command/war.groovy (100%) rename spring-boot-project/{spring-boot-tools/spring-boot-loader/src/it => spring-boot-cli/src/test/resources/cli-tester/.m2}/settings.xml (52%) create mode 100644 spring-boot-project/spring-boot-cli/src/test/resources/run-command/quiet.groovy create mode 100644 spring-boot-project/spring-boot-dependencies/build.gradle delete mode 100644 spring-boot-project/spring-boot-dependencies/pom.xml create mode 100644 spring-boot-project/spring-boot-devtools/build.gradle delete mode 100644 spring-boot-project/spring-boot-devtools/pom.xml rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/com/example/ControllerOne.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/com/example/DevToolsTestApplication.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/AbstractApplicationLauncher.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/AbstractDevToolsIntegrationTests.java (98%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/ApplicationLauncher.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/ApplicationState.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/DevToolsIntegrationTests.java (62%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/DevToolsWithLazyInitializationIntegrationTests.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/Directories.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/ExplodedRemoteApplicationLauncher.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/FileContents.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/JarFileRemoteApplicationLauncher.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/JvmLauncher.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/LaunchedApplication.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/LocalApplicationLauncher.java (100%) rename {spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test => spring-boot-project/spring-boot-devtools/src/intTest}/java/org/springframework/boot/devtools/tests/RemoteApplicationLauncher.java (100%) create mode 100644 spring-boot-project/spring-boot-docs/build.gradle delete mode 100644 spring-boot-project/spring-boot-docs/pom.xml rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/appendix-application-properties.adoc (51%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/appendix-auto-configuration-classes.adoc (76%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/appendix-configuration-metadata.adoc (99%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/appendix-dependency-versions.adoc (83%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/appendix-executable-jar-format.adoc (99%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/appendix-test-auto-configuration.adoc (77%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/attributes.adoc (98%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/build-tool-plugins.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/deployment.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/documentation-overview.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/getting-started.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/howto.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/index-docinfo.xml (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/index.htmladoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/index.htmlsingleadoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/legal.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/production-ready-features.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/spring-boot-cli.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/spring-boot-features.adoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/spring-boot-reference.pdfadoc (100%) rename spring-boot-project/spring-boot-docs/src/{main => docs}/asciidoc/using-spring-boot.adoc (99%) create mode 100644 spring-boot-project/spring-boot-parent/build.gradle delete mode 100644 spring-boot-project/spring-boot-parent/pom.xml create mode 100644 spring-boot-project/spring-boot-properties-migrator/build.gradle delete mode 100644 spring-boot-project/spring-boot-properties-migrator/pom.xml delete mode 100644 spring-boot-project/spring-boot-starters/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-activemq/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-activemq/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-actuator/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-actuator/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-amqp/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-amqp/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-aop/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-aop/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-artemis/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-artemis/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-batch/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-batch/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-cache/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-cache/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-cloud-connectors/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-cloud-connectors/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra-reactive/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra-reactive/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase-reactive/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase-reactive/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-elasticsearch/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-elasticsearch/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-jdbc/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-jdbc/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-ldap/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-ldap/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb-reactive/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb-reactive/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-neo4j/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-neo4j/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis-reactive/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis-reactive/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-rest/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-rest/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-solr/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-data-solr/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-freemarker/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-freemarker/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-groovy-templates/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-groovy-templates/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-hateoas/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-hateoas/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-integration/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-integration/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jdbc/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jdbc/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jersey/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jersey/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jetty/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jetty/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jooq/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jooq/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-json/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-json/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jta-atomikos/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jta-atomikos/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jta-bitronix/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-jta-bitronix/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-log4j2/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-log4j2/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-logging/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-logging/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-mail/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-mail/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-mustache/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-mustache/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-client/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-client/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-resource-server/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-resource-server/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-parent/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-quartz/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-quartz/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-reactor-netty/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-reactor-netty/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-rsocket/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-rsocket/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-security/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-security/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-test/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-test/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-tomcat/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-tomcat/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-undertow/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-undertow/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-validation/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-validation/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-web-services/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-web-services/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-web/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-web/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-websocket/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter-websocket/pom.xml create mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter/build.gradle delete mode 100644 spring-boot-project/spring-boot-starters/spring-boot-starter/pom.xml create mode 100644 spring-boot-project/spring-boot-test-autoconfigure/build.gradle delete mode 100644 spring-boot-project/spring-boot-test-autoconfigure/pom.xml create mode 100644 spring-boot-project/spring-boot-test/build.gradle delete mode 100644 spring-boot-project/spring-boot-test/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/org.springframework.boot.gradle.plugin/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/pom.xml create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-antlib/build.gradle delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-antlib/pom.xml create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/build.gradle delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/package-info.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata/build.gradle delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata/pom.xml create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/build.gradle delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle/wrapper/gradle-wrapper.jar delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/css/style.css (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/getting-started.adoc (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/index.adoc (96%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/integrating-with-actuator.adoc (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/managing-dependencies.adoc (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/packaging.adoc (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/publishing.adoc (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/reacting.adoc (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/asciidoc/running.adoc (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/apply-plugin-release.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/apply-plugin-release.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/apply-plugin-snapshot.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/milestone-settings.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/milestone-settings.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/snapshot-settings.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/snapshot-settings.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/typical-plugins.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/getting-started/typical-plugins.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/integrating-with-actuator/build-info-additional.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/integrating-with-actuator/build-info-additional.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/integrating-with-actuator/build-info-basic.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/integrating-with-actuator/build-info-basic.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/integrating-with-actuator/build-info-custom-values.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/integrating-with-actuator/build-info-custom-values.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/configure-bom-with-plugins.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/configure-bom.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/configure-bom.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/custom-version.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/custom-version.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/depend-on-plugin-milestone.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/depend-on-plugin-release.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/depend-on-plugin-release.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/depend-on-plugin-snapshot.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/dependencies.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/managing-dependencies/dependencies.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/application-plugin-main-class.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/application-plugin-main-class.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-and-jar.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-and-jar.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-custom-launch-script.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-custom-launch-script.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-include-launch-script.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-include-launch-script.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-launch-script-properties.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-launch-script-properties.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-main-class.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-main-class.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-manifest-main-class.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-manifest-main-class.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-requires-unpack.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-jar-requires-unpack.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-war-include-devtools.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-war-include-devtools.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-war-properties-launcher.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/boot-war-properties-launcher.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/spring-boot-dsl-main-class.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/spring-boot-dsl-main-class.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/war-container-dependency.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/packaging/war-container-dependency.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/publishing/maven-publish.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/publishing/maven-publish.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/publishing/maven.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/publishing/maven.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/application-plugin-main-class-name.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/application-plugin-main-class-name.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/boot-run-disable-optimized-launch.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/boot-run-disable-optimized-launch.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/boot-run-main.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/boot-run-main.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/boot-run-source-resources.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/boot-run-source-resources.gradle.kts (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/spring-boot-dsl-main-class-name.gradle (100%) rename spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/{main => docs}/gradle/running/spring-boot-dsl-main-class-name.gradle.kts (100%) delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.springframework.boot.properties create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader-tools/build.gradle delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader-tools/pom.xml create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/application.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/EmbeddedJarStarter.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/SpringConfiguration.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/assembly/jar-with-dependencies.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/EmbeddedJarStarter.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/SpringConfiguration.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/loader.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/app.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/dependencies.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/EmbeddedJarStarter.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/SpringConfiguration.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/resources/application.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/assembly/jar-with-dependencies.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/java/org/springframework/launcher/it/props/EmbeddedJarStarter.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/java/org/springframework/launcher/it/props/SpringConfiguration.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/resources/application.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/SpringConfiguration.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/SpringInitializer.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/embedded/EmbeddedWarStarter.java delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/embedded/WebApplicationInitializersConfiguration.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/build.gradle delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{main => docs}/asciidoc/build-info.adoc (95%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{main => docs}/asciidoc/getting-started.adoc (60%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{main => docs}/asciidoc/help.adoc (65%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{main => docs}/asciidoc/index.adoc (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{main => docs}/asciidoc/integration-tests.adoc (97%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{main => docs}/asciidoc/packaging.adoc (99%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{main => docs}/asciidoc/running.adoc (99%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuildExtension.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/RunIntegrationTests.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/StartStopIntegrationTests.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/build-info-additional-properties/pom.xml (74%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/build-info-additional-properties/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/run-devtools => intTest/projects/build-info-custom-build-time}/pom.xml (81%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/build-info-custom-file/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/build-info-disable-build-time/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/build-info/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/run => intTest/projects/jar-attach-disabled}/pom.xml (89%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-attach-disabled/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-classifier-main-attach-disabled/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-classifier-main/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-classifier-source-attach-disabled/pom.xml (74%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-classifier-source-attach-disabled/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-classifier-source/pom.xml (74%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-classifier-source/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-create-dir/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/run-jvmargs => intTest/projects/jar-custom-dir}/pom.xml (86%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-custom-dir/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-custom-launcher/src/launcher/custom.script (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-custom-launcher/src/main/java/org/test/SampleApplication.java (100%) rename {spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it => spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout}/custom/pom.xml (89%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-exclude-entry => intTest/projects/jar-custom-layout/custom}/src/main/java/org/test/SampleApplication.java (100%) rename {spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it => spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout}/default/pom.xml (88%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-exclude-group => intTest/projects/jar-custom-layout/default}/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/pom.xml rename {spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout => spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout}/src/main/java/smoketest/layout/SampleLayout.java (100%) rename {spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout => spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout}/src/main/java/smoketest/layout/SampleLayoutFactory.java (100%) rename {spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout => spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout}/src/main/resources/META-INF/spring.factories (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/build-info-custom-file => intTest/projects/jar-exclude-entry}/pom.xml (78%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-executable => intTest/projects/jar-exclude-entry}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-exclude-group/pom.xml (90%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-lib-name-conflict/test-project => intTest/projects/jar-exclude-group}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-executable/pom.xml (75%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-non-executable => intTest/projects/jar-executable}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-lib-name-conflict/acme-lib/pom.xml (71%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-lib-name-conflict/another-acme-lib/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-lib-name-conflict/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-lib-name-conflict/test-project/pom.xml (73%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-system-scope-default => intTest/projects/jar-lib-name-conflict/test-project}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-pom/pom.xml (69%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-skip/pom.xml (97%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-system-scope-default/sample-1.0.0.jar (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-system-scope => intTest/projects/jar-system-scope-default}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/run-disable-fork => intTest/projects/jar-system-scope}/pom.xml (71%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-system-scope/sample-1.0.0.jar (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-test-scope => intTest/projects/jar-system-scope}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/build-info => intTest/projects/jar-test-scope}/pom.xml (81%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar-with-unpack => intTest/projects/jar-test-scope}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-with-kotlin-module/pom.xml (66%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-with-kotlin-module/src/main/kotlin/org/test/SampleApplication.kt (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-with-layout-property/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-with-layout-property/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar-with-unpack/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/jar => intTest/projects/jar-with-unpack}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/run-working-directory => intTest/projects/jar-with-zip-layout}/pom.xml (84%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/prop => intTest/projects/jar-with-zip-layout}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/jar/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/war-reactor/war/src/main/java/com/example => intTest/projects/jar/src/main/java/org/test}/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-arguments-commandline/pom.xml (85%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-arguments-commandline/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-arguments/pom.xml (68%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-arguments/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-devtools/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-devtools/src/main/java/org/springframework/boot/devtools/restart/Restarter.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-devtools/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-disable-fork/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-disable-fork/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-envargs/pom.xml (70%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-envargs/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-exclude/pom.xml (75%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-exclude/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-fork/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-fork/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-jvm-system-props/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-jvmargs/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/run-profiles-fork => intTest/projects/run-profiles-fork-disabled}/pom.xml (74%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/run-profiles-fork => intTest/projects/run-profiles-fork-disabled}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-profiles/pom.xml (74%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-profiles/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-toolchains/jdkHome/bin/java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-toolchains/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-toolchains/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-toolchains/toolchains.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-use-test-classpath/pom.xml (81%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-use-test-classpath/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run-working-directory/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run/pom.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/run/src/main/java/org/test/SampleApplication.java (100%) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/start-stop => intTest/projects/start-stop-fork-disabled}/pom.xml (94%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/start-stop => intTest/projects/start-stop-fork-disabled}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/start-stop-skip/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/start-stop-skip/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/start-stop-fork => intTest/projects/start-stop}/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/start-stop-fork => intTest/projects/start-stop}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/war-reactor/jar/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/war-reactor/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/war-reactor/war/pom.xml (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/war-with-unpack/src/main/java/org/test => intTest/projects/war-reactor/war/src/main/java/com/example}/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/war-reactor/war/src/main/webapp/index.html (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/war-with-unpack/pom.xml (97%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it/war => intTest/projects/war-with-unpack}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/war-with-unpack/src/main/webapp/index.html (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/war/pom.xml (100%) rename {spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom => spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war}/src/main/java/org/test/SampleApplication.java (100%) rename spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/{it => intTest/projects}/war/src/main/webapp/index.html (100%) delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-additional-properties/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-file/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-executable/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-skip/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-kotlin-module/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-layout-property/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-layout-property/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/test.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-envargs/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-fork/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-fork/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvmargs/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles-fork/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-toolchains/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-toolchains/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-use-test-classpath/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-working-directory/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/settings.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/invoker.properties delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-with-unpack/verify.groovy delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war/verify.groovy create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/maven/resources/pom.xml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/Verify.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-test-support/pom.xml create mode 100644 spring-boot-project/spring-boot/build.gradle delete mode 100644 spring-boot-project/spring-boot/pom.xml delete mode 100644 spring-boot-tests/pom.xml create mode 100644 spring-boot-tests/spring-boot-deployment-tests/build.gradle delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/pom.xml delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/pom.xml delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/java/sample/SampleGlassfishDeployApplication.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/webapp/WEB-INF/glassfish-web.xml delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/test/java/sample/SampleGlassfishDeployApplicationIT.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/pom.xml delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/main/java/sample/SampleController.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/main/java/sample/SampleTomcatDeployApplication.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/test/java/sample/SampleTomcatDeployApplicationIT.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/pom.xml delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/main/java/sample/SampleController.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/main/java/sample/SampleTomEEDeployApplication.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/test/java/sample/SampleTomEEDeployApplicationIT.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/pom.xml delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/java/sample/SampleWildFlyDeployApplication.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/webapp/WEB-INF/jboss-deployment-structure.xml delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/test/java/sample/SampleWildFlyDeployApplicationIT.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/pom.xml delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/main/java/sample/SampleController.java delete mode 100644 spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/test/java/sample/SampleWlpDeployApplicationIT.java create mode 100644 spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/DeploymentIntegrationTests.java rename spring-boot-tests/spring-boot-deployment-tests/{spring-boot-deployment-test-wlp/src/main/java/sample/SampleWlpDeployApplication.java => src/main/java/sample/DeploymentTestApplication.java} (91%) rename spring-boot-tests/spring-boot-deployment-tests/{spring-boot-deployment-test-glassfish => }/src/main/java/sample/SampleController.java (100%) delete mode 100644 spring-boot-tests/spring-boot-integration-tests/pom.xml create mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-configuration-processor-tests/build.gradle delete mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-configuration-processor-tests/pom.xml delete mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/pom.xml create mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/build.gradle create mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/settings.gradle rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/{ => app}/src/main/java/org/springframework/boot/launchscript/LaunchScriptTestApplication.java (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/{ => app}/src/main/java/org/springframework/boot/launchscript/LaunchVerificationController.java (100%) create mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/build.gradle delete mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/pom.xml rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java => intTest/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIntegrationTests.java} (94%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/conf/CentOS/6.9-a23bced6/Dockerfile (85%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/conf/Ubuntu/trusty-20160914/Dockerfile (84%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/conf/Ubuntu/xenial-20160914/Dockerfile (84%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/logback.xml (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/basic-launch.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/force-stop-when-stopped.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-double-link-single-java-opt.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-missing-log-folder.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-missing-pid-folder.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-multiple-command-line-arguments.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-multiple-java-opts.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-multiple-run-args.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-relative-log-folder.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-relative-pid-folder.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-run-as-invalid-user.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-run-as-user-preferred-to-jar-owner.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-run-as-user-root-required.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-run-as-user.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-single-command-line-argument.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-single-java-opt.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-single-run-arg.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/launch-with-use-of-start-stop-daemon-disabled.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/log-file-ownership-is-changed-when-created.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/log-file-ownership-is-unchanged-when-exists.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/log-file-ownership.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/pid-file-ownership.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/pid-folder-ownership.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/restart-when-started.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/restart-when-stopped.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/start-when-started.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/start-when-stopped.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/status-when-killed.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/status-when-started.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/status-when-stopped.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/stop-when-stopped.sh (100%) rename spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/{test => intTest}/resources/scripts/test-functions.sh (72%) create mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/build.gradle delete mode 100644 spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/pom.xml delete mode 100644 spring-boot-tests/spring-boot-smoke-tests-invoker/pom.xml delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-activemq/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-activemq/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-custom-security/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-custom-security/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-log4j2/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-log4j2/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-noweb/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-noweb/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-ui/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-ui/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/src/main/resources/META-INF/build-info.properties create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-amqp/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-amqp/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-animated-banner/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-animated-banner/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-aop/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-aop/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-atmosphere/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-atmosphere/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-batch/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-batch/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/pom.xml delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/pom.xml delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/verify.groovy delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/src/main/java/org/test/SampleApplication.java delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/verify.groovy delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/settings.xml delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/test/java/smoketest/layout/Verify.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-cassandra/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-cassandra/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-couchbase/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-couchbase/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-elasticsearch/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-elasticsearch/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jdbc/build.gradle delete mode 100755 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jdbc/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jpa/build.gradle delete mode 100755 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jpa/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-ldap/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-ldap/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongodb/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongodb/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-neo4j/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-neo4j/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-redis/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-redis/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-rest/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-rest/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-solr/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-solr/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-devtools/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-devtools/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-flyway/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-flyway/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hateoas/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hateoas/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate52/build.gradle delete mode 100755 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate52/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-integration/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-integration/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jersey/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jersey/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-jsp/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-jsp/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-ssl/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-ssl/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jooq/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jooq/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-atomikos/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-atomikos/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-bitronix/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-bitronix/pom.xml delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-jndi/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-jupiter/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-jupiter/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-vintage/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-vintage/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-liquibase/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-liquibase/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-logback/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-logback/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-resource-server/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-resource-server/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-parent-context/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-parent-context/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-profile/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-profile/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-property-validation/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-property-validation/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-quartz/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-quartz/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-client/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-client/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-resource-server/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-resource-server/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-rsocket/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-rsocket/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-jersey/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-jersey/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-webflux/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-webflux/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-servlet/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-servlet/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-simple/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-simple/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test-nomockito/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test-nomockito/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-jsp/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-jsp/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-multi-connectors/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-multi-connectors/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-ssl/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-ssl/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-traditional/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-traditional/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow-ssl/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow-ssl/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-war/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-war/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-freemarker/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-freemarker/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-groovy-templates/build.gradle delete mode 100755 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-groovy-templates/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-jsp/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-jsp/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-method-security/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-method-security/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-mustache/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-mustache/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-static/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-static/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-ui/build.gradle delete mode 100755 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-ui/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux-coroutines/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux-coroutines/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webservices/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webservices/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/build.gradle delete mode 100755 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-tomcat/build.gradle delete mode 100755 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-tomcat/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-undertow/build.gradle delete mode 100755 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-undertow/pom.xml create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-xml/build.gradle delete mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-xml/pom.xml diff --git a/.bomr/bomr.yaml b/.bomr/bomr.yaml deleted file mode 100644 index a9ac945f30f..00000000000 --- a/.bomr/bomr.yaml +++ /dev/null @@ -1,28 +0,0 @@ -bomr: - bom: spring-boot-project/spring-boot-dependencies/pom.xml - upgrade: - github: - organization: spring-projects - repository: spring-boot - issue-labels: - - 'type: dependency-upgrade' - policy: same-major-version - prohibited: - - project: derby - versions: - # 10.15 requires Java 9 - - '[10.15,)' - verify: - ignored-dependencies: - # Avoid conflicting transitive requirements for - # io.grpc:grpc-core:jar:[1.0.1,1.0.1] (Jetty), - # io.grpc:grpc-core:jar:[1.14.0,1.14.0] (Micrometer's Azure Registry), and - # io.grpc:grpc-core:jar:[1.15.0,1.15.0] (Micrometer's Stackdriver Registry) - - 'io.micrometer:micrometer-registry-azure-monitor' - - 'org.eclipse.jetty.gcloud:jetty-gcloud-session-manager' - - 'org.eclipse.jetty:jetty-home' - repositories: - # Caffeine Simulator's dependencies - - 'https://maven.imagej.net/content/repositories/public/' - # Spring Data GemFire's GemFire dependencies - - 'https://repo.spring.io/gemstone-release-pivotal-cache' diff --git a/.gitignore b/.gitignore index 4dbf2657a90..d37eb49a80b 100644 --- a/.gitignore +++ b/.gitignore @@ -22,12 +22,16 @@ MANIFEST.MF _site/ activemq-data bin +build +!/**/src/**/bin +!/**/src/**/build build.log dependency-reduced-pom.xml dump.rdb interpolated*.xml lib/ manifest.yml +out overridedb.* target transaction-logs diff --git a/.mvn/jvm.config b/.mvn/jvm.config deleted file mode 100644 index f432c960223..00000000000 --- a/.mvn/jvm.config +++ /dev/null @@ -1 +0,0 @@ --Xmx1536m \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar deleted file mode 100755 index e89f07c229cbd97f4e39b0eddba64604d1dca9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50709 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 Existing Gradle project` from the `File -> Import…` menu to import the code. === Importing into IntelliJ IDEA -**Please, do this first!** -Go to `Preferences | Build, Execution, Deployment | Build Tools | Maven | Importing` -and set `VM options for importer` to `-Xmx2g` to allocate sufficient memory for IDEA's -Maven import process to parse the Spring Boot project structure. _Not doing so could -mean the import fails silently, leaving the project setup incomplete._ - -For the actual import use "`File`" -> "`Open`" and select the root `pom.xml`, or the -`spring-boot-project/pom.xml` if you only want the Spring Boot project sources. +Use "`File`" -> "`Open`" and then select the root `build.gradle` file to import the code. @@ -239,18 +186,10 @@ needs to be added. === Importing into Other IDEs -Maven is well supported by most Java IDEs. Refer to your vendor documentation. +Gradle is well supported by most Java IDEs. Refer to your vendor documentation. -== Integration Tests -The smoke tests run as part of the build when you `./mvnw install`. -Due to the fact that they make use of the `spring-boot-maven-plugin` -they cannot be called directly, and so instead are launched via the -`maven-invoker-plugin`. If you encounter build failures running the integration tests, -check the `build.log` file in the appropriate smoke test directory. - - == Cloning the git repository on Windows Some files in the git repository may exceed the Windows maximum file path (260 characters), depending on where you clone the repository. If you get `Filename too long` diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000000..bc35a69d006 --- /dev/null +++ b/build.gradle @@ -0,0 +1,20 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' apply false // https://youtrack.jetbrains.com/issue/KT-30276 +} + +description = 'Spring Boot Build' + +allprojects { + group 'org.springframework.boot' + + repositories { + mavenCentral() + maven { url 'https://repo.spring.io/milestone' } + maven { url 'https://repo.spring.io/snapshot' } + } + + configurations.all { + resolutionStrategy.cacheChangingModulesFor 60, 'minutes' + } + +} diff --git a/buildSrc/README.adoc b/buildSrc/README.adoc new file mode 100644 index 00000000000..44c7bc7f432 --- /dev/null +++ b/buildSrc/README.adoc @@ -0,0 +1,26 @@ += BOM Plugin + +Allows one to publish a BOM from Gradle. +Properties, dependencies, and other BOMs are applied to the `bom {}` extension. + +This plugin applies the `java-platform` and `maven-publish` plugins to the Project it's applied to. + +== Usage + +[source,groovy,indent=0] +---- +plugins { + id 'org.springframework.boot.bom' +} + +bom { + property 'logback.version', '1.2.3' + property 'junit-jupiter.version', '5.3.2' + + dependency 'ch.qos.logback', 'logback-classic', '${logback.version}' + dependency 'ch.qos.logback', 'logback-core', '${logback.version}' + + bomImport 'org.junit', 'junit-bom', '${junit-jupiter.version}' +} +---- + diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle new file mode 100644 index 00000000000..b0587d4d33e --- /dev/null +++ b/buildSrc/build.gradle @@ -0,0 +1,84 @@ +plugins { + id 'java-gradle-plugin' + id 'io.spring.javaformat' version '0.0.18-SNAPSHOT' + id 'checkstyle' +} + +repositories { + mavenCentral() + gradlePluginPortal() + maven { url 'https://repo.spring.io/release' } +} + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +dependencies { + checkstyle 'io.spring.javaformat:spring-javaformat-checkstyle:0.0.15' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0' + implementation 'commons-codec:commons-codec:1.13' + implementation 'org.apache.maven:maven-embedder:3.6.2' + implementation 'org.asciidoctor:asciidoctor-gradle-jvm:2.4.0' + implementation 'org.springframework:spring-core:5.2.2.RELEASE' + implementation 'org.springframework:spring-web:5.2.2.RELEASE' + implementation 'com.google.code.gson:gson:2.8.5' + implementation 'io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.15' + testImplementation 'org.assertj:assertj-core:3.11.1' + testImplementation 'org.apache.logging.log4j:log4j-core:2.12.1' + testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2' +} + +checkstyle { + def archive = configurations.checkstyle.filter { it.name.startsWith('spring-javaformat-checkstyle')} + config = resources.text.fromArchiveEntry(archive, 'io/spring/javaformat/checkstyle/checkstyle.xml') + toolVersion = 8.11 +} + +gradlePlugin { + plugins { + autoConfigurationPlugin { + id = "org.springframework.boot.auto-configuration" + implementationClass = "org.springframework.boot.build.autoconfigure.AutoConfigurationPlugin" + } + bomPlugin { + id = "org.springframework.boot.bom" + implementationClass = "org.springframework.boot.build.bom.BomPlugin" + } + configurationPropertiesPlugin { + id = "org.springframework.boot.configuration-properties" + implementationClass = "org.springframework.boot.build.context.properties.ConfigurationPropertiesPlugin" + } + conventionsPlugin { + id = "org.springframework.boot.conventions" + implementationClass = "org.springframework.boot.build.ConventionsPlugin" + } + deployedPlugin { + id = "org.springframework.boot.deployed" + implementationClass = "org.springframework.boot.build.DeployedPlugin" + } + integrationTestPlugin { + id = "org.springframework.boot.integration-test" + implementationClass = "org.springframework.boot.build.test.IntegrationTestPlugin" + } + mavenPluginPlugin { + id = "org.springframework.boot.maven-plugin" + implementationClass = "org.springframework.boot.build.mavenplugin.MavenPluginPlugin" + } + mavenRepositoryPlugin { + id = "org.springframework.boot.maven-repository" + implementationClass = "org.springframework.boot.build.MavenRepositoryPlugin" + } + optionalDependenciesPlugin { + id = "org.springframework.boot.optional-dependencies" + implementationClass = "org.springframework.boot.build.optional.OptionalDependenciesPlugin" + } + starterPlugin { + id = "org.springframework.boot.starter" + implementationClass = "org.springframework.boot.build.starters.StarterPlugin" + } + } +} + +test { + useJUnitPlatform() +} diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle new file mode 100644 index 00000000000..ce6d3a43dae --- /dev/null +++ b/buildSrc/settings.gradle @@ -0,0 +1,16 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + maven { url 'https://repo.spring.io/snapshot' } + } + resolutionStrategy { + eachPlugin { + if (requested.id.id == 'io.spring.javaformat') { + useModule "io.spring.javaformat:spring-javaformat-gradle-plugin:${requested.version}" + } + } + } +} + +apply from: new File(settingsDir, '../gradle/build-cache-settings.gradle') diff --git a/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java new file mode 100644 index 00000000000..132940f6855 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java @@ -0,0 +1,213 @@ +/* + * Copyright 2019 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.build; + +import java.io.File; +import java.net.URI; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask; +import org.asciidoctor.gradle.jvm.AsciidoctorJExtension; +import org.asciidoctor.gradle.jvm.AsciidoctorJPlugin; +import org.asciidoctor.gradle.jvm.AsciidoctorTask; +import org.gradle.api.Action; +import org.gradle.api.DefaultTask; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.file.FileCollection; +import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.Sync; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.util.StringUtils; + +/** + * Conventions that are applied in the presence of the {@link AsciidoctorJPlugin}. When + * the plugin is applied: + * + *
    + *
  • All warnings are made fatal. + *
  • A task is created to resolve and unzip our documentation resources (CSS and + * Javascript). + *
  • For each {@link AsciidoctorTask} (HTML only): + *
      + *
    • A task is created to sync the documentation resources to its output directory. + *
    • {@code doctype} {@link AsciidoctorTask#options(Map) option} is configured. + *
    • {@link AsciidoctorTask#attributes(Map) Attributes} are configured for syntax + * highlighting, CSS styling, docinfo, etc. + *
    + *
  • For each {@link AbstractAsciidoctorTask} (HTML and PDF): + *
      + *
    • {@link AsciidoctorTask#attributes(Map) Attributes} are configured to enable + * warnings for references to missing attributes, the GitHub tag, the Artifactory repo for + * the current version, etc. + *
    • {@link AbstractAsciidoctorTask#baseDirFollowsSourceDir() baseDirFollowsSourceDir()} + * is enabled. + *
    + *
+ * + * @author Andy Wilkinson + */ +class AsciidoctorConventions { + + void apply(Project project) { + project.getPlugins().withType(AsciidoctorJPlugin.class, (asciidoctorPlugin) -> { + configureDocResourcesRepository(project); + makeAllWarningsFatal(project); + UnzipDocumentationResources unzipResources = createUnzipDocumentationResourcesTask(project); + project.getTasks().withType(AbstractAsciidoctorTask.class, (asciidoctorTask) -> { + configureCommonAttributes(project, asciidoctorTask); + configureOptions(asciidoctorTask); + asciidoctorTask.baseDirFollowsSourceDir(); + Sync syncSource = createSyncDocumentationSourceTask(project, asciidoctorTask); + if (asciidoctorTask instanceof AsciidoctorTask) { + configureHtmlOnlyAttributes(project, asciidoctorTask); + syncSource.from(unzipResources, (resources) -> resources.into("asciidoc")); + asciidoctorTask.doFirst(new Action() { + + @Override + public void execute(Task task) { + project.copy((spec) -> { + spec.from(asciidoctorTask.getSourceDir()); + spec.into(asciidoctorTask.getOutputDir()); + spec.include("css/**", "js/**"); + }); + } + + }); + } + }); + }); + } + + private void configureDocResourcesRepository(Project project) { + project.getRepositories().maven((mavenRepo) -> { + mavenRepo.setUrl(URI.create("https://repo.spring.io/release")); + mavenRepo.mavenContent((mavenContent) -> mavenContent.includeGroup("io.spring.docresources")); + }); + } + + private void makeAllWarningsFatal(Project project) { + project.getExtensions().getByType(AsciidoctorJExtension.class).fatalWarnings(".*"); + } + + private UnzipDocumentationResources createUnzipDocumentationResourcesTask(Project project) { + Configuration documentationResources = project.getConfigurations().maybeCreate("documentationResources"); + documentationResources.getDependencies() + .add(project.getDependencies().create("io.spring.docresources:spring-doc-resources:0.1.3.RELEASE")); + UnzipDocumentationResources unzipResources = project.getTasks().create("unzipDocumentationResources", + UnzipDocumentationResources.class); + unzipResources.setResources(documentationResources); + unzipResources.setOutputDir(new File(project.getBuildDir(), "docs/resources")); + return unzipResources; + } + + private Sync createSyncDocumentationSourceTask(Project project, AbstractAsciidoctorTask asciidoctorTask) { + Sync syncDocumentationSource = project.getTasks() + .create("syncDocumentationSourceFor" + StringUtils.capitalize(asciidoctorTask.getName()), Sync.class); + File syncedSource = new File(project.getBuildDir(), "docs/src/" + asciidoctorTask.getName()); + syncDocumentationSource.setDestinationDir(syncedSource); + syncDocumentationSource.from("src/docs/"); + asciidoctorTask.dependsOn(syncDocumentationSource); + asciidoctorTask.setSourceDir(project.relativePath(new File(syncedSource, "asciidoc/"))); + return syncDocumentationSource; + } + + private void configureOptions(AbstractAsciidoctorTask asciidoctorTask) { + asciidoctorTask.options(Collections.singletonMap("doctype", "book")); + } + + private void configureHtmlOnlyAttributes(Project project, AbstractAsciidoctorTask asciidoctorTask) { + Map attributes = new HashMap<>(); + attributes.put("highlightjsdir", "js/highlight"); + attributes.put("highlightjs-theme", "github"); + attributes.put("linkcss", true); + attributes.put("icons", "font"); + attributes.put("stylesheet", "css/spring.css"); + asciidoctorTask.attributes(attributes); + } + + private void configureCommonAttributes(Project project, AbstractAsciidoctorTask asciidoctorTask) { + Map attributes = new HashMap<>(); + attributes.put("attribute-missing", "warn"); + attributes.put("github-tag", determineGitHubTag(project)); + attributes.put("spring-boot-artifactory-repo", determineArtifactoryRepo(project)); + attributes.put("version", "{gradle-project-version}"); + asciidoctorTask.attributes(attributes); + } + + private String determineArtifactoryRepo(Project project) { + String version = project.getVersion().toString(); + String type = version.substring(version.lastIndexOf('.')); + if (type.equals("RELEASE")) { + return "release"; + } + if (type.startsWith("M") || type.startsWith("RC")) { + return "milestone"; + } + return "snapshot"; + } + + private String determineGitHubTag(Project project) { + String version = "v" + project.getVersion(); + return (version.endsWith("-SNAPSHOT")) ? "master" : version; + } + + /** + * {@link Task} for unzipping the documentation resources. + */ + public static class UnzipDocumentationResources extends DefaultTask { + + private FileCollection resources; + + private File outputDir; + + @InputFiles + public FileCollection getResources() { + return this.resources; + } + + public void setResources(FileCollection resources) { + this.resources = resources; + } + + @OutputDirectory + public File getOutputDir() { + return this.outputDir; + } + + public void setOutputDir(File outputDir) { + this.outputDir = outputDir; + } + + @TaskAction + void syncDocumentationResources() { + getProject().sync((copySpec) -> { + copySpec.into(this.outputDir); + for (File resource : this.resources) { + copySpec.from(getProject().zipTree(resource)); + } + }); + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/ConventionsPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/ConventionsPlugin.java new file mode 100644 index 00000000000..30aa02b7267 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/ConventionsPlugin.java @@ -0,0 +1,207 @@ +/* + * Copyright 2012-2020 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.build; + +import java.util.Map; +import java.util.TreeMap; + +import io.spring.javaformat.gradle.SpringJavaFormatPlugin; +import org.apache.maven.artifact.repository.MavenArtifactRepository; +import org.asciidoctor.gradle.jvm.AsciidoctorJPlugin; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.DependencySet; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.plugins.quality.CheckstyleExtension; +import org.gradle.api.plugins.quality.CheckstylePlugin; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.MavenPom; +import org.gradle.api.publish.maven.MavenPomDeveloperSpec; +import org.gradle.api.publish.maven.MavenPomIssueManagement; +import org.gradle.api.publish.maven.MavenPomLicenseSpec; +import org.gradle.api.publish.maven.MavenPomOrganization; +import org.gradle.api.publish.maven.MavenPomScm; +import org.gradle.api.publish.maven.MavenPublication; +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; +import org.gradle.api.tasks.bundling.Jar; +import org.gradle.api.tasks.compile.JavaCompile; +import org.gradle.api.tasks.javadoc.Javadoc; +import org.gradle.api.tasks.testing.Test; + +/** + * Plugin to apply conventions to projects that are part of Spring Boot's build. + * Conventions are applied in response to various plugins being applied. + * + *

+ * + * When the {@link JavaPlugin Java plugin} is applied: + * + *

    + *
  • {@code sourceCompatibility} is set to {@code 1.8} + *
  • Spring Java Format and Checkstyle plugins are applied + *
  • {@link Test} tasks are configured to use JUnit Platform and use a max heap of 1024M + *
  • {@link JavaCompile} tasks are configured to use UTF-8 encoding + *
  • {@link Javadoc} tasks are configured to use UTF-8 encoding + *
  • {@link Jar} tasks are configured to have the following manifest entries: + *
      + *
    • {@code Automatic-Module-Name} + *
    • {@code Build-Jdk-Spec} + *
    • {@code Built-By} + *
    • {@code Implementation-Title} + *
    • {@code Implementation-Version} + *
    + *
+ * + *

+ * + * When the {@link MavenPublishPlugin Maven Publish plugin} is applied: + * + *

    + *
  • If the {@code deploymentRepository} property has been set, a + * {@link MavenArtifactRepository Maven artifact repository} is configured to publish to + * it. + *
  • The poms of all {@link MavenPublication Maven publications} are customized to meet + * Maven Central's requirements. + *
  • If the {@link JavaPlugin Java plugin} has also been applied, creation of Javadoc + * and source jars is enabled. + *
+ * + *

+ * + * When the {@link AsciidoctorJPlugin} is applied, the conventions in + * {@link AsciidoctorConventions} are applied. + * + * @author Andy Wilkinson + */ +public class ConventionsPlugin implements Plugin { + + @Override + public void apply(Project project) { + applyJavaConventions(project); + applyAsciidoctorConventions(project); + applyMavenPublishingConventions(project); + } + + private void applyJavaConventions(Project project) { + project.getPlugins().withType(JavaPlugin.class, (java) -> { + configureSpringJavaFormat(project); + project.setProperty("sourceCompatibility", "1.8"); + project.getTasks().withType(JavaCompile.class, (compile) -> compile.getOptions().setEncoding("UTF-8")); + project.getTasks().withType(Javadoc.class, + (javadoc) -> javadoc.getOptions().source("1.8").encoding("UTF-8")); + project.getTasks().withType(Test.class, (test) -> { + test.useJUnitPlatform(); + test.setMaxHeapSize("1024M"); + }); + project.getTasks().withType(Jar.class, (jar) -> { + project.afterEvaluate((evaluated) -> { + jar.manifest((manifest) -> { + Map attributes = new TreeMap<>(); + attributes.put("Automatic-Module-Name", project.getName().replace("-", ".")); + attributes.put("Build-Jdk-Spec", project.property("sourceCompatibility")); + attributes.put("Built-By", "Spring"); + attributes.put("Implementation-Title", project.getDescription()); + attributes.put("Implementation-Version", project.getVersion()); + manifest.attributes(attributes); + }); + }); + }); + }); + } + + private void configureSpringJavaFormat(Project project) { + project.getPlugins().apply(SpringJavaFormatPlugin.class); + project.getPlugins().apply(CheckstylePlugin.class); + CheckstyleExtension checkstyle = project.getExtensions().getByType(CheckstyleExtension.class); + checkstyle.setToolVersion("8.22"); + checkstyle.getConfigDirectory().set(project.getRootProject().file("src/checkstyle")); + String version = SpringJavaFormatPlugin.class.getPackage().getImplementationVersion(); + DependencySet checkstyleDependencies = project.getConfigurations().getByName("checkstyle").getDependencies(); + checkstyleDependencies + .add(project.getDependencies().create("io.spring.javaformat:spring-javaformat-checkstyle:" + version)); + checkstyleDependencies + .add(project.getDependencies().create("io.spring.nohttp:nohttp-checkstyle:0.0.3.RELEASE")); + } + + private void applyAsciidoctorConventions(Project project) { + new AsciidoctorConventions().apply(project); + } + + private void applyMavenPublishingConventions(Project project) { + project.getPlugins().withType(MavenPublishPlugin.class).all((mavenPublish) -> { + PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); + if (project.hasProperty("deploymentRepository")) { + publishing.getRepositories().maven((mavenRepository) -> { + mavenRepository.setUrl(project.property("deploymentRepository")); + mavenRepository.setName("deployment"); + }); + } + publishing.getPublications().withType(MavenPublication.class) + .all((mavenPublication) -> customizePom(mavenPublication.getPom(), project)); + project.getPlugins().withType(JavaPlugin.class).all((javaPlugin) -> { + JavaPluginExtension extension = project.getExtensions().getByType(JavaPluginExtension.class); + extension.withJavadocJar(); + extension.withSourcesJar(); + }); + }); + } + + private void customizePom(MavenPom pom, Project project) { + pom.getUrl().set("https://projects.spring.io/spring-boot/#"); + pom.getDescription().set(project.provider(project::getDescription)); + pom.organization(this::customizeOrganization); + pom.licenses(this::customizeLicences); + pom.developers(this::customizeDevelopers); + pom.scm(this::customizeScm); + pom.issueManagement(this::customizeIssueManagement); + } + + private void customizeOrganization(MavenPomOrganization organization) { + organization.getName().set("Pivotal Software, Inc."); + organization.getUrl().set("https://spring.io"); + } + + private void customizeLicences(MavenPomLicenseSpec licences) { + licences.license((licence) -> { + licence.getName().set("Apache License, Version 2.0"); + licence.getUrl().set("http://www.apache.org/licenses/LICENSE-2.0"); + }); + } + + private void customizeDevelopers(MavenPomDeveloperSpec developers) { + developers.developer((developer) -> { + developer.getName().set("Pivotal"); + developer.getEmail().set("info@pivotal.io"); + developer.getOrganization().set("Pivotal Software, Inc."); + developer.getOrganizationUrl().set("https://www.spring.io"); + }); + } + + private void customizeScm(MavenPomScm scm) { + scm.getConnection().set("scm:git:git://github.com/spring-projects/spring-boot.git"); + scm.getDeveloperConnection().set("scm:git:ssh://git@github.com/spring-projects/spring-boot.git"); + scm.getUrl().set("https://github.com/spring-projects/spring-boot"); + + } + + private void customizeIssueManagement(MavenPomIssueManagement issueManagement) { + issueManagement.getSystem().set("GitHub"); + issueManagement.getUrl().set("https://github.com/spring-projects/spring-boot/issues"); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/DeployedPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/DeployedPlugin.java new file mode 100644 index 00000000000..30dc9d3db1c --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/DeployedPlugin.java @@ -0,0 +1,54 @@ +/* + * Copyright 2019 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.build; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.plugins.JavaPlatformPlugin; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.MavenPublication; +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; + +/** + * A plugin applied to a project that should be deployed. + * + * @author Andy Wilkinson + */ +public class DeployedPlugin implements Plugin { + + /** + * Name of the task that generates the deployed pom file. + */ + public static final String GENERATE_POM_TASK_NAME = "generatePomFileForMavenPublication"; + + @Override + public void apply(Project project) { + project.getPlugins().apply(MavenPublishPlugin.class); + project.getPlugins().apply(MavenRepositoryPlugin.class); + PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); + MavenPublication mavenPublication = publishing.getPublications().create("maven", MavenPublication.class); + project.getPlugins().withType(JavaPlugin.class) + .all((javaPlugin) -> project.getComponents().matching((component) -> component.getName().equals("java")) + .all((javaComponent) -> mavenPublication.from(javaComponent))); + project.getPlugins().withType(JavaPlatformPlugin.class) + .all((javaPlugin) -> project.getComponents() + .matching((component) -> component.getName().equals("javaPlatform")) + .all((javaComponent) -> mavenPublication.from(javaComponent))); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/MavenRepositoryPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/MavenRepositoryPlugin.java new file mode 100644 index 00000000000..d7fcbfdcbc2 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/MavenRepositoryPlugin.java @@ -0,0 +1,111 @@ +/* + * Copyright 2012-2020 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.build; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.gradle.api.Action; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.DependencySet; +import org.gradle.api.artifacts.ProjectDependency; +import org.gradle.api.plugins.JavaLibraryPlugin; +import org.gradle.api.plugins.JavaPlatformPlugin; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; + +/** + * A plugin to make a project's {@code deployment} publication available as a Maven + * repository. The repository can be consumed by depending upon the project using the + * {@code mavenRepository} configuration. + * + * @author Andy Wilkinson + */ +public class MavenRepositoryPlugin implements Plugin { + + /** + * Name of the {@code mavenRepository} configuration. + */ + public static final String MAVEN_REPOSITORY_CONFIGURATION_NAME = "mavenRepository"; + + /** + * Name of the task that publishes to the project repository. + */ + public static final String PUBLISH_TO_PROJECT_REPOSITORY_TASK_NAME = "publishMavenPublicationToProjectRepository"; + + @Override + public void apply(Project project) { + project.getPlugins().apply(MavenPublishPlugin.class); + PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); + File repositoryLocation = new File(project.getBuildDir(), "maven-repository"); + publishing.getRepositories().maven((mavenRepository) -> { + mavenRepository.setName("project"); + mavenRepository.setUrl(repositoryLocation.toURI()); + }); + project.getTasks().matching((task) -> task.getName().equals(PUBLISH_TO_PROJECT_REPOSITORY_TASK_NAME)) + .all((task) -> setUpProjectRepository(project, task, repositoryLocation)); + project.getTasks().matching((task) -> task.getName().equals("publishPluginMavenPublicationToProjectRepository")) + .all((task) -> setUpProjectRepository(project, task, repositoryLocation)); + } + + private void setUpProjectRepository(Project project, Task publishTask, File repositoryLocation) { + publishTask.doFirst(new CleanAction(repositoryLocation)); + Configuration projectRepository = project.getConfigurations().create(MAVEN_REPOSITORY_CONFIGURATION_NAME); + project.getArtifacts().add(projectRepository.getName(), repositoryLocation, + (artifact) -> artifact.builtBy(publishTask)); + DependencySet target = projectRepository.getDependencies(); + project.getPlugins().withType(JavaPlugin.class).all((javaPlugin) -> addMavenRepositoryDependencies(project, + JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, target)); + project.getPlugins().withType(JavaLibraryPlugin.class) + .all((javaLibraryPlugin) -> addMavenRepositoryDependencies(project, JavaPlugin.API_CONFIGURATION_NAME, + target)); + project.getPlugins().withType(JavaPlatformPlugin.class) + .all((javaPlugin) -> addMavenRepositoryDependencies(project, JavaPlatformPlugin.API_CONFIGURATION_NAME, + target)); + } + + private void addMavenRepositoryDependencies(Project project, String sourceConfigurationName, DependencySet target) { + project.getConfigurations().getByName(sourceConfigurationName).getDependencies() + .withType(ProjectDependency.class).all((dependency) -> { + Map dependencyDescriptor = new HashMap<>(); + dependencyDescriptor.put("path", dependency.getDependencyProject().getPath()); + dependencyDescriptor.put("configuration", MAVEN_REPOSITORY_CONFIGURATION_NAME); + target.add(project.getDependencies().project(dependencyDescriptor)); + }); + } + + private static final class CleanAction implements Action { + + private final File location; + + private CleanAction(File location) { + this.location = location; + } + + @Override + public void execute(Task task) { + task.getProject().delete(this.location); + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationMetadata.java b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationMetadata.java new file mode 100644 index 00000000000..c4664062b46 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationMetadata.java @@ -0,0 +1,93 @@ +/* + * Copyright 2012-2020 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.build.autoconfigure; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; +import java.util.Properties; +import java.util.concurrent.Callable; + +import org.gradle.api.Task; +import org.gradle.api.internal.AbstractTask; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.TaskAction; + +/** + * A {@link Task} for generating metadata describing a project's auto-configuration + * classes. + * + * @author Andy Wilkinson + */ +public class AutoConfigurationMetadata extends AbstractTask { + + private SourceSet sourceSet; + + private File outputFile; + + public AutoConfigurationMetadata() { + getInputs().file((Callable) () -> new File(this.sourceSet.getOutput().getResourcesDir(), + "META-INF/spring.factories")); + dependsOn((Callable) () -> this.sourceSet.getProcessResourcesTaskName()); + getProject().getConfigurations() + .maybeCreate(AutoConfigurationPlugin.AUTO_CONFIGURATION_METADATA_CONFIGURATION_NAME); + } + + public void setSourceSet(SourceSet sourceSet) { + this.sourceSet = sourceSet; + } + + @OutputFile + public File getOutputFile() { + return this.outputFile; + } + + public void setOutputFile(File outputFile) { + this.outputFile = outputFile; + } + + @TaskAction + void documentAutoConfiguration() throws IOException { + Properties autoConfiguration = readAutoConfiguration(); + getOutputFile().getParentFile().mkdirs(); + try (FileWriter writer = new FileWriter(getOutputFile())) { + autoConfiguration.store(writer, null); + } + } + + private Properties readAutoConfiguration() throws IOException { + Properties autoConfiguration = new Properties(); + Properties springFactories = readSpringFactories( + new File(this.sourceSet.getOutput().getResourcesDir(), "META-INF/spring.factories")); + autoConfiguration.setProperty("autoConfigurationClassNames", + springFactories.getProperty("org.springframework.boot.autoconfigure.EnableAutoConfiguration")); + autoConfiguration.setProperty("module", getProject().getName()); + return autoConfiguration; + } + + private Properties readSpringFactories(File file) throws IOException { + Properties springFactories = new Properties(); + try (Reader in = new FileReader(file)) { + springFactories.load(in); + } + return springFactories; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationPlugin.java new file mode 100644 index 00000000000..7c2c77b4d21 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationPlugin.java @@ -0,0 +1,78 @@ +/* + * Copyright 2019 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.build.autoconfigure; + +import java.io.File; +import java.util.Collections; +import java.util.concurrent.Callable; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.tasks.SourceSet; + +import org.springframework.boot.build.DeployedPlugin; +import org.springframework.boot.build.context.properties.ConfigurationPropertiesPlugin; + +/** + * {@link Plugin} for projects that define auto-configuration. When applied, the plugin + * applies the {@link DeployedPlugin}. Additionally, it reacts to the presence of the + * {@link JavaPlugin} by: + * + *

    + *
  • Applying the {@link ConfigurationPropertiesPlugin}. + *
  • Adding a dependency on the auto-configuration annotation processor. + *
  • Defining a task that produces metadata describing the auto-configuration. The + * metadata is made available as an artifact in the + *
+ * + * @author Andy Wilkinson + */ +public class AutoConfigurationPlugin implements Plugin { + + /** + * Name of the {@link Configuration} that holds the auto-configuration metadata + * artifact. + */ + public static final String AUTO_CONFIGURATION_METADATA_CONFIGURATION_NAME = "autoConfigurationMetadata"; + + @Override + public void apply(Project project) { + project.getPlugins().apply(DeployedPlugin.class); + project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> { + project.getPlugins().apply(ConfigurationPropertiesPlugin.class); + Configuration annotationProcessors = project.getConfigurations() + .getByName(JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME); + annotationProcessors.getDependencies() + .add(project.getDependencies().project(Collections.singletonMap("path", + ":spring-boot-project:spring-boot-tools:spring-boot-autoconfigure-processor"))); + annotationProcessors.getDependencies() + .add(project.getDependencies().project(Collections.singletonMap("path", + ":spring-boot-project:spring-boot-tools:spring-boot-configuration-processor"))); + project.getTasks().create("autoConfigurationMetadata", AutoConfigurationMetadata.class, (task) -> { + task.setSourceSet(project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets() + .getByName(SourceSet.MAIN_SOURCE_SET_NAME)); + task.setOutputFile(new File(project.getBuildDir(), "auto-configuration-metadata.properties")); + project.getArtifacts().add(AutoConfigurationPlugin.AUTO_CONFIGURATION_METADATA_CONFIGURATION_NAME, + project.provider((Callable) task::getOutputFile), (artifact) -> artifact.builtBy(task)); + }); + }); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java new file mode 100644 index 00000000000..6302342dd75 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java @@ -0,0 +1,136 @@ +/* + * Copyright 2012-2020 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.build.autoconfigure; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.util.Properties; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.stream.Collectors; + +import org.gradle.api.Task; +import org.gradle.api.file.FileCollection; +import org.gradle.api.internal.AbstractTask; +import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.util.StringUtils; + +/** + * {@link Task} used to document auto-configuration classes. + * + * @author Andy Wilkinson + */ +public class DocumentAutoConfigurationClasses extends AbstractTask { + + private FileCollection autoConfiguration; + + private File outputDir; + + @InputFiles + public FileCollection getAutoConfiguration() { + return this.autoConfiguration; + } + + public void setAutoConfiguration(FileCollection autoConfiguration) { + this.autoConfiguration = autoConfiguration; + } + + @OutputDirectory + public File getOutputDir() { + return this.outputDir; + } + + public void setOutputDir(File outputDir) { + this.outputDir = outputDir; + } + + @TaskAction + void documentAutoConfigurationClasses() throws IOException { + for (File metadataFile : this.autoConfiguration) { + Properties metadata = new Properties(); + try (Reader reader = new FileReader(metadataFile)) { + metadata.load(reader); + } + AutoConfiguration autoConfiguration = new AutoConfiguration(metadata.getProperty("module"), new TreeSet<>( + StringUtils.commaDelimitedListToSet(metadata.getProperty("autoConfigurationClassNames")))); + writeTable(autoConfiguration); + } + } + + private void writeTable(AutoConfiguration autoConfigurationClasses) throws IOException { + this.outputDir.mkdirs(); + try (PrintWriter writer = new PrintWriter( + new FileWriter(new File(this.outputDir, autoConfigurationClasses.module + ".adoc")))) { + writer.println("[cols=\"4,1\"]"); + writer.println("|==="); + writer.println("| Configuration Class | Links"); + + for (AutoConfigurationClass autoConfigurationClass : autoConfigurationClasses.classes) { + writer.println(); + writer.printf("| {spring-boot-code}/spring-boot-project/%s/src/main/java/%s.java[`%s`]%n", + autoConfigurationClasses.module, autoConfigurationClass.path, autoConfigurationClass.name); + writer.printf("| {spring-boot-api}/%s.html[javadoc]%n", autoConfigurationClass.path); + } + + writer.println("|==="); + } + } + + private static final class AutoConfiguration { + + private final String module; + + private final SortedSet classes; + + private AutoConfiguration(String module, Set classNames) { + this.module = module; + this.classes = classNames.stream().map((className) -> { + String path = className.replace('.', '/'); + String name = className.substring(className.lastIndexOf('.') + 1); + return new AutoConfigurationClass(name, path); + }).collect(Collectors.toCollection(TreeSet::new)); + } + + } + + private static final class AutoConfigurationClass implements Comparable { + + private final String name; + + private final String path; + + private AutoConfigurationClass(String name, String path) { + this.name = name; + this.path = path; + } + + @Override + public int compareTo(AutoConfigurationClass other) { + return this.name.compareTo(other.name); + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java new file mode 100644 index 00000000000..e524749a0da --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java @@ -0,0 +1,297 @@ +/* + * Copyright 2012-2020 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.build.bom; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import groovy.lang.Closure; +import groovy.lang.GroovyObjectSupport; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.artifact.versioning.VersionRange; +import org.gradle.api.InvalidUserCodeException; +import org.gradle.api.InvalidUserDataException; +import org.gradle.api.artifacts.dsl.DependencyHandler; +import org.gradle.util.ConfigureUtil; + +import org.springframework.boot.build.bom.Library.Exclusion; +import org.springframework.boot.build.bom.Library.Group; +import org.springframework.boot.build.bom.Library.Module; +import org.springframework.boot.build.bom.Library.ProhibitedVersion; +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; + +/** + * DSL extensions for {@link BomPlugin}. + * + * @author Andy Wilkinson + */ +public class BomExtension { + + private final Map properties = new LinkedHashMap<>(); + + private final Map artifactVersionProperties = new HashMap<>(); + + private final List libraries = new ArrayList(); + + private final DependencyHandler dependencyHandler; + + private final UpgradeHandler upgradeHandler = new UpgradeHandler(); + + public BomExtension(DependencyHandler dependencyHandler) { + this.dependencyHandler = dependencyHandler; + } + + public List getLibraries() { + return this.libraries; + } + + public void upgrade(Closure closure) { + ConfigureUtil.configure(closure, this.upgradeHandler); + } + + public Upgrade getUpgrade() { + return new Upgrade(this.upgradeHandler.upgradePolicy, new GitHub(this.upgradeHandler.gitHub.organization, + this.upgradeHandler.gitHub.repository, this.upgradeHandler.gitHub.issueLabels)); + } + + public void library(String name, String version, Closure closure) { + LibraryHandler libraryHandler = new LibraryHandler(); + ConfigureUtil.configure(closure, libraryHandler); + addLibrary(new Library(name, DependencyVersion.parse(version), libraryHandler.groups, + libraryHandler.prohibitedVersions)); + } + + private String createDependencyNotation(String groupId, String artifactId, DependencyVersion version) { + return groupId + ":" + artifactId + ":" + version; + } + + Map getProperties() { + return this.properties; + } + + String getArtifactVersionProperty(String groupId, String artifactId) { + String coordinates = groupId + ":" + artifactId; + return this.artifactVersionProperties.get(coordinates); + } + + private void putArtifactVersionProperty(String groupId, String artifactId, String versionProperty) { + String coordinates = groupId + ":" + artifactId; + String existing = this.artifactVersionProperties.putIfAbsent(coordinates, versionProperty); + if (existing != null) { + throw new InvalidUserDataException("Cannot put version property for '" + coordinates + + "'. Version property '" + existing + "' has already been stored."); + } + } + + private void addLibrary(Library library) { + this.libraries.add(library); + this.properties.put(library.getVersionProperty(), library.getVersion()); + for (Group group : library.getGroups()) { + for (Module module : group.getModules()) { + this.putArtifactVersionProperty(group.getId(), module.getName(), library.getVersionProperty()); + this.dependencyHandler.getConstraints().add("api", + createDependencyNotation(group.getId(), module.getName(), library.getVersion())); + } + for (String bomImport : group.getBoms()) { + this.putArtifactVersionProperty(group.getId(), bomImport, library.getVersionProperty()); + this.dependencyHandler.add("api", this.dependencyHandler + .enforcedPlatform(createDependencyNotation(group.getId(), bomImport, library.getVersion()))); + } + } + } + + public static class LibraryHandler { + + private final List groups = new ArrayList<>(); + + private final List prohibitedVersions = new ArrayList<>(); + + public void group(String id, Closure closure) { + GroupHandler groupHandler = new GroupHandler(id); + ConfigureUtil.configure(closure, groupHandler); + this.groups + .add(new Group(groupHandler.id, groupHandler.modules, groupHandler.plugins, groupHandler.imports)); + } + + public void prohibit(String range, Closure closure) { + ProhibitedVersionHandler prohibitedVersionHandler = new ProhibitedVersionHandler(); + ConfigureUtil.configure(closure, prohibitedVersionHandler); + try { + this.prohibitedVersions.add(new ProhibitedVersion(VersionRange.createFromVersionSpec(range), + prohibitedVersionHandler.reason)); + } + catch (InvalidVersionSpecificationException ex) { + throw new InvalidUserCodeException("Invalid version range", ex); + } + } + + public static class ProhibitedVersionHandler { + + private String reason; + + public void because(String because) { + this.reason = because; + } + + } + + public class GroupHandler extends GroovyObjectSupport { + + private final String id; + + private List modules = new ArrayList<>(); + + private List imports = new ArrayList<>(); + + private List plugins = new ArrayList<>(); + + public GroupHandler(String id) { + this.id = id; + } + + public void setModules(List modules) { + this.modules = modules.stream() + .map((input) -> (input instanceof Module) ? (Module) input : new Module((String) input)) + .collect(Collectors.toList()); + } + + public void setImports(List imports) { + this.imports = imports; + } + + public void setPlugins(List plugins) { + this.plugins = plugins; + } + + public Object methodMissing(String name, Object args) { + if (args instanceof Object[] && ((Object[]) args).length == 1) { + Object arg = ((Object[]) args)[0]; + if (arg instanceof Closure) { + ExclusionHandler exclusionHandler = new ExclusionHandler(); + ConfigureUtil.configure((Closure) arg, exclusionHandler); + return new Module(name, exclusionHandler.exclusions); + } + } + throw new InvalidUserDataException("Invalid exclusion configuration for module '" + name + "'"); + } + + public class ExclusionHandler { + + private final List exclusions = new ArrayList<>(); + + public void exclude(Map exclusion) { + this.exclusions.add(new Exclusion(exclusion.get("group"), exclusion.get("module"))); + } + + } + + } + + } + + public static class UpgradeHandler { + + private UpgradePolicy upgradePolicy; + + private final GitHubHandler gitHub = new GitHubHandler(); + + public void setPolicy(UpgradePolicy upgradePolicy) { + this.upgradePolicy = upgradePolicy; + } + + public void gitHub(Closure closure) { + ConfigureUtil.configure(closure, this.gitHub); + } + + } + + public static final class Upgrade { + + private final UpgradePolicy upgradePolicy; + + private final GitHub gitHub; + + private Upgrade(UpgradePolicy upgradePolicy, GitHub gitHub) { + this.upgradePolicy = upgradePolicy; + this.gitHub = gitHub; + } + + public UpgradePolicy getPolicy() { + return this.upgradePolicy; + } + + public GitHub getGitHub() { + return this.gitHub; + } + + } + + public static class GitHubHandler { + + private String organization = "spring-projects"; + + private String repository = "spring-boot"; + + private List issueLabels; + + public void setOrganization(String organization) { + this.organization = organization; + } + + public void setRepository(String repository) { + this.repository = repository; + } + + public void setIssueLabels(List issueLabels) { + this.issueLabels = issueLabels; + } + + } + + public static final class GitHub { + + private String organization = "spring-projects"; + + private String repository = "spring-boot"; + + private List issueLabels; + + private GitHub(String organization, String repository, List issueLabels) { + this.organization = organization; + this.repository = repository; + this.issueLabels = issueLabels; + } + + public String getOrganization() { + return this.organization; + } + + public String getRepository() { + return this.repository; + } + + public List getIssueLabels() { + return this.issueLabels; + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/BomPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/BomPlugin.java new file mode 100644 index 00000000000..9b08ede52d1 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/BomPlugin.java @@ -0,0 +1,295 @@ +/* + * Copyright 2012-2020 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.build.bom; + +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.stream.Collectors; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathFactory; + +import groovy.util.Node; +import groovy.xml.QName; +import org.gradle.api.Action; +import org.gradle.api.GradleException; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.plugins.JavaPlatformExtension; +import org.gradle.api.plugins.JavaPlatformPlugin; +import org.gradle.api.plugins.PluginContainer; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.MavenPom; +import org.gradle.api.publish.maven.MavenPublication; +import org.gradle.api.publish.maven.tasks.GenerateMavenPom; +import org.gradle.api.tasks.Sync; +import org.gradle.api.tasks.TaskExecutionException; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; + +import org.springframework.boot.build.DeployedPlugin; +import org.springframework.boot.build.MavenRepositoryPlugin; +import org.springframework.boot.build.bom.Library.Group; +import org.springframework.boot.build.bom.bomr.UpgradeBom; +import org.springframework.boot.build.mavenplugin.MavenExec; +import org.springframework.util.FileCopyUtils; + +/** + * {@link Plugin} for defining a bom. Dependencies are added as constraints in the + * {@code api} configuration. Imported boms are added as enforced platforms in the + * {@code api} configuration. + * + * @author Andy Wilkinson + */ +public class BomPlugin implements Plugin { + + @Override + public void apply(Project project) { + PluginContainer plugins = project.getPlugins(); + plugins.apply(DeployedPlugin.class); + plugins.apply(MavenRepositoryPlugin.class); + plugins.apply(JavaPlatformPlugin.class); + JavaPlatformExtension javaPlatform = project.getExtensions().getByType(JavaPlatformExtension.class); + javaPlatform.allowDependencies(); + BomExtension bom = project.getExtensions().create("bom", BomExtension.class, project.getDependencies()); + project.getTasks().create("bomrCheck", CheckBom.class, bom); + project.getTasks().create("bomrUpgrade", UpgradeBom.class, bom); + new PublishingCustomizer(project, bom).customize(); + Configuration effectiveBomConfiguration = project.getConfigurations().create("effectiveBom"); + project.getTasks().matching((task) -> task.getName().equals(DeployedPlugin.GENERATE_POM_TASK_NAME)) + .all((task) -> { + Sync syncBom = project.getTasks().create("syncBom", Sync.class); + syncBom.dependsOn(task); + File generatedBomDir = new File(project.getBuildDir(), "generated/bom"); + syncBom.setDestinationDir(generatedBomDir); + syncBom.from(((GenerateMavenPom) task).getDestination(), (pom) -> pom.rename((name) -> "pom.xml")); + try { + String settingsXmlContent = FileCopyUtils + .copyToString(new InputStreamReader( + getClass().getClassLoader().getResourceAsStream("effective-bom-settings.xml"), + StandardCharsets.UTF_8)) + .replace("localRepositoryPath", + new File(project.getBuildDir(), "local-m2-repository").getAbsolutePath()); + syncBom.from(project.getResources().getText().fromString(settingsXmlContent), + (settingsXml) -> settingsXml.rename((name) -> "settings.xml")); + } + catch (IOException ex) { + throw new GradleException("Failed to prepare settings.xml", ex); + } + MavenExec generateEffectiveBom = project.getTasks().create("generateEffectiveBom", MavenExec.class); + generateEffectiveBom.setProjectDir(generatedBomDir); + File effectiveBom = new File(project.getBuildDir(), + "generated/effective-bom/" + project.getName() + "-effective-bom.xml"); + generateEffectiveBom.args("--settings", "settings.xml", "help:effective-pom", + "-Doutput=" + effectiveBom); + generateEffectiveBom.dependsOn(syncBom); + generateEffectiveBom.getOutputs().file(effectiveBom); + generateEffectiveBom.doLast(new StripUnrepeatableOutputAction(effectiveBom)); + project.getArtifacts().add(effectiveBomConfiguration.getName(), effectiveBom, + (artifact) -> artifact.builtBy(generateEffectiveBom)); + }); + } + + private static final class PublishingCustomizer { + + private final Project project; + + private final BomExtension bom; + + private PublishingCustomizer(Project project, BomExtension bom) { + this.project = project; + this.bom = bom; + } + + private void customize() { + PublishingExtension publishing = this.project.getExtensions().getByType(PublishingExtension.class); + publishing.getPublications().withType(MavenPublication.class).all(this::configurePublication); + } + + private void configurePublication(MavenPublication publication) { + publication.pom(this::customizePom); + } + + @SuppressWarnings("unchecked") + private void customizePom(MavenPom pom) { + pom.withXml((xml) -> { + Node projectNode = xml.asNode(); + Node properties = new Node(null, "properties"); + this.bom.getProperties().forEach(properties::appendNode); + Node dependencyManagement = findChild(projectNode, "dependencyManagement"); + if (dependencyManagement != null) { + addPropertiesBeforeDependencyManagement(projectNode, properties); + replaceVersionsWithVersionPropertyReferences(dependencyManagement); + addExclusionsToManagedDependencies(dependencyManagement); + } + else { + projectNode.children().add(properties); + } + addPluginManagement(projectNode); + }); + } + + @SuppressWarnings("unchecked") + private void addPropertiesBeforeDependencyManagement(Node projectNode, Node properties) { + for (int i = 0; i < projectNode.children().size(); i++) { + if (isNodeWithName(projectNode.children().get(i), "dependencyManagement")) { + projectNode.children().add(i, properties); + break; + } + } + } + + private void replaceVersionsWithVersionPropertyReferences(Node dependencyManagement) { + Node dependencies = findChild(dependencyManagement, "dependencies"); + if (dependencies != null) { + for (Node dependency : findChildren(dependencies, "dependency")) { + String groupId = findChild(dependency, "groupId").text(); + String artifactId = findChild(dependency, "artifactId").text(); + findChild(dependency, "version") + .setValue("${" + this.bom.getArtifactVersionProperty(groupId, artifactId) + "}"); + } + } + } + + private void addExclusionsToManagedDependencies(Node dependencyManagement) { + Node dependencies = findChild(dependencyManagement, "dependencies"); + if (dependencies != null) { + for (Node dependency : findChildren(dependencies, "dependency")) { + String groupId = findChild(dependency, "groupId").text(); + String artifactId = findChild(dependency, "artifactId").text(); + this.bom.getLibraries().stream().flatMap((library) -> library.getGroups().stream()) + .filter((group) -> group.getId().equals(groupId)) + .flatMap((group) -> group.getModules().stream()) + .filter((module) -> module.getName().equals(artifactId)) + .flatMap((module) -> module.getExclusions().stream()).forEach((exclusion) -> { + Node exclusions = findOrCreateNode(dependency, "exclusions"); + Node node = new Node(exclusions, "exclusion"); + node.appendNode("groupId", exclusion.getGroupId()); + node.appendNode("artifactId", exclusion.getArtifactId()); + }); + } + } + } + + private void addPluginManagement(Node projectNode) { + for (Library library : this.bom.getLibraries()) { + for (Group group : library.getGroups()) { + Node plugins = findOrCreateNode(projectNode, "build", "pluginManagement", "plugins"); + for (String pluginName : group.getPlugins()) { + Node plugin = new Node(plugins, "plugin"); + plugin.appendNode("groupId", group.getId()); + plugin.appendNode("artifactId", pluginName); + plugin.appendNode("version", "${" + library.getVersionProperty() + "}"); + } + } + } + } + + private Node findOrCreateNode(Node parent, String... path) { + Node current = parent; + for (String nodeName : path) { + Node child = findChild(current, nodeName); + if (child == null) { + child = new Node(current, nodeName); + } + current = child; + } + return current; + } + + private Node findChild(Node parent, String name) { + for (Object child : parent.children()) { + if (child instanceof Node) { + Node node = (Node) child; + if ((node.name() instanceof QName) && name.equals(((QName) node.name()).getLocalPart())) { + return node; + } + if (name.equals(node.name())) { + return node; + } + } + } + return null; + } + + @SuppressWarnings("unchecked") + private List findChildren(Node parent, String name) { + return (List) parent.children().stream().filter((child) -> isNodeWithName(child, name)) + .collect(Collectors.toList()); + + } + + private boolean isNodeWithName(Object candidate, String name) { + if (candidate instanceof Node) { + Node node = (Node) candidate; + if ((node.name() instanceof QName) && name.equals(((QName) node.name()).getLocalPart())) { + return true; + } + if (name.equals(node.name())) { + return true; + } + } + return false; + } + + } + + private static final class StripUnrepeatableOutputAction implements Action { + + private final File effectiveBom; + + private StripUnrepeatableOutputAction(File xmlFile) { + this.effectiveBom = xmlFile; + } + + @Override + public void execute(Task task) { + try { + Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.effectiveBom); + XPath xpath = XPathFactory.newInstance().newXPath(); + NodeList comments = (NodeList) xpath.evaluate("//comment()", document, XPathConstants.NODESET); + for (int i = 0; i < comments.getLength(); i++) { + org.w3c.dom.Node comment = comments.item(i); + comment.getParentNode().removeChild(comment); + } + org.w3c.dom.Node build = (org.w3c.dom.Node) xpath.evaluate("/project/build", document, + XPathConstants.NODE); + build.getParentNode().removeChild(build); + org.w3c.dom.Node reporting = (org.w3c.dom.Node) xpath.evaluate("/project/reporting", document, + XPathConstants.NODE); + reporting.getParentNode().removeChild(reporting); + TransformerFactory.newInstance().newTransformer().transform(new DOMSource(document), + new StreamResult(this.effectiveBom)); + } + catch (Exception ex) { + throw new TaskExecutionException(task, ex); + } + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/CheckBom.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/CheckBom.java new file mode 100644 index 00000000000..cde5d53513b --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/CheckBom.java @@ -0,0 +1,86 @@ +/* + * Copyright 2012-2020 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.build.bom; + +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; + +import javax.inject.Inject; + +import org.gradle.api.DefaultTask; +import org.gradle.api.InvalidUserDataException; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.boot.build.bom.Library.Group; +import org.springframework.boot.build.bom.Library.Module; +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; + +/** + * Checks the validity of a bom. + * + * @author Andy Wilkinson + */ +public class CheckBom extends DefaultTask { + + private final BomExtension bom; + + @Inject + public CheckBom(BomExtension bom) { + this.bom = bom; + } + + @TaskAction + void checkBom() { + for (Library library : this.bom.getLibraries()) { + for (Group group : library.getGroups()) { + for (Module module : group.getModules()) { + if (!module.getExclusions().isEmpty()) { + checkExclusions(group.getId(), module, library.getVersion()); + } + } + } + } + } + + private void checkExclusions(String groupId, Module module, DependencyVersion version) { + Set resolved = getProject().getConfigurations() + .detachedConfiguration( + getProject().getDependencies().create(groupId + ":" + module.getName() + ":" + version)) + .getResolvedConfiguration().getResolvedArtifacts().stream() + .map((artifact) -> artifact.getModuleVersion().getId()) + .map((id) -> id.getGroup() + ":" + id.getModule().getName()).collect(Collectors.toSet()); + Set exclusions = module.getExclusions().stream() + .map((exclusion) -> exclusion.getGroupId() + ":" + exclusion.getArtifactId()) + .collect(Collectors.toSet()); + Set unused = new TreeSet<>(); + for (String exclusion : exclusions) { + if (!resolved.contains(exclusion) && exclusion.endsWith(":*")) { + String group = exclusion.substring(0, exclusion.indexOf(':') + 1); + if (!resolved.stream().filter((candidate) -> candidate.startsWith(group)).findFirst().isPresent()) { + unused.add(exclusion); + } + } + } + exclusions.removeAll(resolved); + if (!unused.isEmpty()) { + throw new InvalidUserDataException( + "Unnecessary exclusions on " + groupId + ":" + module.getName() + ": " + exclusions); + } + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java new file mode 100644 index 00000000000..e28447838ca --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java @@ -0,0 +1,196 @@ +/* + * Copyright 2012-2020 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.build.bom; + +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +import org.apache.maven.artifact.versioning.VersionRange; + +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; + +/** + * A collection of modules, Maven plugins, and Maven boms that are versioned and released + * together. + * + * @author Andy Wilkinson + */ +public class Library { + + private final String name; + + private final DependencyVersion version; + + private final List groups; + + private final String versionProperty; + + private final List prohibitedVersions; + + /** + * Create a new {@code Library} with the given {@code name}, {@code version}, and + * {@code groups}. + * @param name name of the library + * @param version version of the library + * @param groups groups in the library + * @param prohibitedVersions version of the library that are prohibited + */ + public Library(String name, DependencyVersion version, List groups, + List prohibitedVersions) { + this.name = name; + this.version = version; + this.groups = groups; + this.versionProperty = name.toLowerCase(Locale.ENGLISH).replace(' ', '-') + ".version"; + this.prohibitedVersions = prohibitedVersions; + } + + public String getName() { + return this.name; + } + + public DependencyVersion getVersion() { + return this.version; + } + + public List getGroups() { + return this.groups; + } + + public String getVersionProperty() { + return this.versionProperty; + } + + public List getProhibitedVersions() { + return this.prohibitedVersions; + } + + /** + * A version or range of versions that are prohibited from being used in a bom. + */ + public static class ProhibitedVersion { + + private final VersionRange range; + + private final String reason; + + public ProhibitedVersion(VersionRange range, String reason) { + this.range = range; + this.reason = reason; + } + + public VersionRange getRange() { + return this.range; + } + + public String getReason() { + return this.reason; + } + + } + + /** + * A collection of modules, Maven plugins, and Maven boms with the same group ID. + */ + public static class Group { + + private final String id; + + private final List modules; + + private final List plugins; + + private final List boms; + + public Group(String id, List modules, List plugins, List boms) { + this.id = id; + this.modules = modules; + this.plugins = plugins; + this.boms = boms; + } + + public String getId() { + return this.id; + } + + public List getModules() { + return this.modules; + } + + public List getPlugins() { + return this.plugins; + } + + public List getBoms() { + return this.boms; + } + + } + + /** + * A module in a group. + */ + public static class Module { + + private final String name; + + private final List exclusions; + + public Module(String name) { + this(name, Collections.emptyList()); + } + + public Module(String name, List exclusions) { + this.name = name; + this.exclusions = exclusions; + } + + public String getName() { + return this.name; + } + + public List getExclusions() { + return this.exclusions; + } + + } + + /** + * An exclusion of a dependency identified by its group ID and artifact ID. + */ + public static class Exclusion { + + private final String groupId; + + private final String artifactId; + + public Exclusion(String groupId, String artifactId) { + this.groupId = groupId; + this.artifactId = artifactId; + } + + public String getGroupId() { + return this.groupId; + } + + public String getArtifactId() { + return this.artifactId; + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/UpgradePolicy.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/UpgradePolicy.java new file mode 100644 index 00000000000..831d3b4f85c --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/UpgradePolicy.java @@ -0,0 +1,61 @@ +/* + * Copyright 2012-2020 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.build.bom; + +import java.util.function.BiPredicate; + +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; + +/** + * Policies used to decide which versions are considered as possible upgrades. + * + * @author Andy Wilkinson + */ +public enum UpgradePolicy implements BiPredicate { + + /** + * All versions more recent than the current version will be suggested as possible + * upgrades. + */ + ANY((candidate, current) -> current.compareTo(candidate) < 0), + + /** + * New minor versions of the current major version will be suggested as possible + * upgrades. For example, if the current version is 1.2.3, all 1.x.y versions after + * 1.2.3 will be suggested. 2.x versions will not be offered. + */ + SAME_MAJOR_VERSION(DependencyVersion::isSameMajorAndNewerThan), + + /** + * New patch versions of the current minor version will be offered as possible + * upgrades. For example, if the current version is 1.2.3, all 1.2.x versions after + * 1.2.3 will be suggested. 1.x versions will not be offered. + */ + SAME_MINOR_VERSION(DependencyVersion::isSameMinorAndNewerThan); + + private BiPredicate delegate; + + UpgradePolicy(BiPredicate delegate) { + this.delegate = delegate; + } + + @Override + public boolean test(DependencyVersion candidate, DependencyVersion current) { + return this.delegate.test(candidate, current); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java new file mode 100644 index 00000000000..b216e9e3829 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java @@ -0,0 +1,142 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.SortedSet; +import java.util.stream.Collectors; + +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.gradle.api.internal.tasks.userinput.UserInputHandler; + +import org.springframework.boot.build.bom.Library; +import org.springframework.boot.build.bom.Library.Group; +import org.springframework.boot.build.bom.Library.Module; +import org.springframework.boot.build.bom.Library.ProhibitedVersion; +import org.springframework.boot.build.bom.UpgradePolicy; +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; +import org.springframework.util.StringUtils; + +/** + * Interactive {@link UpgradeResolver} that uses command line input to choose the upgrades + * to apply. + * + * @author Andy Wilkinson + */ +public final class InteractiveUpgradeResolver implements UpgradeResolver { + + private final VersionResolver versionResolver; + + private final UpgradePolicy upgradePolicy; + + private final UserInputHandler userInputHandler; + + InteractiveUpgradeResolver(VersionResolver versionResolver, UpgradePolicy upgradePolicy, + UserInputHandler userInputHandler) { + this.versionResolver = versionResolver; + this.upgradePolicy = upgradePolicy; + this.userInputHandler = userInputHandler; + } + + @Override + public List resolveUpgrades(Collection libraries) { + return libraries.stream().map(this::resolveUpgrade).filter((upgrade) -> upgrade != null) + .collect(Collectors.toList()); + } + + private Upgrade resolveUpgrade(Library library) { + Map> moduleVersions = new LinkedHashMap<>(); + for (Group group : library.getGroups()) { + for (Module module : group.getModules()) { + moduleVersions.put(group.getId() + ":" + module.getName(), + getLaterVersionsForModule(group.getId(), module.getName(), library.getVersion())); + } + } + List allVersions = moduleVersions.values().stream().flatMap(SortedSet::stream).distinct() + .filter((dependencyVersion) -> isPermitted(dependencyVersion, library.getProhibitedVersions())) + .collect(Collectors.toList()); + if (allVersions.isEmpty()) { + return null; + } + List versionOptions = allVersions.stream() + .map((version) -> new VersionOption(version, getMissingModules(moduleVersions, version))) + .collect(Collectors.toList()); + VersionOption current = new VersionOption(library.getVersion(), Collections.emptyList()); + VersionOption selected = this.userInputHandler.selectOption(library.getName() + " " + library.getVersion(), + versionOptions, current); + return (selected.equals(current)) ? null : new Upgrade(library, selected.version); + } + + private boolean isPermitted(DependencyVersion dependencyVersion, List prohibitedVersions) { + if (prohibitedVersions.isEmpty()) { + return true; + } + for (ProhibitedVersion prohibitedVersion : prohibitedVersions) { + if (prohibitedVersion.getRange() + .containsVersion(new DefaultArtifactVersion(dependencyVersion.toString()))) { + return false; + } + } + return true; + } + + private List getMissingModules(Map> moduleVersions, + DependencyVersion version) { + List missingModules = new ArrayList<>(); + moduleVersions.forEach((name, versions) -> { + if (!versions.contains(version)) { + missingModules.add(name); + } + }); + return missingModules; + } + + private SortedSet getLaterVersionsForModule(String groupId, String artifactId, + DependencyVersion currentVersion) { + SortedSet versions = this.versionResolver.resolveVersions(groupId, artifactId); + versions.removeIf((candidate) -> !this.upgradePolicy.test(candidate, currentVersion)); + return versions; + } + + private static final class VersionOption { + + private final DependencyVersion version; + + private final List missingModules; + + private VersionOption(DependencyVersion version, List missingModules) { + this.version = version; + this.missingModules = missingModules; + } + + @Override + public String toString() { + if (this.missingModules.isEmpty()) { + return this.version.toString(); + } + return this.version + " (some modules are missing: " + + StringUtils.collectionToDelimitedString(this.missingModules, ", ") + ")"; + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MavenMetadataVersionResolver.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MavenMetadataVersionResolver.java new file mode 100644 index 00000000000..d29f6b07593 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MavenMetadataVersionResolver.java @@ -0,0 +1,98 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr; + +import java.io.StringReader; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.stream.Collectors; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathFactory; + +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; +import org.springframework.http.HttpStatus; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; + +/** + * A {@link VersionResolver} that examines {@code maven-metadata.xml} to determine the + * available versions. + * + * @author Andy Wilkinson + */ +final class MavenMetadataVersionResolver implements VersionResolver { + + private final RestTemplate rest; + + private final List repositoryUrls; + + MavenMetadataVersionResolver(List repositoryUrls) { + this(new RestTemplate(Arrays.asList(new StringHttpMessageConverter())), repositoryUrls); + } + + MavenMetadataVersionResolver(RestTemplate restTemplate, List repositoryUrls) { + this.rest = restTemplate; + this.repositoryUrls = repositoryUrls; + } + + @Override + public SortedSet resolveVersions(String groupId, String artifactId) { + Set versions = new HashSet(); + for (String repositoryUrl : this.repositoryUrls) { + versions.addAll(resolveVersions(groupId, artifactId, repositoryUrl)); + } + return new TreeSet<>(versions.stream().map(DependencyVersion::parse).collect(Collectors.toSet())); + } + + private Set resolveVersions(String groupId, String artifactId, String repositoryUrl) { + Set versions = new HashSet(); + String url = repositoryUrl + "/" + groupId.replace('.', '/') + "/" + artifactId + "/maven-metadata.xml"; + try { + String metadata = this.rest.getForObject(url, String.class); + Document metadataDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder() + .parse(new InputSource(new StringReader(metadata))); + NodeList versionNodes = (NodeList) XPathFactory.newInstance().newXPath() + .evaluate("/metadata/versioning/versions/version", metadataDocument, XPathConstants.NODESET); + for (int i = 0; i < versionNodes.getLength(); i++) { + versions.add(versionNodes.item(i).getTextContent()); + } + } + catch (HttpClientErrorException ex) { + if (ex.getStatusCode() != HttpStatus.NOT_FOUND) { + System.err.println("Failed to download maven-metadata.xml for " + groupId + ":" + artifactId + " from " + + url + ": " + ex.getMessage()); + } + } + catch (Exception ex) { + System.err.println("Failed to resolve versions for module " + groupId + ":" + artifactId + " in repository " + + repositoryUrl + ": " + ex.getMessage()); + } + return versions; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/Upgrade.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/Upgrade.java new file mode 100644 index 00000000000..e0457fe8f4f --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/Upgrade.java @@ -0,0 +1,46 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr; + +import org.springframework.boot.build.bom.Library; +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; + +/** + * An upgrade to change a {@link Library} to use a new version}. + * + * @author Andy Wilkinson + */ +final class Upgrade { + + private final Library library; + + private final DependencyVersion version; + + Upgrade(Library library, DependencyVersion version) { + this.library = library; + this.version = version; + } + + Library getLibrary() { + return this.library; + } + + DependencyVersion getVersion() { + return this.version; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java new file mode 100644 index 00000000000..7da198a5f1b --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java @@ -0,0 +1,146 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.Properties; + +import javax.inject.Inject; + +import org.gradle.api.DefaultTask; +import org.gradle.api.InvalidUserDataException; +import org.gradle.api.Task; +import org.gradle.api.internal.tasks.userinput.UserInputHandler; +import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.TaskExecutionException; +import org.gradle.api.tasks.options.Option; + +import org.springframework.boot.build.bom.BomExtension; +import org.springframework.boot.build.bom.bomr.github.GitHub; +import org.springframework.boot.build.bom.bomr.github.GitHubRepository; +import org.springframework.boot.build.bom.bomr.github.Milestone; +import org.springframework.util.StringUtils; + +/** + * {@link Task} to upgrade the libraries managed by a bom. + * + * @author Andy Wilkinson + */ +public class UpgradeBom extends DefaultTask { + + private final BomExtension bom; + + private String milestone; + + @Inject + public UpgradeBom(BomExtension bom) { + this.bom = bom; + } + + @Option(option = "milestone", description = "Milestone to which dependency upgrade issues should be assigned") + public void setMilestone(String milestone) { + this.milestone = milestone; + } + + @TaskAction + void upgradeDependencies() { + GitHubRepository repository = createGitHub().getRepository(this.bom.getUpgrade().getGitHub().getOrganization(), + this.bom.getUpgrade().getGitHub().getRepository()); + List availableLabels = repository.getLabels(); + List issueLabels = this.bom.getUpgrade().getGitHub().getIssueLabels(); + if (!availableLabels.containsAll(issueLabels)) { + List unknownLabels = new ArrayList<>(issueLabels); + unknownLabels.removeAll(availableLabels); + throw new InvalidUserDataException( + "Unknown label(s): " + StringUtils.collectionToCommaDelimitedString(unknownLabels)); + } + Milestone milestone = determineMilestone(repository); + List upgrades = new InteractiveUpgradeResolver( + new MavenMetadataVersionResolver(Arrays.asList("https://repo1.maven.org/maven2/")), + this.bom.getUpgrade().getPolicy(), getServices().get(UserInputHandler.class)) + .resolveUpgrades(this.bom.getLibraries()); + for (Upgrade upgrade : upgrades) { + String title = "Upgrade to " + upgrade.getLibrary().getName() + " " + upgrade.getVersion(); + System.out.println(title); + try { + Path buildFile = getProject().getBuildFile().toPath(); + applyChanges(upgrade, buildFile); + int issueNumber = repository.openIssue(title, issueLabels, milestone); + if (new ProcessBuilder().command("git", "add", buildFile.toFile().getAbsolutePath()).start() + .waitFor() != 0) { + throw new IllegalStateException("git add failed"); + } + if (new ProcessBuilder().command("git", "commit", "-m", title + "\n\nCloses gh-" + issueNumber).start() + .waitFor() != 0) { + throw new IllegalStateException("git commit failed"); + } + } + catch (IOException ex) { + throw new TaskExecutionException(this, ex); + } + catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } + } + + private GitHub createGitHub() { + Properties bomrProperties = new Properties(); + try (Reader reader = new FileReader(new File(System.getProperty("user.home"), ".bomr.properties"))) { + bomrProperties.load(reader); + String username = bomrProperties.getProperty("bomr.github.username"); + String password = bomrProperties.getProperty("bomr.github.password"); + return GitHub.withCredentials(username, password); + } + catch (IOException ex) { + throw new InvalidUserDataException("Failed to load .bomr.properties from user home", ex); + } + } + + private void applyChanges(Upgrade upgrade, Path buildFile) throws IOException { + String contents = new String(Files.readAllBytes(buildFile), StandardCharsets.UTF_8); + String modified = contents.replace( + "library('" + upgrade.getLibrary().getName() + "', '" + upgrade.getLibrary().getVersion() + "')", + "library('" + upgrade.getLibrary().getName() + "', '" + upgrade.getVersion() + "')"); + Files.write(buildFile, modified.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE); + } + + private Milestone determineMilestone(GitHubRepository repository) { + if (this.milestone == null) { + return null; + } + List milestones = repository.getMilestones(); + Optional matchingMilestone = milestones.stream() + .filter((milestone) -> milestone.getName().equals(this.milestone)).findFirst(); + if (!matchingMilestone.isPresent()) { + throw new InvalidUserDataException("Unknown milestone: " + this.milestone); + } + return matchingMilestone.get(); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/ExampleController.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeResolver.java similarity index 53% rename from spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/ExampleController.java rename to buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeResolver.java index 41df3759ee6..ed1805eca02 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/ExampleController.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,24 +14,25 @@ * limitations under the License. */ -package org.springframework.boot.load.it.jar; +package org.springframework.boot.build.bom.bomr; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import java.util.Collection; +import java.util.List; + +import org.springframework.boot.build.bom.Library; /** - * Simple example Spring MVC Controller. + * Resolves upgrades for the libraries in a bom. * - * @author Phillip Webb + * @author Andy Wilkinson */ -@Controller -public class ExampleController { +interface UpgradeResolver { - @RequestMapping("/") - @ResponseBody - public String helloWorld() { - return "Hello Embedded Jar World!"; - } + /** + * Resolves the upgrades to be applied to the given {@code libraries}. + * @param libraries the libraries + * @return the upgrades + */ + List resolveUpgrades(Collection libraries); } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/VersionResolver.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/VersionResolver.java new file mode 100644 index 00000000000..70b1c9298cf --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/VersionResolver.java @@ -0,0 +1,39 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr; + +import java.util.SortedSet; + +import org.springframework.boot.build.bom.bomr.version.DependencyVersion; + +/** + * Resolves the available versions for a module. + * + * @author Andy Wilkinson + */ +interface VersionResolver { + + /** + * Resolves the available versions for the module identified by the given + * {@code groupId} and {@code artifactId}. + * @param groupId module's group ID + * @param artifactId module's artifact ID + * @return the available versions + */ + SortedSet resolveVersions(String groupId, String artifactId); + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/GitHub.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/GitHub.java new file mode 100644 index 00000000000..879caec26ef --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/GitHub.java @@ -0,0 +1,46 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.github; + +/** + * Minimal API for interacting with GitHub. + * + * @author Andy Wilkinson + */ +public interface GitHub { + + /** + * Returns a {@link GitHubRepository} with the given {@code name} in the given + * {@code organization}. + * @param organization the organization + * @param name the name of the repository + * @return the repository + */ + GitHubRepository getRepository(String organization, String name); + + /** + * Creates a new {@code GitHub} that will authenticate with given {@code username} and + * {@code password}. + * @param username username for authentication + * @param password password for authentication + * @return the new {@code GitHub} instance + */ + static GitHub withCredentials(String username, String password) { + return new StandardGitHub(username, password); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/GitHubRepository.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/GitHubRepository.java new file mode 100644 index 00000000000..3c49ba56d55 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/GitHubRepository.java @@ -0,0 +1,50 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.github; + +import java.util.List; + +/** + * Minimal API for interacting with a GitHub repository. + * + * @author Andy Wilkinson + */ +public interface GitHubRepository { + + /** + * Opens a new issue with the given title. The given {@code labels} will be applied to + * the issue and it will be assigned to the given {@code milestone}. + * @param title the title of the issue + * @param labels the labels to apply to the issue + * @param milestone the milestone to assign the issue to + * @return the number of the new issue + */ + int openIssue(String title, List labels, Milestone milestone); + + /** + * Returns the labels in the repository. + * @return the labels + */ + List getLabels(); + + /** + * Returns the milestones in the repository. + * @return the milestones + */ + List getMilestones(); + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/Milestone.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/Milestone.java new file mode 100644 index 00000000000..f50dd28c48d --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/Milestone.java @@ -0,0 +1,56 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.github; + +/** + * A milestone in a {@link GitHubRepository GitHub repository}. + * + * @author Andy Wilkinson + */ +public class Milestone { + + private final String name; + + private final int number; + + Milestone(String name, int number) { + this.name = name; + this.number = number; + } + + /** + * Returns the name of the milestone. + * @return the name + */ + public String getName() { + return this.name; + } + + /** + * Returns the number of the milestone. + * @return the number + */ + public int getNumber() { + return this.number; + } + + @Override + public String toString() { + return this.name + " (" + this.number + ")"; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHub.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHub.java new file mode 100644 index 00000000000..5be432a0ac9 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHub.java @@ -0,0 +1,74 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.github; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Base64; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; +import org.springframework.web.util.UriTemplateHandler; + +/** + * Standard implementation of {@link GitHub}. + * + * @author Andy Wilkinson + */ +final class StandardGitHub implements GitHub { + + private final String username; + + private final String password; + + StandardGitHub(String username, String password) { + this.username = username; + this.password = password; + } + + @Override + public GitHubRepository getRepository(String organization, String name) { + RestTemplate restTemplate = new RestTemplate( + Arrays.asList(new MappingJackson2HttpMessageConverter(new ObjectMapper()))); + restTemplate.getInterceptors().add(new ClientHttpRequestInterceptor() { + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + request.getHeaders().add("User-Agent", StandardGitHub.this.username); + request.getHeaders().add("Authorization", "Basic " + Base64.getEncoder().encodeToString( + (StandardGitHub.this.username + ":" + StandardGitHub.this.password).getBytes())); + request.getHeaders().add("Accept", MediaType.APPLICATION_JSON_VALUE); + return execution.execute(request, body); + } + + }); + UriTemplateHandler uriTemplateHandler = new DefaultUriBuilderFactory( + "https://api.github.com/repos/" + organization + "/" + name + "/"); + restTemplate.setUriTemplateHandler(uriTemplateHandler); + return new StandardGitHubRepository(restTemplate); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHubRepository.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHubRepository.java new file mode 100644 index 00000000000..6eced352719 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/github/StandardGitHubRepository.java @@ -0,0 +1,74 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.github; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +/** + * Standard implementation of {@link GitHubRepository}. + * + * @author Andy Wilkinson + */ +final class StandardGitHubRepository implements GitHubRepository { + + private final RestTemplate rest; + + StandardGitHubRepository(RestTemplate restTemplate) { + this.rest = restTemplate; + } + + @Override + @SuppressWarnings("rawtypes") + public int openIssue(String title, List labels, Milestone milestone) { + Map body = new HashMap<>(); + body.put("title", title); + if (milestone != null) { + body.put("milestone", milestone.getNumber()); + } + if (!labels.isEmpty()) { + body.put("labels", labels); + } + ResponseEntity response = this.rest.postForEntity("issues", body, Map.class); + return (Integer) response.getBody().get("number"); + } + + @Override + public List getLabels() { + return get("labels?per_page=100", (label) -> (String) label.get("name")); + } + + @Override + public List getMilestones() { + return get("milestones?per_page=100", + (milestone) -> new Milestone((String) milestone.get("title"), (Integer) milestone.get("number"))); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private List get(String name, Function, T> mapper) { + ResponseEntity response = this.rest.getForEntity(name, List.class); + List> body = response.getBody(); + return body.stream().map(mapper).collect(Collectors.toList()); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/AbstractDependencyVersion.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/AbstractDependencyVersion.java new file mode 100644 index 00000000000..0192c64f6f5 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/AbstractDependencyVersion.java @@ -0,0 +1,69 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import org.apache.maven.artifact.versioning.ComparableVersion; + +/** + * Base class for {@link DependencyVersion} implementations. + * + * @author Andy Wilkinson + */ +abstract class AbstractDependencyVersion implements DependencyVersion { + + private final ComparableVersion comparableVersion; + + protected AbstractDependencyVersion(ComparableVersion comparableVersion) { + this.comparableVersion = comparableVersion; + } + + @Override + public int compareTo(DependencyVersion other) { + ComparableVersion otherComparable = (other instanceof AbstractDependencyVersion) + ? ((AbstractDependencyVersion) other).comparableVersion : new ComparableVersion(other.toString()); + return this.comparableVersion.compareTo(otherComparable); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + AbstractDependencyVersion other = (AbstractDependencyVersion) obj; + if (!this.comparableVersion.equals(other.comparableVersion)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return this.comparableVersion.hashCode(); + } + + @Override + public String toString() { + return this.comparableVersion.toString(); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/ArtifactVersionDependencyVersion.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/ArtifactVersionDependencyVersion.java new file mode 100644 index 00000000000..8ff9408ef9b --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/ArtifactVersionDependencyVersion.java @@ -0,0 +1,100 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import java.util.Optional; + +import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.ComparableVersion; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; + +/** + * A {@link DependencyVersion} backed by an {@link ArtifactVersion}. + * + * @author Andy Wilkinson + */ +class ArtifactVersionDependencyVersion extends AbstractDependencyVersion { + + private final ArtifactVersion artifactVersion; + + protected ArtifactVersionDependencyVersion(ArtifactVersion artifactVersion) { + super(new ComparableVersion(artifactVersion.toString())); + this.artifactVersion = artifactVersion; + } + + protected ArtifactVersionDependencyVersion(ArtifactVersion artifactVersion, ComparableVersion comparableVersion) { + super(comparableVersion); + this.artifactVersion = artifactVersion; + } + + @Override + public boolean isNewerThan(DependencyVersion other) { + if (other instanceof ReleaseTrainDependencyVersion) { + return false; + } + return compareTo(other) > 0; + } + + @Override + public boolean isSameMajorAndNewerThan(DependencyVersion other) { + if (other instanceof ReleaseTrainDependencyVersion) { + return false; + } + return extractArtifactVersionDependencyVersion(other).map(this::isSameMajorAndNewerThan).orElse(true); + } + + private boolean isSameMajorAndNewerThan(ArtifactVersionDependencyVersion other) { + return this.artifactVersion.getMajorVersion() == other.artifactVersion.getMajorVersion() && isNewerThan(other); + } + + @Override + public boolean isSameMinorAndNewerThan(DependencyVersion other) { + if (other instanceof ReleaseTrainDependencyVersion) { + return false; + } + return extractArtifactVersionDependencyVersion(other).map(this::isSameMinorAndNewerThan).orElse(true); + } + + private boolean isSameMinorAndNewerThan(ArtifactVersionDependencyVersion other) { + return this.artifactVersion.getMajorVersion() == other.artifactVersion.getMajorVersion() + && this.artifactVersion.getMinorVersion() == other.artifactVersion.getMinorVersion() + && isNewerThan(other); + } + + @Override + public String toString() { + return this.artifactVersion.toString(); + } + + private Optional extractArtifactVersionDependencyVersion( + DependencyVersion other) { + ArtifactVersionDependencyVersion artifactVersion = null; + if (other instanceof ArtifactVersionDependencyVersion) { + artifactVersion = (ArtifactVersionDependencyVersion) other; + } + return Optional.ofNullable(artifactVersion); + } + + static ArtifactVersionDependencyVersion parse(String version) { + ArtifactVersion artifactVersion = new DefaultArtifactVersion(version); + if (artifactVersion.getQualifier() != null && artifactVersion.getQualifier().equals(version)) { + return null; + } + return new ArtifactVersionDependencyVersion(artifactVersion); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/CombinedPatchAndQualifierDependencyVersion.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/CombinedPatchAndQualifierDependencyVersion.java new file mode 100644 index 00000000000..8a910d6b60b --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/CombinedPatchAndQualifierDependencyVersion.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; + +/** + * A {@link DependencyVersion} where the patch and qualifier are not separated. + * + * @author Andy Wilkinson + */ +final class CombinedPatchAndQualifierDependencyVersion extends ArtifactVersionDependencyVersion { + + private static final Pattern PATTERN = Pattern.compile("([0-9]+\\.[0-9]+\\.[0-9]+)([A-Za-z][A-Za-z0-9]+)"); + + private final String original; + + private CombinedPatchAndQualifierDependencyVersion(ArtifactVersion artifactVersion, String original) { + super(artifactVersion); + this.original = original; + } + + @Override + public String toString() { + return this.original; + } + + static CombinedPatchAndQualifierDependencyVersion parse(String version) { + Matcher matcher = PATTERN.matcher(version); + if (!matcher.matches()) { + return null; + } + ArtifactVersion artifactVersion = new DefaultArtifactVersion(matcher.group(1) + "." + matcher.group(2)); + if (artifactVersion.getQualifier() != null && artifactVersion.getQualifier().equals(version)) { + return null; + } + return new CombinedPatchAndQualifierDependencyVersion(artifactVersion, version); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/DependencyVersion.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/DependencyVersion.java new file mode 100644 index 00000000000..a344a5c0e68 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/DependencyVersion.java @@ -0,0 +1,69 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; + +/** + * Version of a dependency. + * + * @author Andy Wilkinson + */ +public interface DependencyVersion extends Comparable { + + /** + * Returns whether this version is newer than the given {@code other} version. + * @param other version to test + * @return {@code true} if this version is newer, otherwise {@code false} + */ + boolean isNewerThan(DependencyVersion other); + + /** + * Returns whether this version has the same major versions as the {@code other} + * version while also being newer. + * @param other version to test + * @return {@code true} if this version has the same major and is newer, otherwise + * {@code false} + */ + boolean isSameMajorAndNewerThan(DependencyVersion other); + + /** + * Returns whether this version has the same major and minor versions as the + * {@code other} version while also being newer. + * @param other version to test + * @return {@code true} if this version has the same major and minor and is newer, + * otherwise {@code false} + */ + boolean isSameMinorAndNewerThan(DependencyVersion other); + + static DependencyVersion parse(String version) { + List> parsers = Arrays.asList(ArtifactVersionDependencyVersion::parse, + ReleaseTrainDependencyVersion::parse, NumericQualifierDependencyVersion::parse, + CombinedPatchAndQualifierDependencyVersion::parse, LeadingZeroesDependencyVersion::parse, + UnstructuredDependencyVersion::parse); + for (Function parser : parsers) { + DependencyVersion result = parser.apply(version); + if (result != null) { + return result; + } + } + throw new IllegalArgumentException("Version '" + version + "' could not be parsed"); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/LeadingZeroesDependencyVersion.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/LeadingZeroesDependencyVersion.java new file mode 100644 index 00000000000..5514b8b652a --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/LeadingZeroesDependencyVersion.java @@ -0,0 +1,56 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; + +/** + * A {@link DependencyVersion} that tolerates leading zeroes. + * + * @author Andy Wilkinson + */ +final class LeadingZeroesDependencyVersion extends ArtifactVersionDependencyVersion { + + private static final Pattern PATTERN = Pattern.compile("0*([0-9]+)\\.0*([0-9]+)\\.0*([0-9]+)"); + + private final String original; + + private LeadingZeroesDependencyVersion(ArtifactVersion artifactVersion, String original) { + super(artifactVersion); + this.original = original; + } + + @Override + public String toString() { + return this.original; + } + + static LeadingZeroesDependencyVersion parse(String input) { + Matcher matcher = PATTERN.matcher(input); + if (!matcher.matches()) { + return null; + } + ArtifactVersion artifactVersion = new DefaultArtifactVersion( + matcher.group(1) + matcher.group(2) + matcher.group(3)); + return new LeadingZeroesDependencyVersion(artifactVersion, input); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/NumericQualifierDependencyVersion.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/NumericQualifierDependencyVersion.java new file mode 100644 index 00000000000..363def7d801 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/NumericQualifierDependencyVersion.java @@ -0,0 +1,56 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.ComparableVersion; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; + +/** + * A fallback {@link DependencyVersion} to handle versions with four components that + * cannot be handled by {@link ArtifactVersion} because the fourth component is numeric. + * + * @author Andy Wilkinson + */ +final class NumericQualifierDependencyVersion extends ArtifactVersionDependencyVersion { + + private final String original; + + private NumericQualifierDependencyVersion(ArtifactVersion artifactVersion, String original) { + super(artifactVersion, new ComparableVersion(original)); + this.original = original; + } + + @Override + public String toString() { + return this.original; + } + + static NumericQualifierDependencyVersion parse(String input) { + String[] components = input.split("\\."); + if (components.length == 4) { + ArtifactVersion artifactVersion = new DefaultArtifactVersion( + components[0] + "." + components[1] + "." + components[2]); + if (artifactVersion.getQualifier() != null && artifactVersion.getQualifier().equals(input)) { + return null; + } + return new NumericQualifierDependencyVersion(artifactVersion, input); + } + return null; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/ReleaseTrainDependencyVersion.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/ReleaseTrainDependencyVersion.java new file mode 100644 index 00000000000..b3626d19846 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/ReleaseTrainDependencyVersion.java @@ -0,0 +1,125 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.springframework.util.StringUtils; + +/** + * A {@link DependencyVersion} for a release train such as Spring Data. + * + * @author Andy Wilkinson + */ +final class ReleaseTrainDependencyVersion implements DependencyVersion { + + private static final Pattern VERSION_PATTERN = Pattern.compile("([A-Z][a-z]+)-([A-Z]+)([0-9]*)"); + + private final String releaseTrain; + + private final String type; + + private final int version; + + private final String original; + + private ReleaseTrainDependencyVersion(String releaseTrain, String type, int version, String original) { + this.releaseTrain = releaseTrain; + this.type = type; + this.version = version; + this.original = original; + } + + @Override + public int compareTo(DependencyVersion other) { + if (!(other instanceof ReleaseTrainDependencyVersion)) { + return 0; + } + ReleaseTrainDependencyVersion otherReleaseTrain = (ReleaseTrainDependencyVersion) other; + int comparison = this.releaseTrain.compareTo(otherReleaseTrain.releaseTrain); + if (comparison != 0) { + return comparison; + } + comparison = this.type.compareTo(otherReleaseTrain.type); + if (comparison != 0) { + return comparison; + } + return Integer.compare(this.version, otherReleaseTrain.version); + } + + @Override + public boolean isNewerThan(DependencyVersion other) { + if (!(other instanceof ReleaseTrainDependencyVersion)) { + return true; + } + ReleaseTrainDependencyVersion otherReleaseTrain = (ReleaseTrainDependencyVersion) other; + return otherReleaseTrain.compareTo(this) < 0; + } + + @Override + public boolean isSameMajorAndNewerThan(DependencyVersion other) { + return isNewerThan(other); + } + + @Override + public boolean isSameMinorAndNewerThan(DependencyVersion other) { + if (!(other instanceof ReleaseTrainDependencyVersion)) { + return true; + } + ReleaseTrainDependencyVersion otherReleaseTrain = (ReleaseTrainDependencyVersion) other; + return otherReleaseTrain.releaseTrain.equals(this.releaseTrain) && isNewerThan(other); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ReleaseTrainDependencyVersion other = (ReleaseTrainDependencyVersion) obj; + if (!this.original.equals(other.original)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return this.original.hashCode(); + } + + @Override + public String toString() { + return this.original; + } + + static ReleaseTrainDependencyVersion parse(String input) { + Matcher matcher = VERSION_PATTERN.matcher(input); + if (!matcher.matches()) { + return null; + } + return new ReleaseTrainDependencyVersion(matcher.group(1), matcher.group(2), + (StringUtils.hasLength(matcher.group(3))) ? Integer.parseInt(matcher.group(3)) : 0, input); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/UnstructuredDependencyVersion.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/UnstructuredDependencyVersion.java new file mode 100644 index 00000000000..02822beaec9 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/version/UnstructuredDependencyVersion.java @@ -0,0 +1,60 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import org.apache.maven.artifact.versioning.ComparableVersion; + +/** + * A {@link DependencyVersion} with no structure such that version comparisons are not + * possible. + * + * @author Andy Wilkinson + */ +final class UnstructuredDependencyVersion extends AbstractDependencyVersion implements DependencyVersion { + + private final String version; + + private UnstructuredDependencyVersion(String version) { + super(new ComparableVersion(version)); + this.version = version; + } + + @Override + public boolean isNewerThan(DependencyVersion other) { + return this.compareTo(other) > 0; + } + + @Override + public boolean isSameMajorAndNewerThan(DependencyVersion other) { + return this.compareTo(other) > 0; + } + + @Override + public boolean isSameMinorAndNewerThan(DependencyVersion other) { + return this.compareTo(other) > 0; + } + + @Override + public String toString() { + return this.version; + } + + static UnstructuredDependencyVersion parse(String version) { + return new UnstructuredDependencyVersion(version); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForConflicts.java b/buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForConflicts.java new file mode 100644 index 00000000000..b5096ed1159 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForConflicts.java @@ -0,0 +1,135 @@ +/* + * Copyright 2012-2020 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.build.classpath; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeMap; +import java.util.function.Predicate; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.stream.Collectors; + +import org.gradle.api.DefaultTask; +import org.gradle.api.GradleException; +import org.gradle.api.Task; +import org.gradle.api.file.FileCollection; +import org.gradle.api.tasks.Classpath; +import org.gradle.api.tasks.TaskAction; + +/** + * A {@link Task} for checking the classpath for conflicting classes and resources. + * + * @author Andy Wilkinson + */ +public class CheckClasspathForConflicts extends DefaultTask { + + private final List> ignores = new ArrayList<>(); + + private FileCollection classpath; + + public void setClasspath(FileCollection classpath) { + this.classpath = classpath; + } + + @Classpath + public FileCollection getClasspath() { + return this.classpath; + } + + @TaskAction + public void checkForConflicts() throws IOException { + ClasspathContents classpathContents = new ClasspathContents(); + for (File file : this.classpath) { + if (file.isDirectory()) { + Path root = file.toPath(); + Files.walk(root).filter((path) -> Files.isRegularFile(path)) + .forEach((entry) -> classpathContents.add(root.relativize(entry).toString(), root.toString())); + } + else { + try (JarFile jar = new JarFile(file)) { + for (JarEntry entry : Collections.list(jar.entries())) { + if (!entry.isDirectory()) { + classpathContents.add(entry.getName(), file.getAbsolutePath()); + } + } + } + } + } + Map> conflicts = classpathContents.getConflicts(this.ignores); + if (!conflicts.isEmpty()) { + StringBuilder message = new StringBuilder(String.format("Found classpath conflicts:%n")); + conflicts.forEach((entry, locations) -> { + message.append(String.format(" %s%n", entry)); + locations.forEach((location) -> message.append(String.format(" %s%n", location))); + }); + throw new GradleException(message.toString()); + } + } + + public void ignore(Predicate predicate) { + this.ignores.add(predicate); + } + + private static final class ClasspathContents { + + private static final Set IGNORED_NAMES = new HashSet<>(Arrays.asList("about.html", "changelog.txt", + "LICENSE", "license.txt", "module-info.class", "notice.txt", "readme.txt")); + + private final Map> classpathContents = new HashMap<>(); + + private void add(String name, String source) { + this.classpathContents.computeIfAbsent(name, (key) -> new ArrayList<>()).add(source); + } + + private Map> getConflicts(List> ignores) { + return this.classpathContents.entrySet().stream().filter((entry) -> entry.getValue().size() > 1) + .filter((entry) -> canConflict(entry.getKey(), ignores)) + .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (v1, v2) -> v1, TreeMap::new)); + } + + private boolean canConflict(String name, List> ignores) { + if (name.startsWith("META-INF/")) { + return false; + } + for (String ignoredName : IGNORED_NAMES) { + if (name.equals(ignoredName)) { + return false; + } + } + for (Predicate ignore : ignores) { + if (ignore.test(name)) { + return false; + } + } + return true; + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForProhibitedDependencies.java b/buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForProhibitedDependencies.java new file mode 100644 index 00000000000..301304deb71 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/classpath/CheckClasspathForProhibitedDependencies.java @@ -0,0 +1,85 @@ +/* + * Copyright 2012-2020 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.build.classpath; + +import java.io.IOException; +import java.util.TreeSet; +import java.util.stream.Collectors; + +import org.gradle.api.DefaultTask; +import org.gradle.api.GradleException; +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.ModuleVersionIdentifier; +import org.gradle.api.file.FileCollection; +import org.gradle.api.tasks.Classpath; +import org.gradle.api.tasks.TaskAction; + +/** + * A {@link Task} for checking the classpath for prohibited dependencies. + * + * @author Andy Wilkinson + */ +public class CheckClasspathForProhibitedDependencies extends DefaultTask { + + private Configuration classpath; + + public CheckClasspathForProhibitedDependencies() { + getOutputs().upToDateWhen((task) -> true); + } + + public void setClasspath(Configuration classpath) { + this.classpath = classpath; + } + + @Classpath + public FileCollection getClasspath() { + return this.classpath; + } + + @TaskAction + public void checkForProhibitedDependencies() throws IOException { + TreeSet prohibited = this.classpath.getResolvedConfiguration().getResolvedArtifacts().stream() + .map((artifact) -> artifact.getModuleVersion().getId()).filter(this::prohibited) + .map((id) -> id.getGroup() + ":" + id.getName()).collect(Collectors.toCollection(TreeSet::new)); + if (!prohibited.isEmpty()) { + StringBuilder message = new StringBuilder(String.format("Found prohibited dependencies:%n")); + for (String dependency : prohibited) { + message.append(String.format(" %s%n", dependency)); + } + throw new GradleException(message.toString()); + } + } + + private boolean prohibited(ModuleVersionIdentifier id) { + String group = id.getGroup(); + if (group.equals("javax.batch")) { + return false; + } + if (group.startsWith("javax")) { + return true; + } + if (group.equals("commons-logging")) { + return true; + } + if (group.equals("org.slf4j") && id.getName().equals("jcl-over-slf4j")) { + return true; + } + return false; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/cli/AbstractPackageManagerDefinitionTask.java b/buildSrc/src/main/java/org/springframework/boot/build/cli/AbstractPackageManagerDefinitionTask.java new file mode 100644 index 00000000000..f0592979d39 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/cli/AbstractPackageManagerDefinitionTask.java @@ -0,0 +1,112 @@ +/* + * Copyright 2019 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.build.cli; + +import java.io.File; +import java.security.MessageDigest; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.codec.digest.DigestUtils; +import org.gradle.api.DefaultTask; +import org.gradle.api.Project; +import org.gradle.api.file.RegularFile; +import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskExecutionException; + +/** + * Base class for generating a package manager definition file such as a Scoop manifest or + * a Homebrew formula. + * + * @author Andy Wilkinson + */ +public abstract class AbstractPackageManagerDefinitionTask extends DefaultTask { + + private Provider archive; + + private File template; + + private File outputDir; + + public AbstractPackageManagerDefinitionTask() { + getInputs().property("version", getProject().provider(getProject()::getVersion)); + } + + @InputFile + public RegularFile getArchive() { + return this.archive.get(); + } + + public void setArchive(Provider archive) { + this.archive = archive; + } + + @InputFile + public File getTemplate() { + return this.template; + } + + public void setTemplate(File template) { + this.template = template; + } + + @OutputDirectory + public File getOutputDir() { + return this.outputDir; + } + + public void setOutputDir(File outputDir) { + this.outputDir = outputDir; + } + + protected void createDescriptor(Map additionalProperties) { + getProject().copy((copy) -> { + copy.from(this.template); + copy.into(this.outputDir); + Map properties = new HashMap<>(additionalProperties); + properties.put("hash", sha256(this.archive.get().getAsFile())); + properties.put("repo", determineArtifactoryRepo(getProject())); + properties.put("project", getProject()); + copy.expand(properties); + }); + } + + private String sha256(File file) { + try { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + return new DigestUtils(digest).digestAsHex(file); + } + catch (Exception ex) { + throw new TaskExecutionException(this, ex); + } + } + + private String determineArtifactoryRepo(Project project) { + String version = project.getVersion().toString(); + String type = version.substring(version.lastIndexOf('.')); + if (type.equals("RELEASE")) { + return "release"; + } + if (type.startsWith("M") || type.startsWith("RC")) { + return "milestone"; + } + return "snapshot"; + } + +} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/java/sample/SampleController.java b/buildSrc/src/main/java/org/springframework/boot/build/cli/HomebrewFormula.java similarity index 57% rename from spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/java/sample/SampleController.java rename to buildSrc/src/main/java/org/springframework/boot/build/cli/HomebrewFormula.java index 819f68150b4..5592d306175 100644 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/java/sample/SampleController.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/cli/HomebrewFormula.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,17 +14,22 @@ * limitations under the License. */ -package sample; +package org.springframework.boot.build.cli; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; +import java.util.Collections; -@RestController -public class SampleController { +import org.gradle.api.tasks.TaskAction; - @GetMapping("/") - public String hello() { - return "Hello World"; +/** + * A {@Task} for creating a Homebrew formula manifest. + * + * @author Andy Wilkinson + */ +public class HomebrewFormula extends AbstractPackageManagerDefinitionTask { + + @TaskAction + void createFormula() { + createDescriptor(Collections.emptyMap()); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/ExampleController.java b/buildSrc/src/main/java/org/springframework/boot/build/cli/ScoopManifest.java similarity index 53% rename from spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/ExampleController.java rename to buildSrc/src/main/java/org/springframework/boot/build/cli/ScoopManifest.java index 41df3759ee6..de671c8da14 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/ExampleController.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/cli/ScoopManifest.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,24 +14,23 @@ * limitations under the License. */ -package org.springframework.boot.load.it.jar; +package org.springframework.boot.build.cli; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import java.util.Collections; + +import org.gradle.api.tasks.TaskAction; /** - * Simple example Spring MVC Controller. + * A {@Task} for creating a Scoop manifest. * - * @author Phillip Webb + * @author Andy Wilkinson */ -@Controller -public class ExampleController { +public class ScoopManifest extends AbstractPackageManagerDefinitionTask { - @RequestMapping("/") - @ResponseBody - public String helloWorld() { - return "Hello Embedded Jar World!"; + @TaskAction + void createManifest() { + String version = getProject().getVersion().toString(); + createDescriptor(Collections.singletonMap("scoopVersion", version.substring(0, version.lastIndexOf('.')))); } } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/constraints/DocumentConstrainedVersions.java b/buildSrc/src/main/java/org/springframework/boot/build/constraints/DocumentConstrainedVersions.java new file mode 100644 index 00000000000..101039e9fd8 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/constraints/DocumentConstrainedVersions.java @@ -0,0 +1,81 @@ +/* + * Copyright 2019 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.build.constraints; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; + +import javax.inject.Inject; + +import org.gradle.api.DefaultTask; +import org.gradle.api.model.ObjectFactory; +import org.gradle.api.provider.SetProperty; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.boot.build.constraints.ExtractVersionConstraints.ConstrainedVersion; + +/** + * Task for documenting a platform's constrained versions. + * + * @author Andy Wilkinson + */ +public class DocumentConstrainedVersions extends DefaultTask { + + private final SetProperty constrainedVersions; + + private File outputFile; + + @Inject + public DocumentConstrainedVersions(ObjectFactory objectFactory) { + this.constrainedVersions = objectFactory.setProperty(ConstrainedVersion.class); + } + + @Input + public SetProperty getConstrainedVersions() { + return this.constrainedVersions; + } + + @OutputFile + public File getOutputFile() { + return this.outputFile; + } + + public void setOutputFile(File outputFile) { + this.outputFile = outputFile; + } + + @TaskAction + public void documentConstrainedVersions() throws IOException { + this.outputFile.getParentFile().mkdirs(); + try (PrintWriter writer = new PrintWriter(new FileWriter(this.outputFile))) { + writer.println("|==="); + writer.println("| Group ID | Artifact ID | Version"); + for (ConstrainedVersion constrainedVersion : this.constrainedVersions.get()) { + writer.println(); + writer.printf("| `%s`%n", constrainedVersion.getGroup()); + writer.printf("| `%s`%n", constrainedVersion.getArtifact()); + writer.printf("| `%s`%n", constrainedVersion.getVersion()); + } + writer.println("|==="); + } + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java b/buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java new file mode 100644 index 00000000000..3151560b7f6 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java @@ -0,0 +1,139 @@ +/* + * Copyright 2019 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.build.constraints; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +import org.gradle.api.Task; +import org.gradle.api.artifacts.ComponentMetadataDetails; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.DependencyConstraint; +import org.gradle.api.artifacts.DependencyConstraintMetadata; +import org.gradle.api.artifacts.dsl.DependencyHandler; +import org.gradle.api.internal.AbstractTask; +import org.gradle.api.tasks.Internal; +import org.gradle.api.tasks.TaskAction; +import org.gradle.platform.base.Platform; + +/** + * {@link Task} to extract constraints from a {@link Platform}. The platform's own + * constraints and those in any boms upon which it depends are extracted. + * + * @author Andy Wilkinson + */ +public class ExtractVersionConstraints extends AbstractTask { + + private final Configuration configuration; + + private final Map versionConstraints = new TreeMap<>(); + + private final Set constrainedVersions = new TreeSet<>(); + + private final List projectPaths = new ArrayList(); + + public ExtractVersionConstraints() { + DependencyHandler dependencies = getProject().getDependencies(); + this.configuration = getProject().getConfigurations().create(getName()); + dependencies.getComponents().all(this::processMetadataDetails); + } + + public void enforcedPlatform(String projectPath) { + this.configuration.getDependencies().add(getProject().getDependencies().enforcedPlatform( + getProject().getDependencies().project(Collections.singletonMap("path", projectPath)))); + this.projectPaths.add(projectPath); + } + + @Internal + public Map getVersionConstraints() { + return Collections.unmodifiableMap(this.versionConstraints); + } + + @Internal + public Set getConstrainedVersions() { + return this.constrainedVersions; + } + + @TaskAction + void extractVersionConstraints() { + this.configuration.resolve(); + for (String projectPath : this.projectPaths) { + for (DependencyConstraint constraint : getProject().project(projectPath).getConfigurations() + .getByName("apiElements").getAllDependencyConstraints()) { + this.versionConstraints.put(constraint.getGroup() + ":" + constraint.getName(), + constraint.getVersionConstraint().toString()); + this.constrainedVersions.add(new ConstrainedVersion(constraint.getGroup(), constraint.getName(), + constraint.getVersionConstraint().toString())); + } + } + } + + private void processMetadataDetails(ComponentMetadataDetails details) { + details.allVariants((variantMetadata) -> variantMetadata.withDependencyConstraints((dependencyConstraints) -> { + for (DependencyConstraintMetadata constraint : dependencyConstraints) { + this.versionConstraints.put(constraint.getGroup() + ":" + constraint.getName(), + constraint.getVersionConstraint().toString()); + this.constrainedVersions.add(new ConstrainedVersion(constraint.getGroup(), constraint.getName(), + constraint.getVersionConstraint().toString())); + } + })); + } + + public static final class ConstrainedVersion implements Comparable, Serializable { + + private final String group; + + private final String artifact; + + private final String version; + + private ConstrainedVersion(String group, String artifact, String version) { + this.group = group; + this.artifact = artifact; + this.version = version; + } + + public String getGroup() { + return this.group; + } + + public String getArtifact() { + return this.artifact; + } + + public String getVersion() { + return this.version; + } + + @Override + public int compareTo(ConstrainedVersion other) { + int groupComparison = this.group.compareTo(other.group); + if (groupComparison != 0) { + return groupComparison; + } + return this.artifact.compareTo(other.artifact); + } + + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/AsciidocBuilder.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/AsciidocBuilder.java similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/AsciidocBuilder.java rename to buildSrc/src/main/java/org/springframework/boot/build/context/properties/AsciidocBuilder.java index e4cab45468d..305da3abcfe 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/AsciidocBuilder.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/AsciidocBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; /** * Simple builder to help construct Asciidoc markup. diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/CompoundConfigurationTableEntry.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/CompoundConfigurationTableEntry.java similarity index 77% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/CompoundConfigurationTableEntry.java rename to buildSrc/src/main/java/org/springframework/boot/build/context/properties/CompoundConfigurationTableEntry.java index 603e902f5dc..f045b5d7308 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/CompoundConfigurationTableEntry.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/CompoundConfigurationTableEntry.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,14 +14,12 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; import java.util.Set; import java.util.TreeSet; import java.util.stream.Stream; -import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; - /** * Table entry regrouping a list of configuration properties sharing the same description. * @@ -39,8 +37,8 @@ class CompoundConfigurationTableEntry extends ConfigurationTableEntry { this.configurationKeys = new TreeSet<>(); } - void addConfigurationKeys(ConfigurationMetadataProperty... properties) { - Stream.of(properties).map(ConfigurationMetadataProperty::getId).forEach(this.configurationKeys::add); + void addConfigurationKeys(ConfigurationProperty... properties) { + Stream.of(properties).map(ConfigurationProperty::getName).forEach(this.configurationKeys::add); } @Override diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationMetadataDocumentWriter.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationMetadataDocumentWriter.java similarity index 77% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationMetadataDocumentWriter.java rename to buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationMetadataDocumentWriter.java index 0269c91cf4d..f5661073221 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationMetadataDocumentWriter.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationMetadataDocumentWriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,10 +14,9 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -28,8 +27,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; -import org.springframework.boot.configurationmetadata.ConfigurationMetadataRepositoryJsonBuilder; +import org.gradle.api.file.FileCollection; /** * Write Asciidoc documents with configuration properties listings. @@ -39,14 +37,13 @@ import org.springframework.boot.configurationmetadata.ConfigurationMetadataRepos */ public class ConfigurationMetadataDocumentWriter { - public void writeDocument(Path outputDirectory, DocumentOptions options, InputStream... metadata) + public void writeDocument(Path outputDirectory, DocumentOptions options, FileCollection metadataFiles) throws IOException { assertValidOutputDirectory(outputDirectory); if (!Files.exists(outputDirectory)) { Files.createDirectory(outputDirectory); } - assertMetadata(metadata); - List tables = createConfigTables(getMetadataProperties(metadata), options); + List tables = createConfigTables(ConfigurationProperties.fromFiles(metadataFiles), options); for (ConfigurationTable table : tables) { writeConfigurationTable(table, outputDirectory); } @@ -61,24 +58,11 @@ public class ConfigurationMetadataDocumentWriter { } } - private void assertMetadata(InputStream... metadata) { - if (metadata == null || metadata.length < 1) { - throw new IllegalArgumentException("missing input metadata"); - } - } - - private Map getMetadataProperties(InputStream... metadata) - throws IOException { - ConfigurationMetadataRepositoryJsonBuilder builder = ConfigurationMetadataRepositoryJsonBuilder - .create(metadata); - return builder.build().getAllProperties(); - } - - private List createConfigTables(Map metadataProperties, + private List createConfigTables(Map metadataProperties, DocumentOptions options) { List tables = new ArrayList<>(); List unmappedKeys = metadataProperties.values().stream().filter((property) -> !property.isDeprecated()) - .map(ConfigurationMetadataProperty::getId).collect(Collectors.toList()); + .map(ConfigurationProperty::getName).collect(Collectors.toList()); Map overrides = getOverrides(metadataProperties, unmappedKeys, options); options.getMetadataSections().forEach((id, keyPrefixes) -> tables @@ -95,8 +79,7 @@ public class ConfigurationMetadataDocumentWriter { } private Map getOverrides( - Map metadataProperties, List unmappedKeys, - DocumentOptions options) { + Map metadataProperties, List unmappedKeys, DocumentOptions options) { Map overrides = new HashMap<>(); options.getOverrides().forEach((keyPrefix, description) -> { CompoundConfigurationTableEntry entry = new CompoundConfigurationTableEntry(keyPrefix, description); @@ -111,7 +94,7 @@ public class ConfigurationMetadataDocumentWriter { return overrides; } - private ConfigurationTable createConfigTable(Map metadataProperties, + private ConfigurationTable createConfigTable(Map metadataProperties, List unmappedKeys, Map overrides, String id, List keyPrefixes) { ConfigurationTable table = new ConfigurationTable(id); @@ -123,7 +106,7 @@ public class ConfigurationMetadataDocumentWriter { List matchingKeys = unmappedKeys.stream() .filter((key) -> keyPrefixes.stream().anyMatch(key::startsWith)).collect(Collectors.toList()); for (String matchingKey : matchingKeys) { - ConfigurationMetadataProperty property = metadataProperties.get(matchingKey); + ConfigurationProperty property = metadataProperties.get(matchingKey); table.addEntry(new SingleConfigurationTableEntry(property)); } unmappedKeys.removeAll(matchingKeys); diff --git a/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperties.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperties.java new file mode 100644 index 00000000000..5fa43adee13 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperties.java @@ -0,0 +1,81 @@ +/* + * Copyright 2012-2020 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.build.context.properties; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import org.gradle.api.file.FileCollection; + +/** + * Configuration properties read from one or more + * {@code META-INF/spring-configuration-metadata.json} files. + * + * @author Andy Wilkinson + */ +final class ConfigurationProperties { + + private static final Type MAP_TYPE = new MapTypeToken().getType(); + + private ConfigurationProperties() { + + } + + @SuppressWarnings("unchecked") + static Map fromFiles(FileCollection files) { + List configurationProperties = new ArrayList<>(); + try { + Gson gson = new GsonBuilder().create(); + for (File file : files) { + try (Reader reader = new FileReader(file)) { + Map json = gson.fromJson(reader, MAP_TYPE); + List> properties = (List>) json.get("properties"); + for (Map property : properties) { + String name = (String) property.get("name"); + String type = (String) property.get("type"); + Object defaultValue = property.get("defaultValue"); + String description = (String) property.get("description"); + boolean deprecated = property.containsKey("deprecated"); + configurationProperties + .add(new ConfigurationProperty(name, type, defaultValue, description, deprecated)); + } + } + } + return configurationProperties.stream() + .collect(Collectors.toMap(ConfigurationProperty::getName, Function.identity())); + } + catch (IOException ex) { + throw new RuntimeException("Failed to load configuration metadata", ex); + } + } + + private static final class MapTypeToken extends TypeToken> { + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationPropertiesPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationPropertiesPlugin.java new file mode 100644 index 00000000000..81f51281fb4 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationPropertiesPlugin.java @@ -0,0 +1,94 @@ +/* + * Copyright 2012-2020 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.build.context.properties; + +import java.io.File; +import java.util.Collections; +import java.util.concurrent.Callable; +import java.util.stream.Collectors; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.compile.JavaCompile; + +import org.springframework.util.StringUtils; + +/** + * {@link Plugin} for projects that define {@code @ConfigurationProperties}. When applied, + * the plugin reacts to the presence of the {@link JavaPlugin} by: + * + *
    + *
  • Adding a dependency on the configuration properties annotation processor. + *
  • Configure the additional metadata locations annotation processor compiler argument + *
  • Defining an artifact for the resulting configuration property metadata so that it + * can be consumed by downstream projects. + *
+ * + * @author Andy Wilkinson + */ +public class ConfigurationPropertiesPlugin implements Plugin { + + /** + * Name of the {@link Configuration} that holds the configuration property metadata + * artifact. + */ + public static final String CONFIGURATION_PROPERTIES_METADATA_CONFIGURATION_NAME = "configurationPropertiesMetadata"; + + @Override + public void apply(Project project) { + project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> { + addConfigurationProcessorDependency(project); + configureAdditionalMetadataLocationsCompilerArgument(project); + addMetadataArtifact(project); + }); + } + + private void addConfigurationProcessorDependency(Project project) { + Configuration annotationProcessors = project.getConfigurations() + .getByName(JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME); + annotationProcessors.getDependencies().add(project.getDependencies().project(Collections.singletonMap("path", + ":spring-boot-project:spring-boot-tools:spring-boot-configuration-processor"))); + } + + private void addMetadataArtifact(Project project) { + SourceSet mainSourceSet = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets() + .getByName(SourceSet.MAIN_SOURCE_SET_NAME); + project.getConfigurations().maybeCreate(CONFIGURATION_PROPERTIES_METADATA_CONFIGURATION_NAME); + project.afterEvaluate((evaluatedProject) -> evaluatedProject.getArtifacts().add( + CONFIGURATION_PROPERTIES_METADATA_CONFIGURATION_NAME, + evaluatedProject.provider((Callable) () -> new File(mainSourceSet.getJava().getOutputDir(), + "META-INF/spring-configuration-metadata.json")), + (artifact) -> artifact + .builtBy(evaluatedProject.getTasks().getByName(mainSourceSet.getClassesTaskName())))); + } + + private void configureAdditionalMetadataLocationsCompilerArgument(Project project) { + JavaCompile compileJava = project.getTasks().withType(JavaCompile.class) + .getByName(JavaPlugin.COMPILE_JAVA_TASK_NAME); + SourceSet mainSourceSet = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets() + .getByName(SourceSet.MAIN_SOURCE_SET_NAME); + compileJava.getOptions().getCompilerArgs() + .add("-Aorg.springframework.boot.configurationprocessor.additionalMetadataLocations=" + StringUtils + .collectionToCommaDelimitedString(mainSourceSet.getResources().getSourceDirectories().getFiles() + .stream().map(project.getRootProject()::relativePath).collect(Collectors.toSet()))); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperty.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperty.java new file mode 100644 index 00000000000..e66c236f478 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperty.java @@ -0,0 +1,68 @@ +/* + * Copyright 2019 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.build.context.properties; + +/** + * A configuration property. + * + * @author Andy Wilkinson + */ +public class ConfigurationProperty { + + private final String name; + + private final String type; + + private final Object defaultValue; + + private final String description; + + private final boolean deprecated; + + ConfigurationProperty(String name, String type) { + this(name, type, null, null, false); + } + + ConfigurationProperty(String name, String type, Object defaultValue, String description, boolean deprecated) { + this.name = name; + this.type = type; + this.defaultValue = defaultValue; + this.description = description; + this.deprecated = deprecated; + } + + public String getName() { + return this.name; + } + + public String getType() { + return this.type; + } + + public Object getDefaultValue() { + return this.defaultValue; + } + + public String getDescription() { + return this.description; + } + + public boolean isDeprecated() { + return this.deprecated; + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationTable.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationTable.java similarity index 92% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationTable.java rename to buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationTable.java index 83a36d9bb1d..533c0b8365d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationTable.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationTable.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; import java.util.Arrays; import java.util.Set; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationTableEntry.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationTableEntry.java similarity index 92% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationTableEntry.java rename to buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationTableEntry.java index 8c81a960173..a0ebc3361b6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/ConfigurationTableEntry.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationTableEntry.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; /** * Abstract class for entries in {@link ConfigurationTable}. diff --git a/buildSrc/src/main/java/org/springframework/boot/build/context/properties/DocumentConfigurationProperties.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/DocumentConfigurationProperties.java new file mode 100644 index 00000000000..bb38138e2cc --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/DocumentConfigurationProperties.java @@ -0,0 +1,95 @@ +/* + * Copyright 2012-2020 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.build.context.properties; + +import java.io.File; +import java.io.IOException; + +import org.gradle.api.Task; +import org.gradle.api.file.FileCollection; +import org.gradle.api.internal.AbstractTask; +import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.boot.build.context.properties.DocumentOptions.Builder; + +/** + * {@link Task} used to document auto-configuration classes. + * + * @author Andy Wilkinson + */ +public class DocumentConfigurationProperties extends AbstractTask { + + private FileCollection configurationPropertyMetadata; + + private File outputDir; + + @InputFiles + public FileCollection getConfigurationPropertyMetadata() { + return this.configurationPropertyMetadata; + } + + public void setConfigurationPropertyMetadata(FileCollection configurationPropertyMetadata) { + this.configurationPropertyMetadata = configurationPropertyMetadata; + } + + @OutputDirectory + public File getOutputDir() { + return this.outputDir; + } + + public void setOutputDir(File outputDir) { + this.outputDir = outputDir; + } + + @TaskAction + void documentConfigurationProperties() throws IOException { + Builder builder = DocumentOptions.builder(); + builder.addSection("core") + .withKeyPrefixes("debug", "trace", "logging", "spring.aop", "spring.application", + "spring.autoconfigure", "spring.banner", "spring.beaninfo", "spring.codec", "spring.config", + "spring.info", "spring.jmx", "spring.main", "spring.messages", "spring.pid", "spring.profiles", + "spring.quartz", "spring.reactor", "spring.task", "spring.mandatory-file-encoding", "info", + "spring.output.ansi.enabled") + .addSection("mail").withKeyPrefixes("spring.mail", "spring.sendgrid").addSection("cache") + .withKeyPrefixes("spring.cache").addSection("server").withKeyPrefixes("server").addSection("web") + .withKeyPrefixes("spring.hateoas", "spring.http", "spring.servlet", "spring.jersey", "spring.mvc", + "spring.resources", "spring.webflux") + .addSection("json").withKeyPrefixes("spring.jackson", "spring.gson").addSection("rsocket") + .withKeyPrefixes("spring.rsocket").addSection("templating") + .withKeyPrefixes("spring.freemarker", "spring.groovy", "spring.mustache", "spring.thymeleaf") + .addOverride("spring.groovy.template.configuration", "See GroovyMarkupConfigurer") + .addSection("security").withKeyPrefixes("spring.security", "spring.ldap", "spring.session") + .addSection("data-migration").withKeyPrefixes("spring.flyway", "spring.liquibase").addSection("data") + .withKeyPrefixes("spring.couchbase", "spring.elasticsearch", "spring.h2", "spring.influx", + "spring.mongodb", "spring.redis", "spring.dao", "spring.data", "spring.datasource", + "spring.jooq", "spring.jdbc", "spring.jpa") + .addOverride("spring.datasource.dbcp2", "Commons DBCP2 specific settings") + .addOverride("spring.datasource.tomcat", "Tomcat datasource specific settings") + .addOverride("spring.datasource.hikari", "Hikari specific settings").addSection("transaction") + .withKeyPrefixes("spring.jta", "spring.transaction").addSection("integration") + .withKeyPrefixes("spring.activemq", "spring.artemis", "spring.batch", "spring.integration", + "spring.jms", "spring.kafka", "spring.rabbitmq", "spring.hazelcast", "spring.webservices") + .addSection("actuator").withKeyPrefixes("management").addSection("devtools") + .withKeyPrefixes("spring.devtools").addSection("testing").withKeyPrefixes("spring.test"); + DocumentOptions options = builder.build(); + new ConfigurationMetadataDocumentWriter().writeDocument(this.outputDir.toPath(), options, + this.configurationPropertyMetadata); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/DocumentOptions.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/DocumentOptions.java similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/DocumentOptions.java rename to buildSrc/src/main/java/org/springframework/boot/build/context/properties/DocumentOptions.java index 6e96e8d94bb..53fc4adec3f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/DocumentOptions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/DocumentOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; import java.util.Arrays; import java.util.HashMap; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/SingleConfigurationTableEntry.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/SingleConfigurationTableEntry.java similarity index 88% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/SingleConfigurationTableEntry.java rename to buildSrc/src/main/java/org/springframework/boot/build/context/properties/SingleConfigurationTableEntry.java index 17ac8bc32a2..a2692818433 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/SingleConfigurationTableEntry.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/SingleConfigurationTableEntry.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,13 +14,11 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; import java.util.Arrays; import java.util.stream.Collectors; -import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; - /** * Table entry containing a single configuration property. * @@ -32,8 +30,8 @@ class SingleConfigurationTableEntry extends ConfigurationTableEntry { private final String defaultValue; - SingleConfigurationTableEntry(ConfigurationMetadataProperty property) { - this.key = property.getId(); + SingleConfigurationTableEntry(ConfigurationProperty property) { + this.key = property.getName(); if (property.getType() != null && property.getType().startsWith("java.util.Map")) { this.key += ".*"; } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/log4j2/ReproducibleLog4j2PluginsDatAction.java b/buildSrc/src/main/java/org/springframework/boot/build/log4j2/ReproducibleLog4j2PluginsDatAction.java new file mode 100644 index 00000000000..0414fb1cbb7 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/log4j2/ReproducibleLog4j2PluginsDatAction.java @@ -0,0 +1,111 @@ +/* + * Copyright 2012-2020 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.build.log4j2; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; + +import org.gradle.api.Action; +import org.gradle.api.InvalidUserDataException; +import org.gradle.api.tasks.TaskExecutionException; +import org.gradle.api.tasks.compile.JavaCompile; + +/** + * An {@Action} to post-process a {@code Log4j2Plugins.dat} and re-order its content so + * that it is reproducible. + * + * @author Andy Wilkinson + */ +public class ReproducibleLog4j2PluginsDatAction implements Action { + + @Override + public void execute(JavaCompile javaCompile) { + File datFile = new File(javaCompile.getDestinationDir(), + "META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat"); + try { + postProcess(datFile); + } + catch (IOException ex) { + throw new TaskExecutionException(javaCompile, ex); + } + } + + void postProcess(File datFile) throws IOException { + if (!datFile.isFile()) { + throw new InvalidUserDataException( + "META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat not found"); + } + Map> categories = new TreeMap<>(); + try (DataInputStream input = new DataInputStream(new FileInputStream(datFile))) { + int categoryCount = input.readInt(); + for (int i = 0; i < categoryCount; i++) { + String categoryName = input.readUTF(); + int pluginCount = input.readInt(); + Map category = categories.computeIfAbsent(categoryName, (c) -> new TreeMap<>()); + for (int j = 0; j < pluginCount; j++) { + Plugin plugin = new Plugin(input.readUTF(), input.readUTF(), input.readUTF(), input.readBoolean(), + input.readBoolean()); + category.putIfAbsent(plugin.key, plugin); + } + } + } + try (DataOutputStream output = new DataOutputStream(new FileOutputStream(datFile))) { + output.writeInt(categories.size()); + for (Entry> category : categories.entrySet()) { + output.writeUTF(category.getKey()); + output.writeInt(category.getValue().size()); + for (Plugin plugin : category.getValue().values()) { + output.writeUTF(plugin.key); + output.writeUTF(plugin.className); + output.writeUTF(plugin.name); + output.writeBoolean(plugin.printable); + output.writeBoolean(plugin.defer); + } + } + } + } + + private static final class Plugin { + + private final String key; + + private final String className; + + private final String name; + + private final boolean printable; + + private final boolean defer; + + private Plugin(String key, String className, String name, boolean printable, boolean defer) { + this.key = key; + this.className = className; + this.name = name; + this.printable = printable; + this.defer = defer; + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/DocumentPluginGoals.java b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/DocumentPluginGoals.java new file mode 100644 index 00000000000..2a16072dbb1 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/DocumentPluginGoals.java @@ -0,0 +1,194 @@ +/* + * Copyright 2012-2020 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.build.mavenplugin; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; +import java.util.stream.Collectors; + +import org.gradle.api.DefaultTask; +import org.gradle.api.Task; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.boot.build.mavenplugin.PluginXmlParser.Mojo; +import org.springframework.boot.build.mavenplugin.PluginXmlParser.Parameter; +import org.springframework.boot.build.mavenplugin.PluginXmlParser.Plugin; + +/** + * A {@link Task} to document the plugin's goals. + * + * @author Andy Wilkinson + */ +public class DocumentPluginGoals extends DefaultTask { + + private final PluginXmlParser parser = new PluginXmlParser(); + + private File pluginXml; + + private File outputDir; + + @OutputDirectory + public File getOutputDir() { + return this.outputDir; + } + + public void setOutputDir(File outputDir) { + this.outputDir = outputDir; + } + + @InputFile + public File getPluginXml() { + return this.pluginXml; + } + + public void setPluginXml(File pluginXml) { + this.pluginXml = pluginXml; + } + + @TaskAction + public void documentPluginGoals() throws IOException { + Plugin plugin = this.parser.parse(this.pluginXml); + writeOverview(plugin); + for (Mojo mojo : plugin.getMojos()) { + documentMojo(plugin, mojo); + } + } + + private void writeOverview(Plugin plugin) throws IOException { + try (PrintWriter writer = new PrintWriter(new FileWriter(new File(this.outputDir, "overview.adoc")))) { + writer.println("[cols=\"1,3\"]"); + writer.println("|==="); + writer.println("| Goal | Description"); + writer.println(); + for (Mojo mojo : plugin.getMojos()) { + writer.printf("| <>%n", mojo.getGoal(), plugin.getGoalPrefix(), mojo.getGoal()); + writer.printf("| %s%n", mojo.getDescription()); + writer.println(); + } + writer.println("|==="); + } + } + + private void documentMojo(Plugin plugin, Mojo mojo) throws IOException { + try (PrintWriter writer = new PrintWriter(new FileWriter(new File(this.outputDir, mojo.getGoal() + ".adoc")))) { + String sectionId = "goals-" + mojo.getGoal(); + writer.println(); + writer.println(); + writer.printf("[[%s]]%n", sectionId); + writer.printf("== `%s:%s`%n", plugin.getGoalPrefix(), mojo.getGoal()); + writer.printf("`%s:%s:%s`%n", plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion()); + writer.println(); + writer.println(mojo.getDescription()); + List parameters = mojo.getParameters().stream().filter(Parameter::isEditable) + .collect(Collectors.toList()); + List requiredParameters = parameters.stream().filter(Parameter::isRequired) + .collect(Collectors.toList()); + String parametersSectionId = sectionId + "-parameters"; + String detailsSectionId = parametersSectionId + "-details"; + if (!requiredParameters.isEmpty()) { + writer.println(); + writer.println(); + writer.printf("[[%s-required]]%n", parametersSectionId); + writer.println("=== Required parameters"); + writeParametersTable(writer, mojo.getGoal(), requiredParameters); + } + List optionalParameters = parameters.stream().filter((parameter) -> !parameter.isRequired()) + .collect(Collectors.toList()); + if (!optionalParameters.isEmpty()) { + writer.println(); + writer.println(); + writer.printf("[[%s-optional]]%n", parametersSectionId); + writer.println("=== Optional parameters"); + writeParametersTable(writer, detailsSectionId, optionalParameters); + } + writer.println(); + writer.println(); + writer.printf("[[%s]]%n", detailsSectionId); + writer.println("=== Parameter details"); + writeParameterDetails(writer, parameters, detailsSectionId); + } + } + + private void writeParametersTable(PrintWriter writer, String detailsSectionId, List parameters) { + writer.println("[cols=\"3,2,3\"]"); + writer.println("|==="); + writer.println("| Name | Type | Default"); + writer.println(); + for (Parameter parameter : parameters) { + String name = parameter.getName(); + writer.printf("| <<%s-%s,%s>>%n", detailsSectionId, name, name); + String type = parameter.getType(); + if (type.lastIndexOf('.') >= 0) { + type = type.substring(type.lastIndexOf('.') + 1); + } + writer.printf("| `%s`%n", type); + String defaultValue = parameter.getDefaultValue(); + if (defaultValue != null) { + writer.printf("| `%s`%n", defaultValue); + } + else { + writer.println("|"); + } + writer.println(); + } + writer.println("|==="); + } + + private void writeParameterDetails(PrintWriter writer, List parameters, String sectionId) { + for (Parameter parameter : parameters) { + String name = parameter.getName(); + writer.println(); + writer.println(); + writer.printf("[[%s-%s]]%n", sectionId, name); + writer.printf("==== `%s`%n", name); + writer.println(parameter.getDescription()); + writer.println(); + writer.println("[cols=\"10h,90\"]"); + writer.println("|==="); + writer.println(); + writeDetail(writer, "Name", name); + writeDetail(writer, "Type", parameter.getType()); + writeOptionalDetail(writer, "Default value", parameter.getDefaultValue()); + writeOptionalDetail(writer, "User property", parameter.getUserProperty()); + writeOptionalDetail(writer, "Since", parameter.getSince()); + writer.println("|==="); + } + } + + private void writeDetail(PrintWriter writer, String name, String value) { + writer.printf("| %s%n", name); + writer.printf("| `%s`%n", value); + writer.println(); + } + + private void writeOptionalDetail(PrintWriter writer, String name, String value) { + writer.printf("| %s%n", name); + if (value != null) { + writer.printf("| `%s`%n", value); + } + else { + writer.println("|"); + } + writer.println(); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenExec.java b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenExec.java new file mode 100644 index 00000000000..17694f11d14 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenExec.java @@ -0,0 +1,101 @@ +/* + * Copyright 2012-2020 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.build.mavenplugin; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.tasks.Internal; +import org.gradle.api.tasks.JavaExec; +import org.gradle.api.tasks.TaskExecutionException; +import org.gradle.process.internal.ExecException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A custom {@link JavaExec} {@link Task task} for running Maven. + * + * @author Andy Wilkinson + */ +public class MavenExec extends JavaExec { + + private Logger log = LoggerFactory.getLogger(MavenExec.class); + + private File projectDir; + + public MavenExec() throws IOException { + setClasspath(mavenConfiguration(getProject())); + args("--batch-mode"); + setMain("org.apache.maven.cli.MavenCli"); + } + + public void setProjectDir(File projectDir) { + this.projectDir = projectDir; + getInputs().file(new File(projectDir, "pom.xml")); + } + + @Override + public void exec() { + workingDir(this.projectDir); + systemProperty("maven.multiModuleProjectDirectory", this.projectDir.getAbsolutePath()); + try { + Path logFile = Files.createTempFile(getName(), ".log"); + try { + args("--log-file", logFile.toFile().getAbsolutePath()); + super.exec(); + if (this.log.isInfoEnabled()) { + Files.readAllLines(logFile).forEach(this.log::info); + } + } + catch (ExecException ex) { + System.out.println("Exec exception! Dumping log"); + Files.readAllLines(logFile).forEach(System.out::println); + throw ex; + } + } + catch (IOException ex) { + throw new TaskExecutionException(this, ex); + } + } + + private Configuration mavenConfiguration(Project project) { + Configuration existing = project.getConfigurations().findByName("maven"); + if (existing != null) { + return existing; + } + return project.getConfigurations().create("maven", (maven) -> { + maven.getDependencies().add(project.getDependencies().create("org.apache.maven:maven-embedder:3.6.2")); + maven.getDependencies().add(project.getDependencies().create("org.apache.maven:maven-compat:3.6.2")); + maven.getDependencies().add(project.getDependencies().create("org.slf4j:slf4j-simple:1.7.5")); + maven.getDependencies().add( + project.getDependencies().create("org.apache.maven.resolver:maven-resolver-connector-basic:1.4.1")); + maven.getDependencies().add( + project.getDependencies().create("org.apache.maven.resolver:maven-resolver-transport-http:1.4.1")); + }); + } + + @Internal + public File getProjectDir() { + return this.projectDir; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenPluginPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenPluginPlugin.java new file mode 100644 index 00000000000..08874b11aaa --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenPluginPlugin.java @@ -0,0 +1,211 @@ +/* + * Copyright 2019 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.build.mavenplugin; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; + +import io.spring.javaformat.formatter.FileFormatter; +import org.gradle.api.DefaultTask; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.plugins.JavaLibraryPlugin; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.MavenPublication; +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; +import org.gradle.api.tasks.Copy; +import org.gradle.api.tasks.JavaExec; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.TaskExecutionException; +import org.gradle.api.tasks.bundling.Jar; +import org.gradle.api.tasks.javadoc.Javadoc; +import org.gradle.external.javadoc.StandardJavadocDocletOptions; + +import org.springframework.boot.build.DeployedPlugin; +import org.springframework.boot.build.MavenRepositoryPlugin; +import org.springframework.boot.build.test.IntegrationTestPlugin; + +/** + * Plugin for building Spring Boot's Maven Plugin. + * + * @author Andy Wilkinson + */ +public class MavenPluginPlugin implements Plugin { + + @Override + public void apply(Project project) { + project.getPlugins().apply(JavaLibraryPlugin.class); + project.getPlugins().apply(MavenPublishPlugin.class); + project.getPlugins().apply(DeployedPlugin.class); + project.getPlugins().apply(MavenRepositoryPlugin.class); + project.getPlugins().apply(IntegrationTestPlugin.class); + Copy populateIntTestMavenRepository = project.getTasks().create("populateIntTestMavenRepository", Copy.class); + populateIntTestMavenRepository.setDestinationDir(project.getBuildDir()); + populateIntTestMavenRepository.into("int-test-maven-repository", (copy) -> { + copy.from(project.getConfigurations().getByName(MavenRepositoryPlugin.MAVEN_REPOSITORY_CONFIGURATION_NAME)); + copy.from(new File(project.getBuildDir(), "maven-repository")); + }); + populateIntTestMavenRepository + .dependsOn(project.getTasks().getByName(MavenRepositoryPlugin.PUBLISH_TO_PROJECT_REPOSITORY_TASK_NAME)); + configurePomPackaging(project); + MavenExec generateHelpMojo = configureMojoGenerationTasks(project); + MavenExec generatePluginDescriptor = configurePluginDescriptorGenerationTasks(project, generateHelpMojo); + DocumentPluginGoals documentPluginGoals = project.getTasks().create("documentPluginGoals", + DocumentPluginGoals.class); + documentPluginGoals.setPluginXml(generatePluginDescriptor.getOutputs().getFiles().getSingleFile()); + documentPluginGoals.setOutputDir(new File(project.getBuildDir(), "docs/generated/goals/")); + documentPluginGoals.dependsOn(generatePluginDescriptor); + Jar jar = (Jar) project.getTasks().getByName(JavaPlugin.JAR_TASK_NAME); + includeDescriptorInJar(jar, generatePluginDescriptor); + includeHelpMojoInJar(jar, generateHelpMojo); + PrepareMavenBinaries prepareMavenBinaries = project.getTasks().create("prepareMavenBinaries", + PrepareMavenBinaries.class); + prepareMavenBinaries.setOutputDir(new File(project.getBuildDir(), "maven-binaries")); + project.getTasks().getByName(IntegrationTestPlugin.INT_TEST_TASK_NAME).dependsOn(populateIntTestMavenRepository, + prepareMavenBinaries); + } + + private void configurePomPackaging(Project project) { + PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); + publishing.getPublications().withType(MavenPublication.class, + (mavenPublication) -> mavenPublication.pom((pom) -> pom.setPackaging("maven-plugin"))); + } + + private MavenExec configureMojoGenerationTasks(Project project) { + File helpMojoDir = new File(project.getBuildDir(), "help-mojo"); + Copy helpMojoInputs = createCopyHelpMojoInputs(project, helpMojoDir); + MavenExec generateHelpMojo = createGenerateHelpMojo(project, helpMojoDir); + generateHelpMojo.dependsOn(helpMojoInputs); + return generateHelpMojo; + } + + private Copy createCopyHelpMojoInputs(Project project, File mavenDir) { + Copy mojoInputs = project.getTasks().create("copyHelpMojoInputs", Copy.class); + mojoInputs.setDestinationDir(mavenDir); + mojoInputs.from(new File(project.getProjectDir(), "src/maven/resources/pom.xml"), + (sync) -> sync.filter((input) -> input.replace("{{version}}", project.getVersion().toString()))); + return mojoInputs; + } + + private MavenExec createGenerateHelpMojo(Project project, File mavenDir) { + MavenExec generateHelpMojo = project.getTasks().create("generateHelpMojo", MavenExec.class); + generateHelpMojo.setProjectDir(mavenDir); + generateHelpMojo.args("org.apache.maven.plugins:maven-plugin-plugin:3.6.0:helpmojo"); + generateHelpMojo.getOutputs().dir(new File(mavenDir, "target/generated-sources/plugin")); + return generateHelpMojo; + } + + private MavenExec configurePluginDescriptorGenerationTasks(Project project, MavenExec generateHelpMojo) { + File pluginDescriptorDir = new File(project.getBuildDir(), "plugin-descriptor"); + SourceSetContainer sourceSets = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets(); + SourceSet mainSourceSet = sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME); + File generatedHelpMojoDir = new File(project.getBuildDir(), "generated/sources/helpMojo"); + project.getTasks().withType(Javadoc.class, + (javadoc) -> ((StandardJavadocDocletOptions) javadoc.getOptions()).addMultilineStringsOption("tag") + .setValue(Arrays.asList("goal:X", "requiresProject:X", "threadSafe:X"))); + FormatHelpMojoSource copyFormattedHelpMojoSource = project.getTasks().create("copyFormattedHelpMojoSource", + FormatHelpMojoSource.class); + copyFormattedHelpMojoSource.setGenerator(generateHelpMojo); + copyFormattedHelpMojoSource.setOutputDir(generatedHelpMojoDir); + mainSourceSet.getAllJava().srcDir(generatedHelpMojoDir); + project.getTasks().getByName(mainSourceSet.getCompileJavaTaskName()).dependsOn(copyFormattedHelpMojoSource); + Copy pluginDescriptorInputs = createCopyPluginDescriptorInputs(project, pluginDescriptorDir, mainSourceSet); + pluginDescriptorInputs.dependsOn(mainSourceSet.getClassesTaskName()); + MavenExec generatePluginDescriptor = createGeneratePluginDescriptor(project, pluginDescriptorDir); + generatePluginDescriptor.dependsOn(pluginDescriptorInputs); + return generatePluginDescriptor; + } + + private Copy createCopyPluginDescriptorInputs(Project project, File destination, SourceSet sourceSet) { + Copy pluginDescriptorInputs = project.getTasks().create("copyPluginDescriptorInputs", Copy.class); + pluginDescriptorInputs.setDestinationDir(destination); + pluginDescriptorInputs.from(new File(project.getProjectDir(), "src/maven/resources/pom.xml"), + (sync) -> sync.filter((input) -> input.replace("{{version}}", project.getVersion().toString()))); + pluginDescriptorInputs.from(sourceSet.getOutput().getClassesDirs(), (sync) -> sync.into("target/classes")); + pluginDescriptorInputs.from(sourceSet.getAllJava().getSrcDirs(), (sync) -> sync.into("src/main/java")); + return pluginDescriptorInputs; + } + + private MavenExec createGeneratePluginDescriptor(Project project, File mavenDir) { + MavenExec generatePluginDescriptor = project.getTasks().create("generatePluginDescriptor", MavenExec.class); + generatePluginDescriptor.args("org.apache.maven.plugins:maven-plugin-plugin:3.6.0:descriptor"); + generatePluginDescriptor.getOutputs().file(new File(mavenDir, "target/classes/META-INF/maven/plugin.xml")); + generatePluginDescriptor.getInputs().dir(new File(mavenDir, "target/classes/org")); + generatePluginDescriptor.setProjectDir(mavenDir); + return generatePluginDescriptor; + } + + private void includeDescriptorInJar(Jar jar, JavaExec generatePluginDescriptor) { + jar.from(generatePluginDescriptor, (copy) -> copy.into("META-INF/maven/")); + jar.dependsOn(generatePluginDescriptor); + } + + private void includeHelpMojoInJar(Jar jar, JavaExec generateHelpMojo) { + jar.from(generateHelpMojo); + jar.dependsOn(generateHelpMojo); + } + + public static class FormatHelpMojoSource extends DefaultTask { + + private Task generator; + + private File outputDir; + + void setGenerator(Task generator) { + this.generator = generator; + getInputs().files(this.generator); + } + + @OutputDirectory + public File getOutputDir() { + return this.outputDir; + } + + void setOutputDir(File outputDir) { + this.outputDir = outputDir; + } + + @TaskAction + void syncAndFormat() { + FileFormatter fileFormatter = new FileFormatter(); + for (File output : this.generator.getOutputs().getFiles()) { + fileFormatter.formatFiles(getProject().fileTree(output), StandardCharsets.UTF_8).forEach((fileEdit) -> { + Path relativePath = output.toPath().relativize(fileEdit.getFile().toPath()); + Path outputLocation = this.outputDir.toPath().resolve(relativePath); + try { + Files.createDirectories(outputLocation.getParent()); + Files.write(outputLocation, fileEdit.getFormattedContent().getBytes(StandardCharsets.UTF_8)); + } + catch (Exception ex) { + throw new TaskExecutionException(this, ex); + } + }); + } + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/PluginXmlParser.java b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/PluginXmlParser.java new file mode 100644 index 00000000000..6269923df2a --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/PluginXmlParser.java @@ -0,0 +1,287 @@ +/* + * Copyright 2019 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.build.mavenplugin; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * A parser for a Maven plugin's {@code plugin.xml} file. + * + * @author Andy Wilkinson + */ +class PluginXmlParser { + + private final XPath xpath; + + PluginXmlParser() { + this.xpath = XPathFactory.newInstance().newXPath(); + } + + Plugin parse(File pluginXml) { + try { + Node root = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(pluginXml); + List mojos = parseMojos(root); + return new Plugin(textAt("//plugin/groupId", root), textAt("//plugin/artifactId", root), + textAt("//plugin/version", root), textAt("//plugin/goalPrefix", root), mojos); + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + private String textAt(String path, Node source) throws XPathExpressionException { + String text = this.xpath.evaluate(path + "/text()", source); + return (text.length() == 0) ? null : text; + } + + private List parseMojos(Node plugin) throws XPathExpressionException { + List mojos = new ArrayList(); + for (Node mojoNode : nodesAt("//plugin/mojos/mojo", plugin)) { + mojos.add(new Mojo(textAt("goal", mojoNode), format(textAt("description", mojoNode)), + parseParameters(mojoNode))); + } + return mojos; + } + + private Iterable nodesAt(String path, Node source) throws XPathExpressionException { + return IterableNodeList.of((NodeList) this.xpath.evaluate(path, source, XPathConstants.NODESET)); + } + + private List parseParameters(Node mojoNode) throws XPathExpressionException { + Map defaultValues = new HashMap<>(); + Map userProperties = new HashMap<>(); + for (Node parameterConfigurationNode : nodesAt("configuration/*", mojoNode)) { + String userProperty = parameterConfigurationNode.getTextContent(); + if (userProperty != null && userProperty.length() > 0) { + userProperties.put(parameterConfigurationNode.getNodeName(), + userProperty.replace("${", "`").replace("}", "`")); + } + Node defaultValueAttribute = parameterConfigurationNode.getAttributes().getNamedItem("default-value"); + if (defaultValueAttribute != null && defaultValueAttribute.getTextContent().length() > 0) { + defaultValues.put(parameterConfigurationNode.getNodeName(), defaultValueAttribute.getTextContent()); + } + } + List parameters = new ArrayList<>(); + for (Node parameterNode : nodesAt("parameters/parameter", mojoNode)) { + parameters.add(parseParameter(parameterNode, defaultValues, userProperties)); + } + return parameters; + } + + private Parameter parseParameter(Node parameterNode, Map defaultValues, + Map userProperties) throws XPathExpressionException { + Parameter parameter = new Parameter(textAt("name", parameterNode), textAt("type", parameterNode), + booleanAt("required", parameterNode), booleanAt("editable", parameterNode), + format(textAt("description", parameterNode)), defaultValues.get(textAt("name", parameterNode)), + userProperties.get(textAt("name", parameterNode)), textAt("since", parameterNode)); + return parameter; + } + + private boolean booleanAt(String path, Node node) throws XPathExpressionException { + return Boolean.valueOf(textAt(path, node)); + } + + private String format(String input) { + return input.replace("", "`").replace("", "`").replace("<", "<").replace(">", ">") + .replace("
", " ").replace("\n", " ").replace(""", "\"").replaceAll("\\{@code (.*?)\\}", "`$1`") + .replaceAll("\\{@link (.*?)\\}", "`$1`").replaceAll("\\{@literal (.*?)\\}", "`$1`") + .replaceAll("(.*?)", "\\$1[\\$2]"); + } + + private static final class IterableNodeList implements Iterable { + + private final NodeList nodeList; + + private IterableNodeList(NodeList nodeList) { + this.nodeList = nodeList; + } + + private static Iterable of(NodeList nodeList) { + return new IterableNodeList(nodeList); + } + + @Override + public Iterator iterator() { + + return new Iterator() { + + private int index = 0; + + @Override + public boolean hasNext() { + return this.index < IterableNodeList.this.nodeList.getLength(); + } + + @Override + public Node next() { + return IterableNodeList.this.nodeList.item(this.index++); + } + + }; + } + + } + + static final class Plugin { + + private final String groupId; + + private final String artifactId; + + private final String version; + + private final String goalPrefix; + + private final List mojos; + + private Plugin(String groupId, String artifactId, String version, String goalPrefix, List mojos) { + this.groupId = groupId; + this.artifactId = artifactId; + this.version = version; + this.goalPrefix = goalPrefix; + this.mojos = mojos; + } + + String getGroupId() { + return this.groupId; + } + + String getArtifactId() { + return this.artifactId; + } + + String getVersion() { + return this.version; + } + + String getGoalPrefix() { + return this.goalPrefix; + } + + List getMojos() { + return this.mojos; + } + + } + + static final class Mojo { + + private final String goal; + + private final String description; + + private final List parameters; + + private Mojo(String goal, String description, List parameters) { + this.goal = goal; + this.description = description; + this.parameters = parameters; + } + + String getGoal() { + return this.goal; + } + + String getDescription() { + return this.description; + } + + List getParameters() { + return this.parameters; + } + + } + + static final class Parameter { + + private final String name; + + private final String type; + + private final boolean required; + + private final boolean editable; + + private final String description; + + private final String defaultValue; + + private final String userProperty; + + private final String since; + + private Parameter(String name, String type, boolean required, boolean editable, String description, + String defaultValue, String userProperty, String since) { + this.name = name; + this.type = type; + this.required = required; + this.editable = editable; + this.description = description; + this.defaultValue = defaultValue; + this.userProperty = userProperty; + this.since = since; + } + + String getName() { + return this.name; + } + + String getType() { + return this.type; + } + + boolean isRequired() { + return this.required; + } + + boolean isEditable() { + return this.editable; + } + + String getDescription() { + return this.description; + } + + String getDefaultValue() { + return this.defaultValue; + } + + String getUserProperty() { + return this.userProperty; + } + + String getSince() { + return this.since; + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/PrepareMavenBinaries.java b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/PrepareMavenBinaries.java new file mode 100644 index 00000000000..e4f18ece6b4 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/PrepareMavenBinaries.java @@ -0,0 +1,70 @@ +/* + * Copyright 2019 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.build.mavenplugin; + +import java.io.File; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.gradle.api.DefaultTask; +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskAction; + +/** + * {@link Task} to make Maven binaries available for integration testing. + * + * @author Andy Wilkinson + */ +public class PrepareMavenBinaries extends DefaultTask { + + private Set versions = new LinkedHashSet<>(); + + private File outputDir; + + @OutputDirectory + public File getOutputDir() { + return this.outputDir; + } + + public void setOutputDir(File outputDir) { + this.outputDir = outputDir; + } + + @Input + public Set getVersions() { + return this.versions; + } + + public void versions(String... versions) { + this.versions.addAll(Arrays.asList(versions)); + } + + @TaskAction + public void prepareBinaries() { + for (String version : this.versions) { + Configuration configuration = getProject().getConfigurations().detachedConfiguration( + getProject().getDependencies().create("org.apache.maven:apache-maven:" + version + ":bin@zip")); + getProject().copy( + (copy) -> copy.into(this.outputDir).from(getProject().zipTree(configuration.getSingleFile()))); + } + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/optional/OptionalDependenciesPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/optional/OptionalDependenciesPlugin.java new file mode 100644 index 00000000000..0f622fcee85 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/optional/OptionalDependenciesPlugin.java @@ -0,0 +1,65 @@ +/* + * Copyright 2012-2020 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.build.optional; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.attributes.Usage; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.javadoc.Javadoc; +import org.gradle.plugins.ide.eclipse.EclipsePlugin; +import org.gradle.plugins.ide.eclipse.model.EclipseModel; + +/** + * A {@code Plugin} that adds support for Maven-style optional dependencies. Creates a new + * {@code optional} configuration. The {@code optional} configuration is part of the + * project's compile and runtime classpath's but does not affect the classpath of + * dependent projects. + * + * @author Andy Wilkinson + */ +public class OptionalDependenciesPlugin implements Plugin { + + /** + * Name of the {@code optional} configuration. + */ + public static final String OPTIONAL_CONFIGURATION_NAME = "optional"; + + @Override + public void apply(Project project) { + Configuration optional = project.getConfigurations().create("optional"); + optional.attributes((attributes) -> attributes.attribute(Usage.USAGE_ATTRIBUTE, + project.getObjects().named(Usage.class, Usage.JAVA_RUNTIME))); + project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> { + SourceSetContainer sourceSets = project.getConvention().getPlugin(JavaPluginConvention.class) + .getSourceSets(); + sourceSets.all((sourceSet) -> { + sourceSet.setCompileClasspath(sourceSet.getCompileClasspath().plus(optional)); + sourceSet.setRuntimeClasspath(sourceSet.getRuntimeClasspath().plus(optional)); + }); + project.getTasks().withType(Javadoc.class) + .all((javadoc) -> javadoc.setClasspath(javadoc.getClasspath().plus(optional))); + }); + project.getPlugins().withType(EclipsePlugin.class, + (eclipePlugin) -> project.getExtensions().getByType(EclipseModel.class) + .classpath((classpath) -> classpath.getPlusConfigurations().add(optional))); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/starters/DocumentStarters.java b/buildSrc/src/main/java/org/springframework/boot/build/starters/DocumentStarters.java new file mode 100644 index 00000000000..a5cdf124d47 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/starters/DocumentStarters.java @@ -0,0 +1,163 @@ +/* + * Copyright 2019 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.build.starters; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.file.FileCollection; +import org.gradle.api.internal.AbstractTask; +import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.util.StringUtils; + +/** + * {@link Task} to document all starter projects. + * + * @author Andy Wilkinson + */ +public class DocumentStarters extends AbstractTask { + + private final Configuration starters; + + private File outputDir; + + public DocumentStarters() { + this.starters = getProject().getConfigurations().create("starters"); + getProject().getGradle().projectsEvaluated((gradle) -> { + gradle.allprojects((project) -> { + if (project.getPlugins().hasPlugin(StarterPlugin.class)) { + Map dependency = new HashMap<>(); + dependency.put("path", project.getPath()); + dependency.put("configuration", "starterMetadata"); + this.starters.getDependencies().add(project.getDependencies().project(dependency)); + } + }); + }); + } + + @OutputDirectory + public File getOutputDir() { + return this.outputDir; + } + + public void setOutputDir(File outputDir) { + this.outputDir = outputDir; + } + + @InputFiles + public FileCollection getStarters() { + return this.starters; + } + + @TaskAction + void documentStarters() { + Set starters = this.starters.getFiles().stream().map(this::loadStarter) + .collect(Collectors.toCollection(TreeSet::new)); + writeTable("application-starters", starters.stream().filter(Starter::isApplication)); + writeTable("production-starters", starters.stream().filter(Starter::isProduction)); + writeTable("technical-starters", starters.stream().filter(Starter::isTechnical)); + } + + private Starter loadStarter(File metadata) { + Properties properties = new Properties(); + try (FileReader reader = new FileReader(metadata)) { + properties.load(reader); + return new Starter(properties.getProperty("name"), properties.getProperty("description"), + StringUtils.commaDelimitedListToSet(properties.getProperty("dependencies"))); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + private void writeTable(String name, Stream starters) { + File output = new File(this.outputDir, name + ".adoc"); + output.getParentFile().mkdirs(); + try (PrintWriter writer = new PrintWriter(new FileWriter(output))) { + writer.println("|==="); + writer.println("| Name | Description"); + starters.forEach((starter) -> { + writer.println(); + writer.printf("| [[%s]]`%s`%n", starter.name, starter.name); + writer.printf("| %s%n", postProcessDescription(starter.description)); + }); + writer.println("|==="); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + private String postProcessDescription(String description) { + return addStarterCrossLinks(description); + } + + private String addStarterCrossLinks(String input) { + return input.replaceAll("(spring-boot-starter[A-Za-z-]*)", "<<$1,`$1`>>"); + } + + private static final class Starter implements Comparable { + + private final String name; + + private final String description; + + private final Set dependencies; + + private Starter(String name, String description, Set dependencies) { + this.name = name; + this.description = description; + this.dependencies = dependencies; + } + + private boolean isProduction() { + return this.name.equals("spring-boot-starter-actuator"); + } + + private boolean isTechnical() { + return !Arrays.asList("spring-boot-starter", "spring-boot-starter-test").contains(this.name) + && !isProduction() && !this.dependencies.contains("spring-boot-starter"); + } + + private boolean isApplication() { + return !isProduction() && !isTechnical(); + } + + @Override + public int compareTo(Starter other) { + return this.name.compareTo(other.name); + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterMetadata.java b/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterMetadata.java new file mode 100644 index 00000000000..75e09c12738 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterMetadata.java @@ -0,0 +1,82 @@ +/* + * Copyright 2012-2020 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.build.starters; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Properties; +import java.util.concurrent.Callable; +import java.util.stream.Collectors; + +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.ResolvedArtifact; +import org.gradle.api.file.FileCollection; +import org.gradle.api.internal.AbstractTask; +import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; + +/** + * A {@link Task} for generating metadata that describes a starter. + * + * @author Andy Wilkinson + */ +public class StarterMetadata extends AbstractTask { + + private Configuration dependencies; + + private File destination; + + public StarterMetadata() { + getInputs().property("name", (Callable) () -> getProject().getName()); + getInputs().property("description", (Callable) () -> getProject().getDescription()); + } + + @InputFiles + public FileCollection getDependencies() { + return this.dependencies; + } + + public void setDependencies(Configuration dependencies) { + this.dependencies = dependencies; + } + + @OutputFile + public File getDestination() { + return this.destination; + } + + public void setDestination(File destination) { + this.destination = destination; + } + + @TaskAction + void generateMetadata() throws IOException { + Properties properties = new Properties(); + properties.setProperty("name", getProject().getName()); + properties.setProperty("description", getProject().getDescription()); + properties.setProperty("dependencies", String.join(",", this.dependencies.getResolvedConfiguration() + .getResolvedArtifacts().stream().map(ResolvedArtifact::getName).collect(Collectors.toSet()))); + this.destination.getParentFile().mkdirs(); + try (FileWriter writer = new FileWriter(this.destination)) { + properties.store(writer, null); + } + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java new file mode 100644 index 00000000000..3ad6a3f714c --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java @@ -0,0 +1,78 @@ +/* + * Copyright 2019 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.build.starters; + +import java.io.File; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.ConfigurationContainer; +import org.gradle.api.plugins.JavaBasePlugin; +import org.gradle.api.plugins.JavaLibraryPlugin; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.PluginContainer; + +import org.springframework.boot.build.ConventionsPlugin; +import org.springframework.boot.build.DeployedPlugin; +import org.springframework.boot.build.classpath.CheckClasspathForConflicts; +import org.springframework.boot.build.classpath.CheckClasspathForProhibitedDependencies; +import org.springframework.util.StringUtils; + +/** + * A {@link Plugin} for a starter project. + * + * @author Andy Wilkinson + */ +public class StarterPlugin implements Plugin { + + @Override + public void apply(Project project) { + PluginContainer plugins = project.getPlugins(); + plugins.apply(DeployedPlugin.class); + plugins.apply(JavaLibraryPlugin.class); + plugins.apply(ConventionsPlugin.class); + StarterMetadata starterMetadata = project.getTasks().create("starterMetadata", StarterMetadata.class); + ConfigurationContainer configurations = project.getConfigurations(); + Configuration runtimeClasspath = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); + starterMetadata.setDependencies(runtimeClasspath); + File destination = new File(project.getBuildDir(), "starter-metadata.properties"); + starterMetadata.setDestination(destination); + configurations.create("starterMetadata"); + project.getArtifacts().add("starterMetadata", project.provider(starterMetadata::getDestination), + (artifact) -> artifact.builtBy(starterMetadata)); + createClasspathConflictsCheck(runtimeClasspath, project); + createProhibitedDependenciesCheck(runtimeClasspath, project); + } + + private void createClasspathConflictsCheck(Configuration classpath, Project project) { + CheckClasspathForConflicts checkClasspathForConflicts = project.getTasks().create( + "check" + StringUtils.capitalize(classpath.getName() + "ForConflicts"), + CheckClasspathForConflicts.class); + checkClasspathForConflicts.setClasspath(classpath); + project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkClasspathForConflicts); + } + + private void createProhibitedDependenciesCheck(Configuration classpath, Project project) { + CheckClasspathForProhibitedDependencies checkClasspathForProhibitedDependencies = project.getTasks().create( + "check" + StringUtils.capitalize(classpath.getName() + "ForProhibitedDependencies"), + CheckClasspathForProhibitedDependencies.class); + checkClasspathForProhibitedDependencies.setClasspath(classpath); + project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkClasspathForProhibitedDependencies); + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/test/IntegrationTestPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/test/IntegrationTestPlugin.java new file mode 100644 index 00000000000..58ac2fb33f1 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/test/IntegrationTestPlugin.java @@ -0,0 +1,82 @@ +/* + * Copyright 2012-2020 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.build.test; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.testing.Test; +import org.gradle.language.base.plugins.LifecycleBasePlugin; +import org.gradle.plugins.ide.eclipse.EclipsePlugin; +import org.gradle.plugins.ide.eclipse.model.EclipseModel; + +/** + * A {@Plugin} to configure integration testing support in a {@link Project}. + * + * @author Andy Wilkinson + */ +public class IntegrationTestPlugin implements Plugin { + + /** + * Name of the {@code intTest} task. + */ + public static String INT_TEST_TASK_NAME = "intTest"; + + /** + * Name of the {@code intTest} source set. + */ + public static String INT_TEST_SOURCE_SET_NAME = "intTest"; + + @Override + public void apply(Project project) { + project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> this.configureIntegrationTesting(project)); + } + + private void configureIntegrationTesting(Project project) { + SourceSet intTestSourceSet = createSourceSet(project); + Test intTest = createTestTask(project, intTestSourceSet); + project.getTasks().getByName(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(intTest); + project.getPlugins().withType(EclipsePlugin.class, (eclipsePlugin) -> { + EclipseModel eclipse = project.getExtensions().getByType(EclipseModel.class); + eclipse.classpath((classpath) -> classpath.getPlusConfigurations().add( + project.getConfigurations().getByName(intTestSourceSet.getRuntimeClasspathConfigurationName()))); + }); + } + + private SourceSet createSourceSet(Project project) { + SourceSetContainer sourceSets = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets(); + SourceSet intTestSourceSet = sourceSets.create(INT_TEST_SOURCE_SET_NAME); + SourceSet main = sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME); + intTestSourceSet.setCompileClasspath(intTestSourceSet.getCompileClasspath().plus(main.getOutput())); + intTestSourceSet.setRuntimeClasspath(intTestSourceSet.getRuntimeClasspath().plus(main.getOutput())); + return intTestSourceSet; + } + + private Test createTestTask(Project project, SourceSet intTestSourceSet) { + Test intTest = project.getTasks().create(INT_TEST_TASK_NAME, Test.class); + intTest.setGroup(LifecycleBasePlugin.VERIFICATION_GROUP); + intTest.setDescription("Runs integration tests."); + intTest.setTestClassesDirs(intTestSourceSet.getOutput().getClassesDirs()); + intTest.setClasspath(intTestSourceSet.getRuntimeClasspath()); + intTest.shouldRunAfter(JavaPlugin.TEST_TASK_NAME); + return intTest; + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/test/autoconfigure/DocumentTestSlices.java b/buildSrc/src/main/java/org/springframework/boot/build/test/autoconfigure/DocumentTestSlices.java new file mode 100644 index 00000000000..6643b9fcf19 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/test/autoconfigure/DocumentTestSlices.java @@ -0,0 +1,129 @@ +/* + * Copyright 2012-2020 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.build.test.autoconfigure; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Properties; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.gradle.api.Task; +import org.gradle.api.file.FileCollection; +import org.gradle.api.internal.AbstractTask; +import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.util.ClassUtils; +import org.springframework.util.StringUtils; + +/** + * {@link Task} used to document test slices. + * + * @author Andy Wilkinson + */ +public class DocumentTestSlices extends AbstractTask { + + private FileCollection testSlices; + + private File outputFile; + + @InputFiles + public FileCollection getTestSlices() { + return this.testSlices; + } + + public void setTestSlices(FileCollection testSlices) { + this.testSlices = testSlices; + } + + @OutputFile + public File getOutputFile() { + return this.outputFile; + } + + public void setOutputFile(File outputFile) { + this.outputFile = outputFile; + } + + @TaskAction + void documentTestSlices() throws IOException { + Set testSlices = readTestSlices(); + writeTable(testSlices); + } + + @SuppressWarnings("unchecked") + private Set readTestSlices() throws IOException { + Set testSlices = new TreeSet<>(); + for (File metadataFile : this.testSlices) { + Properties metadata = new Properties(); + try (Reader reader = new FileReader(metadataFile)) { + metadata.load(reader); + } + for (String name : Collections.list((Enumeration) metadata.propertyNames())) { + testSlices.add(new TestSlice(name, + new TreeSet<>(StringUtils.commaDelimitedListToSet(metadata.getProperty(name))))); + } + } + return testSlices; + } + + private void writeTable(Set testSlices) throws IOException { + this.outputFile.getParentFile().mkdirs(); + try (PrintWriter writer = new PrintWriter(new FileWriter(this.outputFile))) { + writer.println("[cols=\"d,a\"]"); + writer.println("|==="); + writer.println("| Test slice | Imported auto-configuration"); + for (TestSlice testSlice : testSlices) { + writer.println(); + writer.printf("| `@%s`%n", testSlice.className); + writer.println("| "); + for (String importedAutoConfiguration : testSlice.importedAutoConfigurations) { + writer.printf("`%s`%n", importedAutoConfiguration); + } + } + writer.println("|==="); + } + } + + private static final class TestSlice implements Comparable { + + private final String className; + + private final SortedSet importedAutoConfigurations; + + private TestSlice(String className, SortedSet importedAutoConfigurations) { + this.className = ClassUtils.getShortName(className); + this.importedAutoConfigurations = importedAutoConfigurations; + } + + @Override + public int compareTo(TestSlice other) { + return this.className.compareTo(other.className); + } + + } + +} diff --git a/buildSrc/src/main/java/org/springframework/boot/build/test/autoconfigure/TestSliceMetadata.java b/buildSrc/src/main/java/org/springframework/boot/build/test/autoconfigure/TestSliceMetadata.java new file mode 100644 index 00000000000..1a1c5ab9de1 --- /dev/null +++ b/buildSrc/src/main/java/org/springframework/boot/build/test/autoconfigure/TestSliceMetadata.java @@ -0,0 +1,172 @@ +/* + * Copyright 2012-2020 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.build.test.autoconfigure; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Properties; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.concurrent.Callable; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.file.FileCollection; +import org.gradle.api.internal.AbstractTask; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.TaskAction; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.type.AnnotationMetadata; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.core.type.classreading.SimpleMetadataReaderFactory; +import org.springframework.util.StringUtils; + +/** + * A {@link Task} for generating metadata describing a project's test slices. + * + * @author Andy Wilkinson + */ +public class TestSliceMetadata extends AbstractTask { + + private SourceSet sourceSet; + + private File outputFile; + + public TestSliceMetadata() { + getInputs().dir((Callable) () -> this.sourceSet.getOutput().getResourcesDir()); + getInputs().files((Callable) () -> this.sourceSet.getOutput().getClassesDirs()); + } + + public void setSourceSet(SourceSet sourceSet) { + this.sourceSet = sourceSet; + } + + @OutputFile + public File getOutputFile() { + return this.outputFile; + } + + public void setOutputFile(File outputFile) { + this.outputFile = outputFile; + Configuration testSliceMetadata = getProject().getConfigurations().maybeCreate("testSliceMetadata"); + getProject().getArtifacts().add(testSliceMetadata.getName(), + getProject().provider((Callable) this::getOutputFile), (artifact) -> artifact.builtBy(this)); + } + + @TaskAction + void documentTestSlices() throws IOException { + Properties testSlices = readTestSlices(); + getOutputFile().getParentFile().mkdirs(); + try (FileWriter writer = new FileWriter(getOutputFile())) { + testSlices.store(writer, null); + } + } + + private Properties readTestSlices() throws IOException { + Properties testSlices = new Properties(); + try (URLClassLoader classLoader = new URLClassLoader( + StreamSupport.stream(this.sourceSet.getRuntimeClasspath().spliterator(), false).map(this::toURL) + .toArray(URL[]::new))) { + MetadataReaderFactory metadataReaderFactory = new SimpleMetadataReaderFactory(classLoader); + Properties springFactories = readSpringFactories( + new File(this.sourceSet.getOutput().getResourcesDir(), "META-INF/spring.factories")); + for (File classesDir : this.sourceSet.getOutput().getClassesDirs()) { + addTestSlices(testSlices, classesDir, metadataReaderFactory, springFactories); + } + } + return testSlices; + } + + private URL toURL(File file) { + try { + return file.toURI().toURL(); + } + catch (MalformedURLException ex) { + throw new RuntimeException(ex); + } + } + + private Properties readSpringFactories(File file) throws IOException { + Properties springFactories = new Properties(); + try (Reader in = new FileReader(file)) { + springFactories.load(in); + } + return springFactories; + } + + private void addTestSlices(Properties testSlices, File classesDir, MetadataReaderFactory metadataReaderFactory, + Properties springFactories) throws IOException { + try (Stream classes = Files.walk(classesDir.toPath())) { + classes.filter((path) -> path.toString().endsWith("Test.class")) + .map((path) -> getMetadataReader(path, metadataReaderFactory)) + .filter((metadataReader) -> metadataReader.getClassMetadata().isAnnotation()) + .forEach((metadataReader) -> addTestSlice(testSlices, springFactories, metadataReader)); + } + + } + + private MetadataReader getMetadataReader(Path path, MetadataReaderFactory metadataReaderFactory) { + try { + return metadataReaderFactory.getMetadataReader(new FileSystemResource(path)); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + private void addTestSlice(Properties testSlices, Properties springFactories, MetadataReader metadataReader) { + testSlices.setProperty(metadataReader.getClassMetadata().getClassName(), + StringUtils.collectionToCommaDelimitedString( + getImportedAutoConfiguration(springFactories, metadataReader.getAnnotationMetadata()))); + } + + private SortedSet getImportedAutoConfiguration(Properties springFactories, + AnnotationMetadata annotationMetadata) { + Stream importers = findMetaImporters(annotationMetadata); + if (annotationMetadata.isAnnotated("org.springframework.boot.autoconfigure.ImportAutoConfiguration")) { + importers = Stream.concat(importers, Stream.of(annotationMetadata.getClassName())); + } + return importers.flatMap( + (importer) -> StringUtils.commaDelimitedListToSet(springFactories.getProperty(importer)).stream()) + .collect(Collectors.toCollection(TreeSet::new)); + } + + private Stream findMetaImporters(AnnotationMetadata annotationMetadata) { + return annotationMetadata.getAnnotationTypes().stream() + .filter((annotationType) -> isAutoConfigurationImporter(annotationType, annotationMetadata)); + } + + private boolean isAutoConfigurationImporter(String annotationType, AnnotationMetadata metadata) { + return metadata.getMetaAnnotationTypes(annotationType) + .contains("org.springframework.boot.autoconfigure.ImportAutoConfiguration"); + } + +} diff --git a/buildSrc/src/main/resources/effective-bom-settings.xml b/buildSrc/src/main/resources/effective-bom-settings.xml new file mode 100644 index 00000000000..d67307453cf --- /dev/null +++ b/buildSrc/src/main/resources/effective-bom-settings.xml @@ -0,0 +1,24 @@ + + localRepositoryPath + + + spring-repositories + + true + + + + spring-snapshot + https://repo.spring.io/snapshot + + true + + + + spring-milestone + https://repo.spring.io/milestone + + + + + diff --git a/buildSrc/src/test/java/org/springframework/boot/build/assertj/NodeAssert.java b/buildSrc/src/test/java/org/springframework/boot/build/assertj/NodeAssert.java new file mode 100644 index 00000000000..452fafaf6fd --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/assertj/NodeAssert.java @@ -0,0 +1,87 @@ +/* + * Copyright 2012-2020 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.build.assertj; + +import java.io.File; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.assertj.core.api.AbstractAssert; +import org.assertj.core.api.AssertProvider; +import org.assertj.core.api.StringAssert; +import org.w3c.dom.Document; +import org.w3c.dom.Node; + +/** + * AssertJ {@link AssertProvider} for {@link Node} assertions. + * + * @author Andy Wilkinson + */ +public class NodeAssert extends AbstractAssert implements AssertProvider { + + private static final DocumentBuilderFactory FACTORY = DocumentBuilderFactory.newInstance(); + + private final XPathFactory xpathFactory = XPathFactory.newInstance(); + + private final XPath xpath = this.xpathFactory.newXPath(); + + public NodeAssert(File xmlFile) { + this(read(xmlFile)); + } + + public NodeAssert(Node actual) { + super(actual, NodeAssert.class); + } + + private static Document read(File xmlFile) { + try { + return FACTORY.newDocumentBuilder().parse(xmlFile); + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + public NodeAssert nodeAtPath(String xpath) { + try { + return new NodeAssert((Node) this.xpath.evaluate(xpath, this.actual, XPathConstants.NODE)); + } + catch (XPathExpressionException ex) { + throw new RuntimeException(ex); + } + } + + public StringAssert textAtPath(String xpath) { + try { + return new StringAssert( + (String) this.xpath.evaluate(xpath + "/text()", this.actual, XPathConstants.STRING)); + } + catch (XPathExpressionException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public NodeAssert assertThat() { + return this; + } + +} diff --git a/buildSrc/src/test/java/org/springframework/boot/build/bom/BomPluginIntegrationTests.java b/buildSrc/src/test/java/org/springframework/boot/build/bom/BomPluginIntegrationTests.java new file mode 100644 index 00000000000..3bd1c2bb4a8 --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/bom/BomPluginIntegrationTests.java @@ -0,0 +1,193 @@ +/* + * Copyright 2012-2020 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.build.bom; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.util.function.Consumer; + +import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.GradleRunner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import org.springframework.boot.build.DeployedPlugin; +import org.springframework.boot.build.assertj.NodeAssert; +import org.springframework.util.FileCopyUtils; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link BomPlugin}. + * + * @author Andy Wilkinson + */ +public class BomPluginIntegrationTests { + + private File projectDir; + + private File buildFile; + + @BeforeEach + public void setup(@TempDir File projectDir) throws IOException { + this.projectDir = projectDir; + this.buildFile = new File(this.projectDir, "build.gradle"); + } + + @Test + void libraryModulesAreIncludedInDependencyManagementOfGeneratedPom() throws IOException { + try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) { + out.println("plugins {"); + out.println(" id 'org.springframework.boot.bom'"); + out.println("}"); + out.println("bom {"); + out.println(" library('ActiveMQ', '5.15.10') {"); + out.println(" group('org.apache.activemq') {"); + out.println(" modules = ["); + out.println(" 'activemq-amqp',"); + out.println(" 'activemq-blueprint'"); + out.println(" ]"); + out.println(" }"); + out.println(" }"); + out.println("}"); + } + generatePom((pom) -> { + assertThat(pom).textAtPath("//properties/activemq.version").isEqualTo("5.15.10"); + NodeAssert dependency = pom.nodeAtPath("//dependencyManagement/dependencies/dependency[1]"); + assertThat(dependency).textAtPath("groupId").isEqualTo("org.apache.activemq"); + assertThat(dependency).textAtPath("artifactId").isEqualTo("activemq-amqp"); + assertThat(dependency).textAtPath("version").isEqualTo("${activemq.version}"); + assertThat(dependency).textAtPath("scope").isNullOrEmpty(); + assertThat(dependency).textAtPath("type").isNullOrEmpty(); + dependency = pom.nodeAtPath("//dependencyManagement/dependencies/dependency[2]"); + assertThat(dependency).textAtPath("groupId").isEqualTo("org.apache.activemq"); + assertThat(dependency).textAtPath("artifactId").isEqualTo("activemq-blueprint"); + assertThat(dependency).textAtPath("version").isEqualTo("${activemq.version}"); + assertThat(dependency).textAtPath("scope").isNullOrEmpty(); + assertThat(dependency).textAtPath("type").isNullOrEmpty(); + }); + } + + @Test + void libraryPluginsAreIncludedInPluginManagementOfGeneratedPom() throws IOException { + try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) { + out.println("plugins {"); + out.println(" id 'org.springframework.boot.bom'"); + out.println("}"); + out.println("bom {"); + out.println(" library('Flyway', '6.0.8') {"); + out.println(" group('org.flywaydb') {"); + out.println(" plugins = ["); + out.println(" 'flyway-maven-plugin'"); + out.println(" ]"); + out.println(" }"); + out.println(" }"); + out.println("}"); + } + generatePom((pom) -> { + assertThat(pom).textAtPath("//properties/flyway.version").isEqualTo("6.0.8"); + NodeAssert plugin = pom.nodeAtPath("//pluginManagement/plugins/plugin"); + assertThat(plugin).textAtPath("groupId").isEqualTo("org.flywaydb"); + assertThat(plugin).textAtPath("artifactId").isEqualTo("flyway-maven-plugin"); + assertThat(plugin).textAtPath("version").isEqualTo("${flyway.version}"); + assertThat(plugin).textAtPath("scope").isNullOrEmpty(); + assertThat(plugin).textAtPath("type").isNullOrEmpty(); + }); + } + + @Test + void libraryImportsAreIncludedInDependencyManagementOfGeneratedPom() throws Exception { + try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) { + out.println("plugins {"); + out.println(" id 'org.springframework.boot.bom'"); + out.println("}"); + out.println("bom {"); + out.println(" library('Jackson Bom', '2.10.0') {"); + out.println(" group('com.fasterxml.jackson') {"); + out.println(" imports = ["); + out.println(" 'jackson-bom'"); + out.println(" ]"); + out.println(" }"); + out.println(" }"); + out.println("}"); + } + generatePom((pom) -> { + assertThat(pom).textAtPath("//properties/jackson-bom.version").isEqualTo("2.10.0"); + NodeAssert dependency = pom.nodeAtPath("//dependencyManagement/dependencies/dependency"); + assertThat(dependency).textAtPath("groupId").isEqualTo("com.fasterxml.jackson"); + assertThat(dependency).textAtPath("artifactId").isEqualTo("jackson-bom"); + assertThat(dependency).textAtPath("version").isEqualTo("${jackson-bom.version}"); + assertThat(dependency).textAtPath("scope").isEqualTo("import"); + assertThat(dependency).textAtPath("type").isEqualTo("pom"); + }); + } + + @Test + void moduleExclusionsAreIncludedInDependencyManagementOfGeneratedPom() throws IOException { + try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) { + out.println("plugins {"); + out.println(" id 'org.springframework.boot.bom'"); + out.println("}"); + out.println("bom {"); + out.println(" library('MySQL', '8.0.18') {"); + out.println(" group('mysql') {"); + out.println(" modules = ["); + out.println(" 'mysql-connector-java' {"); + out.println(" exclude group: 'com.google.protobuf', module: 'protobuf-java'"); + out.println(" }"); + out.println(" ]"); + out.println(" }"); + out.println(" }"); + out.println("}"); + } + generatePom((pom) -> { + assertThat(pom).textAtPath("//properties/mysql.version").isEqualTo("8.0.18"); + NodeAssert dependency = pom.nodeAtPath("//dependencyManagement/dependencies/dependency"); + assertThat(dependency).textAtPath("groupId").isEqualTo("mysql"); + assertThat(dependency).textAtPath("artifactId").isEqualTo("mysql-connector-java"); + assertThat(dependency).textAtPath("version").isEqualTo("${mysql.version}"); + assertThat(dependency).textAtPath("scope").isNullOrEmpty(); + assertThat(dependency).textAtPath("type").isNullOrEmpty(); + NodeAssert exclusion = dependency.nodeAtPath("exclusions/exclusion"); + assertThat(exclusion).textAtPath("groupId").isEqualTo("com.google.protobuf"); + assertThat(exclusion).textAtPath("artifactId").isEqualTo("protobuf-java"); + }); + } + + private BuildResult runGradle(String... args) { + return GradleRunner.create().withDebug(true).withProjectDir(this.projectDir).withArguments(args) + .withPluginClasspath().build(); + } + + private void generatePom(Consumer consumer) { + runGradle(DeployedPlugin.GENERATE_POM_TASK_NAME, "-s"); + File generatedPomXml = new File(this.projectDir, "build/publications/maven/pom-default.xml"); + try (Reader reader = new FileReader(generatedPomXml)) { + System.out.println(FileCopyUtils.copyToString(reader)); + } + catch (IOException ex) { + + } + assertThat(generatedPomXml).isFile(); + consumer.accept(new NodeAssert(generatedPomXml)); + } + +} diff --git a/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/ArtifactVersionDependencyVersionTests.java b/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/ArtifactVersionDependencyVersionTests.java new file mode 100644 index 00000000000..643baa22199 --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/ArtifactVersionDependencyVersionTests.java @@ -0,0 +1,119 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ArtifactVersionDependencyVersion}. + * + * @author Andy Wilkinson + */ +public class ArtifactVersionDependencyVersionTests { + + @Test + void parseWhenVersionIsNotAMavenVersionShouldReturnNull() { + assertThat(version("1.2.3.1")).isNull(); + } + + @Test + void parseWhenVersionIsAMavenVersionShouldReturnAVersion() { + assertThat(version("1.2.3")).isNotNull(); + } + + @Test + void isNewerThanWhenInputIsOlderMajorShouldReturnTrue() { + assertThat(version("2.1.2").isNewerThan(version("1.9.0"))).isTrue(); + } + + @Test + void isNewerThanWhenInputIsOlderMinorShouldReturnTrue() { + assertThat(version("2.1.2").isNewerThan(version("2.0.2"))).isTrue(); + } + + @Test + void isNewerThanWhenInputIsOlderPatchShouldReturnTrue() { + assertThat(version("2.1.2").isNewerThan(version("2.1.1"))).isTrue(); + } + + @Test + void isNewerThanWhenInputIsNewerMajorShouldReturnFalse() { + assertThat(version("2.1.2").isNewerThan(version("3.2.1"))).isFalse(); + } + + @Test + void isSameMajorAndNewerThanWhenMinorIsOlderShouldReturnTrue() { + assertThat(version("1.10.2").isSameMajorAndNewerThan(version("1.9.0"))).isTrue(); + } + + @Test + void isSameMajorAndNewerThanWhenMajorIsOlderShouldReturnFalse() { + assertThat(version("2.0.2").isSameMajorAndNewerThan(version("1.9.0"))).isFalse(); + } + + @Test + void isSameMajorAndNewerThanWhenPatchIsNewerShouldReturnTrue() { + assertThat(version("2.1.2").isSameMajorAndNewerThan(version("2.1.1"))).isTrue(); + } + + @Test + void isSameMajorAndNewerThanWhenMinorIsNewerShouldReturnFalse() { + assertThat(version("2.1.2").isSameMajorAndNewerThan(version("2.2.1"))).isFalse(); + } + + @Test + void isSameMajorAndNewerThanWhenMajorIsNewerShouldReturnFalse() { + assertThat(version("2.1.2").isSameMajorAndNewerThan(version("3.0.1"))).isFalse(); + } + + @Test + void isSameMinorAndNewerThanWhenPatchIsOlderShouldReturnTrue() { + assertThat(version("1.10.2").isSameMinorAndNewerThan(version("1.10.1"))).isTrue(); + } + + @Test + void isSameMinorAndNewerThanWhenMinorIsOlderShouldReturnFalse() { + assertThat(version("2.1.2").isSameMinorAndNewerThan(version("2.0.1"))).isFalse(); + } + + @Test + void isSameMinorAndNewerThanWhenVersionsAreTheSameShouldReturnFalse() { + assertThat(version("2.1.2").isSameMinorAndNewerThan(version("2.1.2"))).isFalse(); + } + + @Test + void isSameMinorAndNewerThanWhenPatchIsNewerShouldReturnFalse() { + assertThat(version("2.1.2").isSameMinorAndNewerThan(version("2.1.3"))).isFalse(); + } + + @Test + void isSameMinorAndNewerThanWhenMinorIsNewerShouldReturnFalse() { + assertThat(version("2.1.2").isSameMinorAndNewerThan(version("2.0.1"))).isFalse(); + } + + @Test + void isSameMinorAndNewerThanWhenMajorIsNewerShouldReturnFalse() { + assertThat(version("3.1.2").isSameMinorAndNewerThan(version("2.0.1"))).isFalse(); + } + + private ArtifactVersionDependencyVersion version(String version) { + return ArtifactVersionDependencyVersion.parse(version); + } + +} diff --git a/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/DependencyVersionTests.java b/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/DependencyVersionTests.java new file mode 100644 index 00000000000..2e0b16d7f0f --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/DependencyVersionTests.java @@ -0,0 +1,55 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link DependencyVersion}. + * + * @author Andy Wilkinson + */ +public class DependencyVersionTests { + + @Test + void parseWhenValidMavenVersionShouldReturnArtifactVersionDependencyVersion() { + assertThat(DependencyVersion.parse("1.2.3.Final")).isInstanceOf(ArtifactVersionDependencyVersion.class); + } + + @Test + void parseWhenReleaseTrainShouldReturnReleaseTrainDependencyVersion() { + assertThat(DependencyVersion.parse("Ingalls-SR5")).isInstanceOf(ReleaseTrainDependencyVersion.class); + } + + @Test + void parseWhenMavenLikeVersionWithNumericQualifieShouldReturnNumericQualifierDependencyVersion() { + assertThat(DependencyVersion.parse("1.2.3.4")).isInstanceOf(NumericQualifierDependencyVersion.class); + } + + @Test + void parseWhenVersionWithLeadingZeroesShouldReturnLeadingZeroesDependencyVersion() { + assertThat(DependencyVersion.parse("1.4.01")).isInstanceOf(LeadingZeroesDependencyVersion.class); + } + + @Test + void parseWhenVersionWithCombinedPatchAndQualifierShouldReturnCombinedPatchAndQualifierDependencyVersion() { + assertThat(DependencyVersion.parse("4.0.0M4")).isInstanceOf(CombinedPatchAndQualifierDependencyVersion.class); + } + +} diff --git a/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/NumericQualifierDependencyVersionTests.java b/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/NumericQualifierDependencyVersionTests.java new file mode 100644 index 00000000000..5e58d3a99c2 --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/NumericQualifierDependencyVersionTests.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link NumericQualifierDependencyVersion}. + * + * @author Andy Wilkinson + */ +public class NumericQualifierDependencyVersionTests { + + @Test + void isNewerThanOnVersionWithNumericQualifierWhenInputHasNoQualifierShouldReturnTrue() { + assertThat(version("2.9.9.20190806").isNewerThan(DependencyVersion.parse("2.9.9"))).isTrue(); + } + + @Test + void isNewerThanOnVersionWithNumericQualifierWhenInputHasOlderQualifierShouldReturnTrue() { + assertThat(version("2.9.9.20190806").isNewerThan(version("2.9.9.20190805"))).isTrue(); + } + + @Test + void isNewerThanOnVersionWithNumericQualifierWhenInputHasNewerQualifierShouldReturnFalse() { + assertThat(version("2.9.9.20190806").isNewerThan(version("2.9.9.20190807"))).isFalse(); + } + + @Test + void isNewerThanOnVersionWithNumericQualifierWhenInputHasSameQualifierShouldReturnFalse() { + assertThat(version("2.9.9.20190806").isNewerThan(version("2.9.9.20190806"))).isFalse(); + } + + private NumericQualifierDependencyVersion version(String version) { + return NumericQualifierDependencyVersion.parse(version); + } + +} diff --git a/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/ReleaseTrainDependencyVersionTests.java b/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/ReleaseTrainDependencyVersionTests.java new file mode 100644 index 00000000000..6010bfd0750 --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/version/ReleaseTrainDependencyVersionTests.java @@ -0,0 +1,99 @@ +/* + * Copyright 2012-2020 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.build.bom.bomr.version; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ReleaseTrainDependencyVersion}. + * + * @author Andy Wilkinson + */ +public class ReleaseTrainDependencyVersionTests { + + @Test + void parsingOfANonReleaseTrainVersionReturnsNull() { + assertThat(version("5.1.4.RELEASE")).isNull(); + } + + @Test + void parsingOfAReleaseTrainVersionReturnsVersion() { + assertThat(version("Lovelace-SR3")).isNotNull(); + } + + @Test + void isNewerThanWhenReleaseTrainIsNewerShouldReturnTrue() { + assertThat(version("Lovelace-RELEASE").isNewerThan(version("Kay-SR5"))).isTrue(); + } + + @Test + void isNewerThanWhenVersionIsNewerShouldReturnTrue() { + assertThat(version("Kay-SR10").isNewerThan(version("Kay-SR5"))).isTrue(); + } + + @Test + void isNewerThanWhenVersionIsOlderShouldReturnFalse() { + assertThat(version("Kay-RELEASE").isNewerThan(version("Kay-SR5"))).isFalse(); + } + + @Test + void isNewerThanWhenReleaseTrainIsOlderShouldReturnFalse() { + assertThat(version("Ingalls-RELEASE").isNewerThan(version("Kay-SR5"))).isFalse(); + } + + @Test + void isSameMajorAndNewerWhenWhenReleaseTrainIsNewerShouldReturnTrue() { + assertThat(version("Lovelace-RELEASE").isSameMajorAndNewerThan(version("Kay-SR5"))).isTrue(); + } + + @Test + void isSameMajorAndNewerThanWhenReleaseTrainIsOlderShouldReturnFalse() { + assertThat(version("Ingalls-RELEASE").isSameMajorAndNewerThan(version("Kay-SR5"))).isFalse(); + } + + @Test + void isSameMajorAndNewerThanWhenVersionIsNewerShouldReturnTrue() { + assertThat(version("Kay-SR6").isSameMajorAndNewerThan(version("Kay-SR5"))).isTrue(); + } + + @Test + void isSameMinorAndNewerThanWhenReleaseTrainIsNewerShouldReturnFalse() { + assertThat(version("Lovelace-RELEASE").isSameMinorAndNewerThan(version("Kay-SR5"))).isFalse(); + } + + @Test + void isSameMinorAndNewerThanWhenReleaseTrainIsTheSameAndVersionIsNewerShouldReturnTrue() { + assertThat(version("Kay-SR6").isSameMinorAndNewerThan(version("Kay-SR5"))).isTrue(); + } + + @Test + void isSameMinorAndNewerThanWhenReleaseTrainAndVersionAreTheSameShouldReturnFalse() { + assertThat(version("Kay-SR6").isSameMinorAndNewerThan(version("Kay-SR6"))).isFalse(); + } + + @Test + void isSameMinorAndNewerThanWhenReleaseTrainIsTheSameAndVersionIsOlderShouldReturnFalse() { + assertThat(version("Kay-SR6").isSameMinorAndNewerThan(version("Kay-SR7"))).isFalse(); + } + + private static ReleaseTrainDependencyVersion version(String input) { + return ReleaseTrainDependencyVersion.parse(input); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/CompoundConfigurationTableEntryTests.java b/buildSrc/src/test/java/org/springframework/boot/build/context/properties/CompoundConfigurationTableEntryTests.java similarity index 65% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/CompoundConfigurationTableEntryTests.java rename to buildSrc/src/test/java/org/springframework/boot/build/context/properties/CompoundConfigurationTableEntryTests.java index 0e06b595099..2f229b93b75 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/CompoundConfigurationTableEntryTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/context/properties/CompoundConfigurationTableEntryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,12 +14,10 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; import org.junit.jupiter.api.Test; -import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; - import static org.assertj.core.api.Assertions.assertThat; /** @@ -27,21 +25,15 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Brian Clozel */ -class CompoundConfigurationTableEntryTests { +public class CompoundConfigurationTableEntryTests { private static String NEWLINE = System.lineSeparator(); @Test void simpleProperty() { - ConfigurationMetadataProperty firstProp = new ConfigurationMetadataProperty(); - firstProp.setId("spring.test.first"); - firstProp.setType("java.lang.String"); - ConfigurationMetadataProperty secondProp = new ConfigurationMetadataProperty(); - secondProp.setId("spring.test.second"); - secondProp.setType("java.lang.String"); - ConfigurationMetadataProperty thirdProp = new ConfigurationMetadataProperty(); - thirdProp.setId("spring.test.third"); - thirdProp.setType("java.lang.String"); + ConfigurationProperty firstProp = new ConfigurationProperty("spring.test.first", "java.lang.String"); + ConfigurationProperty secondProp = new ConfigurationProperty("spring.test.second", "java.lang.String"); + ConfigurationProperty thirdProp = new ConfigurationProperty("spring.test.third", "java.lang.String"); CompoundConfigurationTableEntry entry = new CompoundConfigurationTableEntry("spring.test", "This is a description."); entry.addConfigurationKeys(firstProp, secondProp, thirdProp); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/ConfigurationTableTests.java b/buildSrc/src/test/java/org/springframework/boot/build/context/properties/ConfigurationTableTests.java similarity index 67% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/ConfigurationTableTests.java rename to buildSrc/src/test/java/org/springframework/boot/build/context/properties/ConfigurationTableTests.java index 2b15a476758..c757c73f16e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/ConfigurationTableTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/context/properties/ConfigurationTableTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,12 +14,10 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; import org.junit.jupiter.api.Test; -import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; - import static org.assertj.core.api.Assertions.assertThat; /** @@ -27,23 +25,17 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Brian Clozel */ -class ConfigurationTableTests { +public class ConfigurationTableTests { private static String NEWLINE = System.lineSeparator(); @Test void simpleTable() { ConfigurationTable table = new ConfigurationTable("test"); - ConfigurationMetadataProperty first = new ConfigurationMetadataProperty(); - first.setId("spring.test.prop"); - first.setDefaultValue("something"); - first.setDescription("This is a description."); - first.setType("java.lang.String"); - ConfigurationMetadataProperty second = new ConfigurationMetadataProperty(); - second.setId("spring.test.other"); - second.setDefaultValue("other value"); - second.setDescription("This is another description."); - second.setType("java.lang.String"); + ConfigurationProperty first = new ConfigurationProperty("spring.test.prop", "java.lang.String", "something", + "This is a description.", false); + ConfigurationProperty second = new ConfigurationProperty("spring.test.other", "java.lang.String", "other value", + "This is another description.", false); table.addEntry(new SingleConfigurationTableEntry(first)); table.addEntry(new SingleConfigurationTableEntry(second)); assertThat(table.toAsciidocTable()).isEqualTo("[cols=\"1,1,2\", options=\"header\"]" + NEWLINE + "|===" diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/SingleConfigurationTableEntryTests.java b/buildSrc/src/test/java/org/springframework/boot/build/context/properties/SingleConfigurationTableEntryTests.java similarity index 63% rename from spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/SingleConfigurationTableEntryTests.java rename to buildSrc/src/test/java/org/springframework/boot/build/context/properties/SingleConfigurationTableEntryTests.java index 013320c729b..615cdca6aee 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/test/java/org/springframework/boot/configurationdocs/SingleConfigurationTableEntryTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/context/properties/SingleConfigurationTableEntryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -14,12 +14,10 @@ * limitations under the License. */ -package org.springframework.boot.configurationdocs; +package org.springframework.boot.build.context.properties; import org.junit.jupiter.api.Test; -import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; - import static org.assertj.core.api.Assertions.assertThat; /** @@ -27,17 +25,14 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Brian Clozel */ -class SingleConfigurationTableEntryTests { +public class SingleConfigurationTableEntryTests { private static String NEWLINE = System.lineSeparator(); @Test void simpleProperty() { - ConfigurationMetadataProperty property = new ConfigurationMetadataProperty(); - property.setId("spring.test.prop"); - property.setDefaultValue("something"); - property.setDescription("This is a description."); - property.setType("java.lang.String"); + ConfigurationProperty property = new ConfigurationProperty("spring.test.prop", "java.lang.String", "something", + "This is a description.", false); SingleConfigurationTableEntry entry = new SingleConfigurationTableEntry(property); AsciidocBuilder builder = new AsciidocBuilder(); entry.write(builder); @@ -47,10 +42,8 @@ class SingleConfigurationTableEntryTests { @Test void noDefaultValue() { - ConfigurationMetadataProperty property = new ConfigurationMetadataProperty(); - property.setId("spring.test.prop"); - property.setDescription("This is a description."); - property.setType("java.lang.String"); + ConfigurationProperty property = new ConfigurationProperty("spring.test.prop", "java.lang.String", null, + "This is a description.", false); SingleConfigurationTableEntry entry = new SingleConfigurationTableEntry(property); AsciidocBuilder builder = new AsciidocBuilder(); entry.write(builder); @@ -60,11 +53,8 @@ class SingleConfigurationTableEntryTests { @Test void defaultValueWithPipes() { - ConfigurationMetadataProperty property = new ConfigurationMetadataProperty(); - property.setId("spring.test.prop"); - property.setDefaultValue("first|second"); - property.setDescription("This is a description."); - property.setType("java.lang.String"); + ConfigurationProperty property = new ConfigurationProperty("spring.test.prop", "java.lang.String", + "first|second", "This is a description.", false); SingleConfigurationTableEntry entry = new SingleConfigurationTableEntry(property); AsciidocBuilder builder = new AsciidocBuilder(); entry.write(builder); @@ -74,11 +64,8 @@ class SingleConfigurationTableEntryTests { @Test void defaultValueWithBackslash() { - ConfigurationMetadataProperty property = new ConfigurationMetadataProperty(); - property.setId("spring.test.prop"); - property.setDefaultValue("first\\second"); - property.setDescription("This is a description."); - property.setType("java.lang.String"); + ConfigurationProperty property = new ConfigurationProperty("spring.test.prop", "java.lang.String", + "first\\second", "This is a description.", false); SingleConfigurationTableEntry entry = new SingleConfigurationTableEntry(property); AsciidocBuilder builder = new AsciidocBuilder(); entry.write(builder); @@ -88,10 +75,8 @@ class SingleConfigurationTableEntryTests { @Test void descriptionWithPipe() { - ConfigurationMetadataProperty property = new ConfigurationMetadataProperty(); - property.setId("spring.test.prop"); - property.setDescription("This is a description with a | pipe."); - property.setType("java.lang.String"); + ConfigurationProperty property = new ConfigurationProperty("spring.test.prop", "java.lang.String", null, + "This is a description with a | pipe.", false); SingleConfigurationTableEntry entry = new SingleConfigurationTableEntry(property); AsciidocBuilder builder = new AsciidocBuilder(); entry.write(builder); @@ -101,10 +86,8 @@ class SingleConfigurationTableEntryTests { @Test void mapProperty() { - ConfigurationMetadataProperty property = new ConfigurationMetadataProperty(); - property.setId("spring.test.prop"); - property.setDescription("This is a description."); - property.setType("java.util.Map"); + ConfigurationProperty property = new ConfigurationProperty("spring.test.prop", + "java.util.Map", null, "This is a description.", false); SingleConfigurationTableEntry entry = new SingleConfigurationTableEntry(property); AsciidocBuilder builder = new AsciidocBuilder(); entry.write(builder); @@ -115,11 +98,8 @@ class SingleConfigurationTableEntryTests { @Test void listProperty() { String[] defaultValue = new String[] { "first", "second", "third" }; - ConfigurationMetadataProperty property = new ConfigurationMetadataProperty(); - property.setId("spring.test.prop"); - property.setDescription("This is a description."); - property.setType("java.util.List"); - property.setDefaultValue(defaultValue); + ConfigurationProperty property = new ConfigurationProperty("spring.test.prop", + "java.util.List", defaultValue, "This is a description.", false); SingleConfigurationTableEntry entry = new SingleConfigurationTableEntry(property); AsciidocBuilder builder = new AsciidocBuilder(); entry.write(builder); diff --git a/buildSrc/src/test/java/org/springframework/boot/build/log4j2/ReproduciblePluginsDatActionTests.java b/buildSrc/src/test/java/org/springframework/boot/build/log4j2/ReproduciblePluginsDatActionTests.java new file mode 100644 index 00000000000..f482f5353e9 --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/log4j2/ReproduciblePluginsDatActionTests.java @@ -0,0 +1,80 @@ +/* + * Copyright 2019 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.build.log4j2; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import org.apache.logging.log4j.core.config.plugins.processor.PluginCache; +import org.apache.logging.log4j.core.config.plugins.processor.PluginEntry; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ReproducibleLog4j2PluginsDatAction} + * + * @author Andy Wilkinson + */ +public class ReproduciblePluginsDatActionTests { + + @Test + void postProcessingOrdersCategoriesAndPlugins() throws IOException { + Path datFile = Files.createTempFile("Log4j2Plugins", "dat"); + try { + write(datFile); + PluginCache cache = new PluginCache(); + cache.loadCacheFiles(new Vector<>(Arrays.asList(datFile.toUri().toURL())).elements()); + assertThat(cache.getAllCategories().keySet()).containsExactly("one", "two"); + assertThat(cache.getCategory("one").keySet()).containsExactly("alpha", "bravo", "charlie"); + assertThat(cache.getCategory("two").keySet()).containsExactly("delta", "echo", "foxtrot"); + } + finally { + Files.delete(datFile); + } + } + + private void write(Path datFile) throws IOException { + PluginCache cache = new PluginCache(); + createCategory(cache, "two", Arrays.asList("delta", "foxtrot", "echo")); + createCategory(cache, "one", Arrays.asList("bravo", "alpha", "charlie")); + try (OutputStream output = new FileOutputStream(datFile.toFile())) { + cache.writeCache(output); + new ReproducibleLog4j2PluginsDatAction().postProcess(datFile.toFile()); + } + } + + private void createCategory(PluginCache cache, String categoryName, List entryNames) { + Map category = cache.getCategory(categoryName); + for (String entryName : entryNames) { + PluginEntry entry = new PluginEntry(); + entry.setKey(entryName); + entry.setClassName("com.example.Plugin"); + entry.setName("name"); + entry.setCategory(categoryName); + category.put(entryName, entry); + } + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/ExampleController.java b/buildSrc/src/test/java/org/springframework/boot/build/mavenplugin/PluginXmlParserTests.java similarity index 52% rename from spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/ExampleController.java rename to buildSrc/src/test/java/org/springframework/boot/build/mavenplugin/PluginXmlParserTests.java index 6c0cbe3ca0b..b5a4f838204 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/ExampleController.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/mavenplugin/PluginXmlParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2019 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. @@ -14,24 +14,27 @@ * limitations under the License. */ -package org.springframework.boot.load.it.war; +package org.springframework.boot.build.mavenplugin; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import java.io.File; + +import org.junit.jupiter.api.Test; + +import org.springframework.boot.build.mavenplugin.PluginXmlParser.Plugin; /** - * Simple example Spring MVC Controller. + * Tests for {@link PluginXmlParser}. * - * @author Phillip Webb + * @author Andy Wilkinson */ -@Controller -public class ExampleController { +public class PluginXmlParserTests { - @RequestMapping("/") - @ResponseBody - public String helloWorld() { - return "Hello Embedded WAR World!"; + private final PluginXmlParser parser = new PluginXmlParser(); + + @Test + void dunno() { + Plugin plugin = this.parser.parse(new File("src/test/resources/plugin.xml")); + System.out.println(plugin); } } diff --git a/buildSrc/src/test/java/org/springframework/boot/build/optional/OptionalDependenciesPluginIntegrationTests.java b/buildSrc/src/test/java/org/springframework/boot/build/optional/OptionalDependenciesPluginIntegrationTests.java new file mode 100644 index 00000000000..d5585ee9e6c --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/optional/OptionalDependenciesPluginIntegrationTests.java @@ -0,0 +1,110 @@ +/* + * Copyright 2012-2020 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.build.optional; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; + +import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.GradleRunner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for {@link OptionalDependenciesPlugin}. + * + * @author Andy Wilkinson + */ +public class OptionalDependenciesPluginIntegrationTests { + + private File projectDir; + + private File buildFile; + + @BeforeEach + public void setup(@TempDir File projectDir) throws IOException { + this.projectDir = projectDir; + this.buildFile = new File(this.projectDir, "build.gradle"); + } + + @Test + void optionalConfigurationIsCreated() throws IOException { + try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) { + out.println("plugins { id 'org.springframework.boot.optional-dependencies' }"); + out.println("task printConfigurations {"); + out.println(" doLast {"); + out.println(" configurations.all { println it.name }"); + out.println(" }"); + out.println("}"); + } + BuildResult buildResult = runGradle("printConfigurations"); + assertThat(buildResult.getOutput()).contains("optional"); + } + + @Test + void optionalDependenciesAreAddedToMainSourceSetsCompileClasspath() throws IOException { + optionalDependenciesAreAddedToSourceSetClasspath("main", "compileClasspath"); + } + + @Test + void optionalDependenciesAreAddedToMainSourceSetsRuntimeClasspath() throws IOException { + optionalDependenciesAreAddedToSourceSetClasspath("main", "runtimeClasspath"); + } + + @Test + void optionalDependenciesAreAddedToTestSourceSetsCompileClasspath() throws IOException { + optionalDependenciesAreAddedToSourceSetClasspath("test", "compileClasspath"); + } + + @Test + void optionalDependenciesAreAddedToTestSourceSetsRuntimeClasspath() throws IOException { + optionalDependenciesAreAddedToSourceSetClasspath("test", "runtimeClasspath"); + } + + public void optionalDependenciesAreAddedToSourceSetClasspath(String sourceSet, String classpath) + throws IOException { + try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) { + out.println("plugins {"); + out.println(" id 'org.springframework.boot.optional-dependencies'"); + out.println(" id 'java'"); + out.println("}"); + out.println("repositories {"); + out.println(" mavenCentral()"); + out.println("}"); + out.println("dependencies {"); + out.println(" optional 'org.springframework:spring-jcl:5.1.2.RELEASE'"); + out.println("}"); + out.println("task printClasspath {"); + out.println(" doLast {"); + out.println(" println sourceSets." + sourceSet + "." + classpath + ".files"); + out.println(" }"); + out.println("}"); + } + BuildResult buildResult = runGradle("printClasspath"); + assertThat(buildResult.getOutput()).contains("spring-jcl"); + } + + private BuildResult runGradle(String... args) { + return GradleRunner.create().withProjectDir(this.projectDir).withArguments(args).withPluginClasspath().build(); + } + +} diff --git a/buildSrc/src/test/resources/plugin.xml b/buildSrc/src/test/resources/plugin.xml new file mode 100644 index 00000000000..f9464b5a5dd --- /dev/null +++ b/buildSrc/src/test/resources/plugin.xml @@ -0,0 +1,911 @@ + + + + + + Spring Boot Maven Plugin + + org.springframework.boot + spring-boot-maven-plugin + 2.2.0.GRADLE-SNAPSHOT + spring-boot + false + true + + + build-info + Generate a {@code build-info.properties} file based the content of the current +{@link MavenProject}. + false + true + false + false + false + true + generate-resources + org.springframework.boot.maven.BuildInfoMojo + java + per-lookup + once-per-session + 1.4.0 + true + + + additionalProperties + java.util.Map + false + true + Additional properties to store in the build-info.properties. Each entry is prefixed +by {@code build.} in the generated build-info.properties. + + + outputFile + java.io.File + false + true + The location of the generated build-info.properties. + + + project + org.apache.maven.project.MavenProject + true + false + The Maven project. + + + session + org.apache.maven.execution.MavenSession + true + false + The Maven session. + + + time + java.lang.String + 2.2.0 + false + true + The value used for the {@code build.time} property in a form suitable for +{@link Instant#parse(CharSequence)}. Defaults to {@code session.request.startTime}. +To disable the {@code build.time} property entirely, use {@code 'off'}. + + + + + + + + + + org.sonatype.plexus.build.incremental.BuildContext + buildContext + + + + + help + Display help information on spring-boot-maven-plugin.<br> +Call <code>mvn spring-boot:help -Ddetail=true -Dgoal=&lt;goal-name&gt;</code> to display parameter details. + false + false + false + false + false + true + org.springframework.boot.maven.HelpMojo + java + per-lookup + once-per-session + true + + + detail + boolean + false + true + If <code>true</code>, display all settable properties for each goal. + + + goal + java.lang.String + false + true + The name of the goal for which to show help. If unspecified, all goals will be displayed. + + + indentSize + int + false + true + The number of spaces per indentation level, should be positive. + + + lineLength + int + false + true + The maximum length of a display line, should be positive. + + + + ${detail} + ${goal} + ${indentSize} + ${lineLength} + + + + repackage + Repackages existing JAR and WAR archives so that they can be executed from the command +line using {@literal java -jar}. With <code>layout=NONE</code> can also be used simply +to package a JAR with nested dependencies (and no main class, so not executable). + compile+runtime + false + true + false + false + false + true + package + org.springframework.boot.maven.RepackageMojo + java + per-lookup + once-per-session + 1.0.0 + compile+runtime + true + + + attach + boolean + 1.4.0 + false + true + Attach the repackaged archive to be installed and deployed. + + + classifier + java.lang.String + 1.0.0 + false + true + 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 <a href= +"https://maven.apache.org/plugins/maven-deploy-plugin/examples/deploying-with-classifiers.html" +>the Maven documentation for more details</a>. + + + embeddedLaunchScript + java.io.File + 1.3.0 + false + true + The embedded launch script to prepend to the front of the jar if it is fully +executable. If not specified the 'Spring Boot' default script will be used. + + + embeddedLaunchScriptProperties + java.util.Properties + 1.3.0 + false + true + Properties that should be expanded in the embedded launch script. + + + excludeDevtools + boolean + 1.3.0 + false + true + Exclude Spring Boot devtools from the repackaged archive. + + + excludeGroupIds + java.lang.String + 1.1.0 + false + true + Comma separated list of groupId names to exclude (exact match). + + + excludes + java.util.List + 1.1.0 + false + true + Collection of artifact definitions to exclude. The {@link Exclude} element defines +a {@code groupId} and {@code artifactId} mandatory properties and an optional +{@code classifier} property. + + + executable + boolean + 1.3.0 + false + true + Make a fully executable jar for *nix machines by prepending a launch script to the +jar. +<p> +Currently, some tools do not accept this format so you may not always be able to +use this technique. For example, {@code 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 +{@code java -jar} or deploying it to a servlet container. + + + finalName + java.lang.String + 1.0.0 + false + false + Name of the generated archive. + + + includeSystemScope + boolean + 1.4.0 + false + true + Include system scoped dependencies. + + + includes + java.util.List + 1.2.0 + false + true + Collection of artifact definitions to include. The {@link Include} element defines +a {@code groupId} and {@code artifactId} mandatory properties and an optional +{@code classifier} property. + + + layout + org.springframework.boot.maven.RepackageMojo$LayoutType + 1.0.0 + false + true + The type of archive (which corresponds to how the dependencies are laid out inside +it). Possible values are JAR, WAR, ZIP, DIR, NONE. Defaults to a guess based on the +archive type. + + + layoutFactory + org.springframework.boot.loader.tools.LayoutFactory + 1.5.0 + false + true + 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. + + + mainClass + java.lang.String + 1.0.0 + false + true + The name of the main class. If not specified the first compiled class found that +contains a 'main' method will be used. + + + outputDirectory + java.io.File + 1.0.0 + true + true + Directory containing the generated archive. + + + project + org.apache.maven.project.MavenProject + 1.0.0 + true + false + The Maven project. + + + requiresUnpack + java.util.List + 1.1.0 + false + true + A list of the libraries that must be unpacked from fat jars in order to run. +Specify each library as a {@code <dependency>} with a {@code <groupId>} and a +{@code <artifactId>} and they will be unpacked at runtime. + + + skip + boolean + 1.2.0 + false + true + Skip the execution. + + + + + ${spring-boot.repackage.excludeDevtools} + ${spring-boot.excludeGroupIds} + ${spring-boot.excludes} + + + + ${spring-boot.includes} + ${spring-boot.repackage.layout} + + + ${spring-boot.repackage.skip} + + + + org.apache.maven.project.MavenProjectHelper + projectHelper + + + + + run + Run an executable archive application. + test + false + true + false + false + false + true + validate + test-compile + org.springframework.boot.maven.RunMojo + java + per-lookup + once-per-session + 1.0.0 + false + + + addResources + boolean + 1.0.0 + false + true + Add maven resources to the classpath directly, this allows live in-place editing of +resources. Duplicate resources are removed from {@code target/classes} to prevent +them to appear twice if {@code ClassLoader.getResources()} is called. Please +consider adding {@code spring-boot-devtools} to your project instead as it provides +this feature and many more. + + + agent + java.io.File[] + 1.0.0 + since 2.2.0 in favor of {@code agents} + false + true + Path to agent jar. NOTE: a forked process is required to use this feature. + + + agents + java.io.File[] + 2.2.0 + false + true + Path to agent jars. NOTE: a forked process is required to use this feature. + + + arguments + java.lang.String[] + 1.0.0 + false + true + Arguments that should be passed to the application. On command line use commas to +separate multiple arguments. + + + classesDirectory + java.io.File + 1.0.0 + true + true + Directory containing the classes and resource files that should be packaged into +the archive. + + + environmentVariables + java.util.Map + 2.1.0 + false + true + List of Environment variables that should be associated with the forked process +used to run the application. NOTE: a forked process is required to use this +feature. + + + excludeGroupIds + java.lang.String + 1.1.0 + false + true + Comma separated list of groupId names to exclude (exact match). + + + excludes + java.util.List + 1.1.0 + false + true + Collection of artifact definitions to exclude. The {@link Exclude} element defines +a {@code groupId} and {@code artifactId} mandatory properties and an optional +{@code classifier} property. + + + folders + java.lang.String[] + 1.0.0 + false + true + Additional folders besides the classes directory that should be added to the +classpath. + + + fork + boolean + 1.2.0 + false + true + Flag to indicate if the run processes should be forked. Disabling forking will +disable some features such as an agent, custom JVM arguments, devtools or +specifying the working directory to use. + + + includes + java.util.List + 1.2.0 + false + true + Collection of artifact definitions to include. The {@link Include} element defines +a {@code groupId} and {@code artifactId} mandatory properties and an optional +{@code classifier} property. + + + jvmArguments + java.lang.String + 1.1.0 + false + true + JVM arguments that should be associated with the forked process used to run the +application. On command line, make sure to wrap multiple values between quotes. +NOTE: a forked process is required to use this feature. + + + mainClass + java.lang.String + 1.0.0 + false + true + The name of the main class. If not specified the first compiled class found that +contains a 'main' method will be used. + + + noverify + boolean + 1.0.0 + false + true + Flag to say that the agent requires -noverify. + + + optimizedLaunch + boolean + 2.2.0 + false + true + Whether the JVM's launch should be optimized. + + + profiles + java.lang.String[] + 1.3.0 + false + true + The spring profiles to activate. Convenience shortcut of specifying the +'spring.profiles.active' argument. On command line use commas to separate multiple +profiles. + + + project + org.apache.maven.project.MavenProject + 1.0.0 + true + false + The Maven project. + + + skip + boolean + 1.3.2 + false + true + Skip the execution. + + + systemPropertyVariables + java.util.Map + 2.1.0 + false + true + List of JVM system properties to pass to the process. NOTE: a forked process is +required to use this feature. + + + useTestClasspath + java.lang.Boolean + 1.3.0 + false + true + Flag to include the test classpath when running. + + + workingDirectory + java.io.File + 1.5.0 + false + true + Current working directory to use for the application. If not specified, basedir +will be used. NOTE: a forked process is required to use this feature. + + + + ${spring-boot.run.addResources} + ${spring-boot.run.agent} + ${spring-boot.run.agents} + ${spring-boot.run.arguments} + + ${spring-boot.excludeGroupIds} + ${spring-boot.excludes} + ${spring-boot.run.folders} + ${spring-boot.run.fork} + ${spring-boot.includes} + ${spring-boot.run.jvmArguments} + ${spring-boot.run.main-class} + ${spring-boot.run.noverify} + ${spring-boot.run.optimizedLaunch} + ${spring-boot.run.profiles} + + ${spring-boot.run.skip} + ${spring-boot.run.useTestClasspath} + ${spring-boot.run.workingDirectory} + + + + start + Start a spring application. Contrary to the {@code run} goal, this does not block and +allows other goal to operate on the application. This goal is typically used in +integration test scenario where the application is started before a test suite and +stopped after. + test + false + true + false + false + false + true + pre-integration-test + org.springframework.boot.maven.StartMojo + java + per-lookup + once-per-session + 1.3.0 + false + + + addResources + boolean + 1.0.0 + false + true + Add maven resources to the classpath directly, this allows live in-place editing of +resources. Duplicate resources are removed from {@code target/classes} to prevent +them to appear twice if {@code ClassLoader.getResources()} is called. Please +consider adding {@code spring-boot-devtools} to your project instead as it provides +this feature and many more. + + + agent + java.io.File[] + 1.0.0 + since 2.2.0 in favor of {@code agents} + false + true + Path to agent jar. NOTE: a forked process is required to use this feature. + + + agents + java.io.File[] + 2.2.0 + false + true + Path to agent jars. NOTE: a forked process is required to use this feature. + + + arguments + java.lang.String[] + 1.0.0 + false + true + Arguments that should be passed to the application. On command line use commas to +separate multiple arguments. + + + classesDirectory + java.io.File + 1.0.0 + true + true + Directory containing the classes and resource files that should be packaged into +the archive. + + + environmentVariables + java.util.Map + 2.1.0 + false + true + List of Environment variables that should be associated with the forked process +used to run the application. NOTE: a forked process is required to use this +feature. + + + excludeGroupIds + java.lang.String + 1.1.0 + false + true + Comma separated list of groupId names to exclude (exact match). + + + excludes + java.util.List + 1.1.0 + false + true + Collection of artifact definitions to exclude. The {@link Exclude} element defines +a {@code groupId} and {@code artifactId} mandatory properties and an optional +{@code classifier} property. + + + folders + java.lang.String[] + 1.0.0 + false + true + Additional folders besides the classes directory that should be added to the +classpath. + + + fork + boolean + 1.2.0 + false + true + Flag to indicate if the run processes should be forked. Disabling forking will +disable some features such as an agent, custom JVM arguments, devtools or +specifying the working directory to use. + + + includes + java.util.List + 1.2.0 + false + true + Collection of artifact definitions to include. The {@link Include} element defines +a {@code groupId} and {@code artifactId} mandatory properties and an optional +{@code classifier} property. + + + jmxName + java.lang.String + false + true + The JMX name of the automatically deployed MBean managing the lifecycle of the +spring application. + + + jmxPort + int + false + true + The port to use to expose the platform MBeanServer if the application is forked. + + + jvmArguments + java.lang.String + 1.1.0 + false + true + JVM arguments that should be associated with the forked process used to run the +application. On command line, make sure to wrap multiple values between quotes. +NOTE: a forked process is required to use this feature. + + + mainClass + java.lang.String + 1.0.0 + false + true + The name of the main class. If not specified the first compiled class found that +contains a 'main' method will be used. + + + maxAttempts + int + false + true + The maximum number of attempts to check if the spring application is ready. +Combined with the "wait" argument, this gives a global timeout value (30 sec by +default) + + + noverify + boolean + 1.0.0 + false + true + Flag to say that the agent requires -noverify. + + + profiles + java.lang.String[] + 1.3.0 + false + true + The spring profiles to activate. Convenience shortcut of specifying the +'spring.profiles.active' argument. On command line use commas to separate multiple +profiles. + + + project + org.apache.maven.project.MavenProject + 1.0.0 + true + false + The Maven project. + + + skip + boolean + 1.3.2 + false + true + Skip the execution. + + + systemPropertyVariables + java.util.Map + 2.1.0 + false + true + List of JVM system properties to pass to the process. NOTE: a forked process is +required to use this feature. + + + useTestClasspath + java.lang.Boolean + 1.3.0 + false + true + Flag to include the test classpath when running. + + + wait + long + false + true + The number of milli-seconds to wait between each attempt to check if the spring +application is ready. + + + workingDirectory + java.io.File + 1.5.0 + false + true + Current working directory to use for the application. If not specified, basedir +will be used. NOTE: a forked process is required to use this feature. + + + + ${spring-boot.run.addResources} + ${spring-boot.run.agent} + ${spring-boot.run.agents} + ${spring-boot.run.arguments} + + ${spring-boot.excludeGroupIds} + ${spring-boot.excludes} + ${spring-boot.run.folders} + ${spring-boot.run.fork} + ${spring-boot.includes} + ${spring-boot.run.jvmArguments} + ${spring-boot.run.main-class} + ${spring-boot.run.noverify} + ${spring-boot.run.profiles} + + ${spring-boot.run.skip} + ${spring-boot.run.useTestClasspath} + ${spring-boot.run.workingDirectory} + + + + stop + Stop a spring application that has been started by the "start" goal. Typically invoked +once a test suite has completed. + false + true + false + false + false + true + post-integration-test + org.springframework.boot.maven.StopMojo + java + per-lookup + once-per-session + 1.3.0 + false + + + fork + java.lang.Boolean + 1.3.0 + false + true + Flag to indicate if process to stop was forked. By default, the value is inherited +from the {@link MavenProject}. If it is set, it must match the value used to +{@link StartMojo start} the process. + + + jmxName + java.lang.String + false + true + The JMX name of the automatically deployed MBean managing the lifecycle of the +application. + + + jmxPort + int + false + true + The port to use to lookup the platform MBeanServer if the application has been +forked. + + + project + org.apache.maven.project.MavenProject + 1.4.1 + true + false + The Maven project. + + + skip + boolean + 1.3.2 + false + true + Skip the execution. + + + + ${spring-boot.stop.fork} + + ${spring-boot.stop.skip} + + + + + diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 73131464cab..e2aeb3871f2 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -3,7 +3,7 @@ resource_types: type: docker-image source: repository: springio/artifactory-resource - tag: 0.0.10 + tag: 0.0.11-SNAPSHOT - name: pull-request type: docker-image source: @@ -209,19 +209,9 @@ jobs: timeout: ((task-timeout)) image: spring-boot-ci-image file: git-repo/ci/tasks/build-project.yml - - in_parallel: - - task: build-smoke-tests - timeout: ((task-timeout)) - image: spring-boot-ci-image - file: git-repo/ci/tasks/build-smoke-tests.yml - - task: build-integration-tests - timeout: ((task-timeout)) - image: spring-boot-ci-image - file: git-repo/ci/tasks/build-integration-tests.yml - - task: build-deployment-tests - timeout: ((task-timeout)) - image: spring-boot-ci-image - file: git-repo/ci/tasks/build-deployment-tests.yml + params: + GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle-enterprise-cache-username)) + GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle-enterprise-cache-password)) on_failure: do: - put: repo-status-build @@ -241,16 +231,15 @@ jobs: build_uri: "https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}" build_number: "${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME}" disable_checksum_uploads: true - exclude: - - "**/*.effective-pom" - - "**/spring-boot-configuration-docs/**" - - "**/spring-boot-test-support/**" + threads: 8 artifact_set: - include: - "/**/spring-boot-docs-*.zip" properties: "zip.type": "docs" "zip.deployed": "false" + get_params: + threads: 8 on_failure: do: - put: slack-alert @@ -283,19 +272,6 @@ jobs: timeout: ((task-timeout)) image: spring-boot-ci-image file: git-repo/ci/tasks/build-pr-project.yml - - in_parallel: - - task: build-smoke-tests - timeout: ((task-timeout)) - image: spring-boot-ci-image - file: git-repo/ci/tasks/build-smoke-tests.yml - - task: build-integration-tests - timeout: ((task-timeout)) - image: spring-boot-ci-image - file: git-repo/ci/tasks/build-integration-tests.yml - - task: build-deployment-tests - timeout: ((task-timeout)) - image: spring-boot-ci-image - file: git-repo/ci/tasks/build-deployment-tests.yml on_success: put: git-pull-request params: @@ -321,19 +297,9 @@ jobs: timeout: ((task-timeout)) image: spring-boot-jdk11-ci-image file: git-repo/ci/tasks/build-project.yml - - in_parallel: - - task: build-smoke-tests - timeout: ((task-timeout)) - image: spring-boot-jdk11-ci-image - file: git-repo/ci/tasks/build-smoke-tests.yml - - task: build-integration-tests - timeout: ((task-timeout)) - image: spring-boot-jdk11-ci-image - file: git-repo/ci/tasks/build-integration-tests.yml - - task: build-deployment-tests - timeout: ((task-timeout)) - image: spring-boot-jdk11-ci-image - file: git-repo/ci/tasks/build-deployment-tests.yml + params: + GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle-enterprise-cache-username)) + GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle-enterprise-cache-password)) on_failure: do: - put: repo-status-jdk11-build @@ -362,24 +328,14 @@ jobs: - put: repo-status-jdk13-build params: { state: "pending", commit: "git-repo" } - do: - - task: build-project - privileged: true - timeout: ((task-timeout)) - image: spring-boot-jdk13-ci-image - file: git-repo/ci/tasks/build-project.yml - - in_parallel: - - task: build-smoke-tests - timeout: ((task-timeout)) - image: spring-boot-jdk13-ci-image - file: git-repo/ci/tasks/build-smoke-tests.yml - - task: build-integration-tests - timeout: ((task-timeout)) - image: spring-boot-jdk13-ci-image - file: git-repo/ci/tasks/build-integration-tests.yml - - task: build-deployment-tests - timeout: ((task-timeout)) - image: spring-boot-jdk13-ci-image - file: git-repo/ci/tasks/build-deployment-tests.yml + - task: build-project + privileged: true + timeout: ((task-timeout)) + image: spring-boot-jdk13-ci-image + file: git-repo/ci/tasks/build-project.yml + params: + GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle-enterprise-cache-username)) + GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle-enterprise-cache-password)) on_failure: do: - put: repo-status-jdk13-build @@ -412,6 +368,9 @@ jobs: tags: - WIN64 timeout: ((task-timeout)) + params: + GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle-enterprise-cache-username)) + GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle-enterprise-cache-password)) on_failure: do: - put: slack-alert @@ -437,6 +396,8 @@ jobs: file: git-repo/ci/tasks/stage.yml params: RELEASE_TYPE: M + GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle-enterprise-cache-username)) + GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle-enterprise-cache-password)) - put: artifactory-repo params: <<: *artifactory-params @@ -455,6 +416,8 @@ jobs: file: git-repo/ci/tasks/stage.yml params: RELEASE_TYPE: RC + GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle-enterprise-cache-username)) + GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle-enterprise-cache-password)) - put: artifactory-repo params: <<: *artifactory-params @@ -473,6 +436,8 @@ jobs: file: git-repo/ci/tasks/stage.yml params: RELEASE_TYPE: RELEASE + GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle-enterprise-cache-username)) + GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle-enterprise-cache-password)) - put: artifactory-repo params: <<: *artifactory-params diff --git a/ci/scripts/build-deployment-tests.sh b/ci/scripts/build-deployment-tests.sh deleted file mode 100755 index c93fd090083..00000000000 --- a/ci/scripts/build-deployment-tests.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh -repository=$(pwd)/distribution-repository - -pushd git-repo > /dev/null -run_maven -f spring-boot-tests/spring-boot-deployment-tests/pom.xml clean install -U -Dfull -Drepository=file://${repository} -popd > /dev/null diff --git a/ci/scripts/build-integration-tests.sh b/ci/scripts/build-integration-tests.sh deleted file mode 100755 index 953eaebb1c7..00000000000 --- a/ci/scripts/build-integration-tests.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh -repository=$(pwd)/distribution-repository - -pushd git-repo > /dev/null -run_maven -f spring-boot-tests/spring-boot-integration-tests/pom.xml clean install -U -Dfull -Drepository=file://${repository} -popd > /dev/null diff --git a/ci/scripts/build-project-windows.bat b/ci/scripts/build-project-windows.bat index efade5d1acf..aa8b62e1abd 100755 --- a/ci/scripts/build-project-windows.bat +++ b/ci/scripts/build-project-windows.bat @@ -1,6 +1,4 @@ SET "JAVA_HOME=C:\opt\jdk-8" SET PATH=%PATH%;C:\Program Files\Git\usr\bin cd git-repo - -echo ".\mvnw clean install" > build.log -.\mvnw clean install -U >> build.log 2>&1 || (sleep 1 && tail -n 3000 build.log && exit 1) \ No newline at end of file +.\gradlew --no-daemon --max-workers=4 build diff --git a/ci/scripts/build-project.sh b/ci/scripts/build-project.sh index da3c44e4723..767884cbc9b 100755 --- a/ci/scripts/build-project.sh +++ b/ci/scripts/build-project.sh @@ -5,6 +5,5 @@ source $(dirname $0)/common.sh repository=$(pwd)/distribution-repository pushd git-repo > /dev/null -run_maven -N clean verify -run_maven -f spring-boot-project/pom.xml clean deploy -U -Dfull -DaltDeploymentRepository=distribution::default::file://${repository} +./gradlew --no-daemon --max-workers=4 -PdeploymentRepository=${repository} build publishAllPublicationsToDeploymentRepository popd > /dev/null diff --git a/ci/scripts/build-smoke-tests.sh b/ci/scripts/build-smoke-tests.sh deleted file mode 100755 index cfb839c0efa..00000000000 --- a/ci/scripts/build-smoke-tests.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh -repository=$(pwd)/distribution-repository - -pushd git-repo > /dev/null -run_maven -f spring-boot-tests/spring-boot-smoke-tests/pom.xml clean install -U -Dfull -Drepository=file://${repository} -popd > /dev/null diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 2ff3a71bb37..79aa2d58461 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -12,7 +12,7 @@ git clone git-repo stage-git-repo > /dev/null pushd stage-git-repo > /dev/null -snapshotVersion=$( get_revision_from_pom ) +snapshotVersion=$( awk -F '=' '$1 == "version" { print $2 }' gradle.properties ) if [[ $RELEASE_TYPE = "M" ]]; then stageVersion=$( get_next_milestone_release $snapshotVersion) nextVersion=$snapshotVersion @@ -27,23 +27,20 @@ else fi echo "Staging $stageVersion (next version will be $nextVersion)" +sed -i "s/version=$snapshotVersion/version=$stageVersion/" gradle.properties -set_revision_to_pom "$stageVersion" git config user.name "Spring Buildmaster" > /dev/null git config user.email "buildmaster@springframework.org" > /dev/null -git add pom.xml > /dev/null +git add gradle.properties > /dev/null git commit -m"Release v$stageVersion" > /dev/null git tag -a "v$stageVersion" -m"Release v$stageVersion" > /dev/null -run_maven -f spring-boot-project/pom.xml clean deploy -U -Dfull -DaltDeploymentRepository=distribution::default::file://${repository} -run_maven -f spring-boot-tests/spring-boot-smoke-tests/pom.xml clean install -U -Dfull -Drepository=file://${repository} -run_maven -f spring-boot-tests/spring-boot-integration-tests/pom.xml clean install -U -Dfull -Drepository=file://${repository} -run_maven -f spring-boot-tests/spring-boot-deployment-tests/pom.xml clean install -U -Dfull -Drepository=file://${repository} +./gradlew --no-daemon --max-workers=4 -PdeploymentRepository=${repository} build publishAllPublicationsToDeploymentRepository git reset --hard HEAD^ > /dev/null if [[ $nextVersion != $snapshotVersion ]]; then echo "Setting next development version (v$nextVersion)" - set_revision_to_pom "$nextVersion" + sed -i "s/version=$snapshotVersion/version=$nextVersion/" gradle.properties git add pom.xml > /dev/null git commit -m"Next development version (v$nextVersion)" > /dev/null fi; diff --git a/ci/tasks/build-deployment-tests.yml b/ci/tasks/build-deployment-tests.yml deleted file mode 100644 index e45a4c2a301..00000000000 --- a/ci/tasks/build-deployment-tests.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -platform: linux -inputs: -- name: git-repo -- name: distribution-repository -caches: -- path: maven -- path: gradle -run: - path: git-repo/ci/scripts/build-deployment-tests.sh diff --git a/ci/tasks/build-integration-tests.yml b/ci/tasks/build-integration-tests.yml deleted file mode 100644 index bc96aa6cef4..00000000000 --- a/ci/tasks/build-integration-tests.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -platform: linux -inputs: -- name: git-repo -- name: distribution-repository -caches: -- path: maven -- path: gradle -run: - path: git-repo/ci/scripts/build-integration-tests.sh diff --git a/ci/tasks/build-pr-project.yml b/ci/tasks/build-pr-project.yml index b4576a4849f..c3dbfc8c05a 100644 --- a/ci/tasks/build-pr-project.yml +++ b/ci/tasks/build-pr-project.yml @@ -7,5 +7,8 @@ outputs: caches: - path: maven - path: gradle +params: + CI: true + GRADLE_ENTERPRISE_URL: https://ge.spring.io run: path: git-repo/ci/scripts/build-project.sh diff --git a/ci/tasks/build-project.yml b/ci/tasks/build-project.yml index 50e222c7d24..a22b6f5d9de 100644 --- a/ci/tasks/build-project.yml +++ b/ci/tasks/build-project.yml @@ -8,6 +8,11 @@ caches: - path: maven - path: gradle - path: embedmongo +params: + CI: true + GRADLE_ENTERPRISE_CACHE_USERNAME: + GRADLE_ENTERPRISE_CACHE_PASSWORD: + GRADLE_ENTERPRISE_URL: https://ge.spring.io run: path: bash args: @@ -16,4 +21,3 @@ run: source /docker-lib.sh start_docker ${PWD}/git-repo/ci/scripts/build-project.sh - diff --git a/ci/tasks/build-smoke-tests.yml b/ci/tasks/build-smoke-tests.yml deleted file mode 100644 index a38dfb2ef9f..00000000000 --- a/ci/tasks/build-smoke-tests.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -platform: linux -inputs: -- name: git-repo -- name: distribution-repository -caches: -- path: maven -- path: gradle -run: - path: git-repo/ci/scripts/build-smoke-tests.sh diff --git a/ci/tasks/stage.yml b/ci/tasks/stage.yml index f486313ae91..dd21db74f8e 100644 --- a/ci/tasks/stage.yml +++ b/ci/tasks/stage.yml @@ -7,6 +7,10 @@ outputs: - name: distribution-repository params: RELEASE_TYPE: + CI: true + GRADLE_ENTERPRISE_CACHE_USERNAME: + GRADLE_ENTERPRISE_CACHE_PASSWORD: + GRADLE_ENTERPRISE_URL: https://ge.spring.io caches: - path: maven - path: gradle diff --git a/eclipse/spring-boot-project.setup b/eclipse/spring-boot-project.setup index 79100f5284d..2048d3b1bd0 100644 --- a/eclipse/spring-boot-project.setup +++ b/eclipse/spring-boot-project.setup @@ -4,13 +4,12 @@ xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdt="http://www.eclipse.org/oomph/setup/jdt/1.0" - xmlns:maven="http://www.eclipse.org/oomph/setup/maven/1.0" xmlns:predicates="http://www.eclipse.org/oomph/predicates/1.0" xmlns:setup="http://www.eclipse.org/oomph/setup/1.0" xmlns:setup.p2="http://www.eclipse.org/oomph/setup/p2/1.0" xmlns:setup.workingsets="http://www.eclipse.org/oomph/setup/workingsets/1.0" xmlns:workingsets="http://www.eclipse.org/oomph/workingsets/1.0" - xsi:schemaLocation="http://www.eclipse.org/oomph/setup/jdt/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/JDT.ecore http://www.eclipse.org/oomph/setup/maven/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Maven.ecore http://www.eclipse.org/oomph/predicates/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Predicates.ecore http://www.eclipse.org/oomph/setup/workingsets/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/SetupWorkingSets.ecore http://www.eclipse.org/oomph/workingsets/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/WorkingSets.ecore" + xsi:schemaLocation="http://www.eclipse.org/oomph/setup/jdt/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/JDT.ecore http://www.eclipse.org/oomph/predicates/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Predicates.ecore http://www.eclipse.org/oomph/setup/workingsets/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/SetupWorkingSets.ecore http://www.eclipse.org/oomph/workingsets/1.0 https://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/WorkingSets.ecore" name="spring.boot.2.3.x" label="Spring Boot 2.3.x"> - - - - spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin - - - search) { + def query = search.collect { name, value -> + "search.names=${encodeURL(name)}&search.values=${encodeURL(value)}" + }.join('&') + + "$gradleEnterprise.buildScan.server/scans?$query" +} + +String encodeURL(String url) { + URLEncoder.encode(url, 'UTF-8') +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cc4fdc293d0e50b0ad9b65c16e7ddd1db2f6025b GIT binary patch literal 58702 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

@up^y4&I8N>~wvL%f(S2W%NN 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 D613UA literal 0 HcmV?d00001 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties similarity index 91% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle/wrapper/gradle-wrapper.properties rename to gradle/wrapper/gradle-wrapper.properties index 290541c7386..94920145f34 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradlew b/gradlew similarity index 75% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradlew rename to gradlew index cccdd3d517f..2fe81a7d95e 100755 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 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. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -109,8 +125,8 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` @@ -138,19 +154,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +175,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradlew.bat b/gradlew.bat similarity index 75% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradlew.bat rename to gradlew.bat index f9553162f12..9618d8d9607 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff --git a/pom.xml b/pom.xml deleted file mode 100644 index dd169ece2b2..00000000000 --- a/pom.xml +++ /dev/null @@ -1,384 +0,0 @@ - - - 4.0.0 - org.springframework.boot - spring-boot-build - ${revision} - pom - Spring Boot Build - Spring Boot Build - - 2.3.0.BUILD-SNAPSHOT - ${basedir} - - - - - - default - - - !disable-spring-boot-default-profile - - - - 0.0.17 - 0.0.4.RELEASE - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.0.0 - - - com.puppycrawl.tools - checkstyle - 8.22 - - - io.spring.javaformat - spring-javaformat-checkstyle - ${spring-javaformat.version} - - - io.spring.nohttp - nohttp-checkstyle - ${nohttp-checkstyle.version} - - - - - checkstyle-validation - validate - - ${disable.checks} - src/checkstyle/checkstyle.xml - src/checkstyle/checkstyle-suppressions.xml - true - main.basedir=${main.basedir} - UTF-8 - - - check - - - - nohttp-checkstyle-validation - validate - - ${disable.checks} - src/checkstyle/nohttp-checkstyle.xml - src/checkstyle/nohttp-checkstyle-suppressions.xml - main.basedir=${main.basedir} - UTF-8 - ${basedir} - **/* - **/.git/**/*,**/target/**/,**/.flattened-pom.xml,**/*.class,**/spring-boot-gradle-plugin/build/**,**/spring-boot-gradle-plugin/bin/** - - - check - - false - - - - - io.spring.javaformat - spring-javaformat-maven-plugin - ${spring-javaformat.version} - - - validate - - ${disable.checks} - - - validate - - - - - - - - spring-boot-project - - spring-boot-tests - - - - - m2e - - - m2e.version - - - - spring-boot-project - spring-boot-tests - - - - repository - - - repository - - - - - repository - ${repository} - - true - - - - - - repository - ${repository} - - true - - - - - - - - - central - https://repo.maven.apache.org/maven2 - - false - - - - spring-milestone - Spring Milestone - https://repo.spring.io/milestone - - false - - - - spring-snapshot - Spring Snapshot - https://repo.spring.io/snapshot - - true - - - - rabbit-milestone - Rabbit Milestone - https://dl.bintray.com/rabbitmq/maven-milestones - - false - - - - - - central - https://repo.maven.apache.org/maven2 - - false - - - - spring-release - Spring Release - https://repo.spring.io/release - - - spring-milestone - Spring Milestone - https://repo.spring.io/milestone - - false - - - - spring-snapshot - Spring Snapshot - https://repo.spring.io/snapshot - - true - - - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - [1,) - - check - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - [1,) - - copy - copy-dependencies - unpack - - - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - [1,) - - enforce - - - - - - - - - org.apache.maven.plugins - maven-invoker-plugin - [1,) - - install - - - - - - - - - org.apache.maven.plugins - maven-plugin-plugin - [1,) - - descriptor - helpmojo - - - - - - - - - org.basepom.maven - duplicate-finder-maven-plugin - [1,) - - check - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - [1,) - - reserve-network-port - - - - - - - - - org.codehaus.mojo - flatten-maven-plugin - [1,) - - flatten - - - - - - - - - org.jetbrains.kotlin - kotlin-maven-plugin - [1,) - - compile - test-compile - - - - - - - - - org.jooq - jooq-codegen-maven - [1,) - - generate - - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - [1,) - - build-info - - - - - - - - - - - - - - diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 00000000000..43d7fd1cfba --- /dev/null +++ b/settings.gradle @@ -0,0 +1,71 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + maven { url 'https://repo.spring.io/snapshot' } + } + resolutionStrategy { + eachPlugin { + if (requested.id.id == 'org.jetbrains.kotlin.jvm') { + useVersion "${kotlinVersion}" + } + if (requested.id.id == 'org.jetbrains.kotlin.plugin.spring') { + useVersion "${kotlinVersion}" + } + } + } +} + +plugins { + id 'com.gradle.enterprise' version '3.1' +} + +apply from: "$rootDir/gradle/build-scan-user-data.gradle" +gradleEnterprise { + buildScan { + captureTaskInputFiles = true + obfuscation { + ipAddresses { addresses -> addresses.collect { address -> '0.0.0.0'} } + } + publishAlwaysIf(System.getenv('GRADLE_ENTERPRISE_URL') != null) + server = 'https://ge.spring.io' + } +} + +apply from: new File(settingsDir, 'gradle/build-cache-settings.gradle') + +rootProject.name='spring-boot-build' + +include 'spring-boot-project:spring-boot-dependencies' +include 'spring-boot-project:spring-boot-parent' +include 'spring-boot-project:spring-boot-tools:spring-boot-antlib' +include 'spring-boot-project:spring-boot-tools:spring-boot-autoconfigure-processor' +include 'spring-boot-project:spring-boot-tools:spring-boot-configuration-metadata' +include 'spring-boot-project:spring-boot-tools:spring-boot-configuration-processor' +include 'spring-boot-project:spring-boot-tools:spring-boot-gradle-plugin' +include 'spring-boot-project:spring-boot-tools:spring-boot-loader' +include 'spring-boot-project:spring-boot-tools:spring-boot-loader-tools' +include 'spring-boot-project:spring-boot-tools:spring-boot-maven-plugin' +include 'spring-boot-project:spring-boot-tools:spring-boot-test-support' +include 'spring-boot-project:spring-boot' +include 'spring-boot-project:spring-boot-autoconfigure' +include 'spring-boot-project:spring-boot-actuator' +include 'spring-boot-project:spring-boot-actuator-autoconfigure' +include 'spring-boot-project:spring-boot-cli' +include 'spring-boot-project:spring-boot-devtools' +include 'spring-boot-project:spring-boot-docs' +include 'spring-boot-project:spring-boot-properties-migrator' +include 'spring-boot-project:spring-boot-test' +include 'spring-boot-project:spring-boot-test-autoconfigure' +include 'spring-boot-tests:spring-boot-deployment-tests' +include 'spring-boot-tests:spring-boot-integration-tests:spring-boot-configuration-processor-tests' +include 'spring-boot-tests:spring-boot-integration-tests:spring-boot-launch-script-tests' +include 'spring-boot-tests:spring-boot-integration-tests:spring-boot-server-tests' + +new File("$rootDir/spring-boot-project/spring-boot-starters").eachFileMatch(groovy.io.FileType.DIRECTORIES, ~/spring-boot-starter.*/) { + include "spring-boot-project:spring-boot-starters:$it.name" +} + +new File("$rootDir/spring-boot-tests/spring-boot-smoke-tests").eachFileMatch(groovy.io.FileType.DIRECTORIES, ~/spring-boot-smoke-test.*/) { + include "spring-boot-tests:spring-boot-smoke-tests:$it.name" +} diff --git a/spring-boot-project/pom.xml b/spring-boot-project/pom.xml deleted file mode 100644 index 2e893ff2819..00000000000 --- a/spring-boot-project/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-build - ${revision} - - spring-boot-project - pom - Spring Boot Project - Spring Boot Project - - ${basedir}/.. - - - spring-boot-dependencies - spring-boot-parent - spring-boot - spring-boot-actuator - spring-boot-actuator-autoconfigure - spring-boot-autoconfigure - spring-boot-devtools - spring-boot-properties-migrator - spring-boot-test - spring-boot-test-autoconfigure - spring-boot-tools - spring-boot-starters - spring-boot-cli - spring-boot-docs - - diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle new file mode 100644 index 00000000000..5c7076e9ef4 --- /dev/null +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle @@ -0,0 +1,185 @@ +plugins { + id 'java-library' + id 'org.asciidoctor.jvm.convert' + id 'org.asciidoctor.jvm.pdf' + id 'org.springframework.boot.auto-configuration' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' + id 'org.springframework.boot.optional-dependencies' +} + +description = 'Spring Boot Actuator AutoConfigure' + +configurations { + asciidoctorExtensions + documentation +} + +dependencies { + asciidoctorExtensions enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor' + + api project(':spring-boot-project:spring-boot-actuator') + + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation project(':spring-boot-project:spring-boot') + implementation project(':spring-boot-project:spring-boot-autoconfigure') + implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' + implementation 'org.springframework:spring-core' + implementation 'org.springframework:spring-context' + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + optional 'ch.qos.logback:logback-classic' + optional 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml' + optional 'com.github.ben-manes.caffeine:caffeine' + optional 'com.hazelcast:hazelcast' + optional 'com.hazelcast:hazelcast-spring' + optional 'com.sun.mail:jakarta.mail' + optional 'com.zaxxer:HikariCP' + optional 'io.dropwizard.metrics:metrics-jmx' + optional 'io.lettuce:lettuce-core' + optional 'io.micrometer:micrometer-core' + optional 'io.micrometer:micrometer-jersey2' + optional 'io.micrometer:micrometer-registry-appoptics' + optional 'io.micrometer:micrometer-registry-atlas' + optional 'io.micrometer:micrometer-registry-datadog' + optional 'io.micrometer:micrometer-registry-dynatrace' + optional 'io.micrometer:micrometer-registry-elastic' + optional 'io.micrometer:micrometer-registry-ganglia' + optional 'io.micrometer:micrometer-registry-graphite' + optional 'io.micrometer:micrometer-registry-humio' + optional 'io.micrometer:micrometer-registry-influx' + optional 'io.micrometer:micrometer-registry-jmx' + optional 'io.micrometer:micrometer-registry-kairos' + optional 'io.micrometer:micrometer-registry-new-relic' + optional 'io.micrometer:micrometer-registry-prometheus' + optional 'io.micrometer:micrometer-registry-stackdriver' + optional 'io.prometheus:simpleclient_pushgateway' + optional 'io.micrometer:micrometer-registry-signalfx' + optional 'io.micrometer:micrometer-registry-statsd' + optional 'io.micrometer:micrometer-registry-wavefront' + optional 'io.projectreactor.netty:reactor-netty' + optional 'io.searchbox:jest' + optional 'jakarta.jms:jakarta.jms-api' + optional 'jakarta.servlet:jakarta.servlet-api' + optional 'javax.cache:cache-api' + optional 'net.sf.ehcache:ehcache' + optional 'org.apache.activemq:activemq-broker' + optional 'org.apache.commons:commons-dbcp2' + optional 'org.apache.kafka:kafka-clients' + optional 'org.apache.tomcat.embed:tomcat-embed-core' + optional 'org.apache.tomcat.embed:tomcat-embed-el' + optional 'org.apache.tomcat:tomcat-jdbc' + optional 'org.aspectj:aspectjweaver' + optional 'org.eclipse.jetty:jetty-server' + optional 'org.elasticsearch:elasticsearch' + optional 'org.elasticsearch.client:elasticsearch-rest-client' + optional 'org.flywaydb:flyway-core' + optional 'org.glassfish.jersey.core:jersey-server' + optional 'org.glassfish.jersey.containers:jersey-container-servlet-core' + optional 'org.hibernate:hibernate-core' + optional 'org.hibernate.validator:hibernate-validator' + optional 'org.influxdb:influxdb-java' + optional 'org.jolokia:jolokia-core' + optional 'org.infinispan:infinispan-spring4-embedded' + optional 'org.liquibase:liquibase-core' + optional 'org.mongodb:mongodb-driver-async' + optional 'org.mongodb:mongodb-driver-reactivestreams' + optional 'org.springframework:spring-jdbc' + optional 'org.springframework:spring-jms' + optional 'org.springframework:spring-messaging' + optional 'org.springframework:spring-webflux' + optional 'org.springframework:spring-webmvc' + optional 'org.springframework.amqp:spring-rabbit' + optional 'org.springframework.data:spring-data-cassandra' + optional 'org.springframework.data:spring-data-couchbase' + optional 'org.springframework.data:spring-data-ldap' + optional 'org.springframework.data:spring-data-mongodb' + optional 'org.springframework.data:spring-data-neo4j' + optional 'org.springframework.data:spring-data-redis' + optional 'org.springframework.data:spring-data-solr' + optional 'org.springframework.integration:spring-integration-core' + optional 'org.springframework.security:spring-security-config' + optional 'org.springframework.security:spring-security-web' + optional 'org.springframework.session:spring-session-core' + optional 'redis.clients:jedis' + + testImplementation project(':spring-boot-project:spring-boot-test') + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation 'io.projectreactor:reactor-test' + testImplementation 'com.squareup.okhttp3:mockwebserver' + testImplementation 'com.jayway.jsonpath:json-path' + testImplementation 'io.undertow:undertow-core' + testImplementation ('io.undertow:undertow-servlet') { + exclude group: 'org.jboss.spec.javax.annotation', module: 'jboss-annotations-api_1.2_spec' + exclude group: 'org.jboss.spec.javax.servlet', module: 'jboss-servlet-api_4.0_spec' + } + testImplementation 'javax.xml.bind:jaxb-api' + testImplementation 'org.apache.logging.log4j:log4j-to-slf4j' + testImplementation 'org.aspectj:aspectjrt' + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.eclipse.jetty:jetty-webapp' + testImplementation 'org.glassfish.jersey.ext:jersey-spring4' + testImplementation 'org.glassfish.jersey.media:jersey-media-json-jackson' + testImplementation 'org.hamcrest:hamcrest' + testImplementation 'org.hsqldb:hsqldb' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.mockito:mockito-core' + testImplementation 'org.skyscreamer:jsonassert' + testImplementation 'org.springframework:spring-orm' + testImplementation 'org.springframework.data:spring-data-elasticsearch' + testImplementation 'org.springframework.data:spring-data-rest-webmvc' + testImplementation 'org.springframework.integration:spring-integration-jmx' + testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' + testImplementation 'org.springframework.restdocs:spring-restdocs-webtestclient' + testImplementation 'org.springframework.security:spring-security-test' + testImplementation 'org.yaml:snakeyaml' + + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testRuntimeOnly 'org.springframework.security:spring-security-oauth2-jose' + testRuntimeOnly 'org.springframework.security:spring-security-oauth2-resource-server' +} + +compileJava { + options.compilerArgs << '-parameters' +} + +compileTestJava { + options.compilerArgs << '-parameters' +} + +test { + outputs.dir("$buildDir/generated-snippets") +} + +asciidoctor { + configurations 'asciidoctorExtensions' + dependsOn test + sources { + include 'index.adoc' + } +} + +asciidoctorPdf { + configurations 'asciidoctorExtensions' + dependsOn test + sources { + include 'index.adoc' + } +} + +task zip(type: Zip) { + dependsOn asciidoctor, asciidoctorPdf + duplicatesStrategy 'fail' + from(asciidoctorPdf.outputDir) { + into 'pdf' + } + from(asciidoctor.outputDir) { + into 'html' + } +} + +artifacts { + documentation zip +} diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml deleted file mode 100644 index aa824b2ae10..00000000000 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml +++ /dev/null @@ -1,863 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-actuator-autoconfigure - Spring Boot Actuator AutoConfigure - Spring Boot Actuator AutoConfigure - - ${basedir}/../.. - ${project.build.directory}/refdocs/ - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot-actuator - - - org.springframework.boot - spring-boot-autoconfigure - - - com.fasterxml.jackson.core - jackson-databind - - - org.springframework - spring-core - - - org.springframework - spring-context - - - - ch.qos.logback - logback-classic - true - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - true - - - com.github.ben-manes.caffeine - caffeine - true - - - com.hazelcast - hazelcast - true - - - com.hazelcast - hazelcast-spring - true - - - com.sun.mail - jakarta.mail - true - - - com.zaxxer - HikariCP - true - - - io.dropwizard.metrics - metrics-jmx - true - - - io.lettuce - lettuce-core - true - - - io.micrometer - micrometer-core - true - - - io.micrometer - micrometer-jersey2 - true - - - io.micrometer - micrometer-registry-appoptics - true - - - io.micrometer - micrometer-registry-atlas - true - - - io.micrometer - micrometer-registry-datadog - true - - - io.micrometer - micrometer-registry-dynatrace - true - - - io.micrometer - micrometer-registry-elastic - true - - - io.micrometer - micrometer-registry-ganglia - true - - - io.micrometer - micrometer-registry-graphite - true - - - io.micrometer - micrometer-registry-humio - true - - - io.micrometer - micrometer-registry-influx - true - - - io.micrometer - micrometer-registry-jmx - true - - - io.micrometer - micrometer-registry-kairos - true - - - io.micrometer - micrometer-registry-new-relic - true - - - io.micrometer - micrometer-registry-prometheus - true - - - io.prometheus - simpleclient_pushgateway - true - - - io.micrometer - micrometer-registry-signalfx - true - - - io.micrometer - micrometer-registry-stackdriver - true - - - io.micrometer - micrometer-registry-statsd - true - - - io.micrometer - micrometer-registry-wavefront - true - - - io.projectreactor.netty - reactor-netty - true - - - io.searchbox - jest - true - - - jakarta.jms - jakarta.jms-api - true - - - jakarta.servlet - jakarta.servlet-api - true - - - jakarta.persistence - jakarta.persistence-api - true - - - jakarta.ws.rs - jakarta.ws.rs-api - true - - - javax.cache - cache-api - true - - - net.sf.ehcache - ehcache - true - - - org.apache.activemq - activemq-broker - true - - - geronimo-jms_1.1_spec - org.apache.geronimo.specs - - - - - org.apache.commons - commons-dbcp2 - true - - - org.apache.kafka - kafka-clients - true - - - org.apache.tomcat.embed - tomcat-embed-core - true - - - org.apache.tomcat.embed - tomcat-embed-el - true - - - org.apache.tomcat - tomcat-jdbc - true - - - org.aspectj - aspectjweaver - true - - - org.eclipse.jetty - jetty-server - true - - - javax.servlet - javax.servlet-api - - - - - org.elasticsearch - elasticsearch - true - - - org.elasticsearch.client - elasticsearch-rest-client - true - - - org.flywaydb - flyway-core - true - - - org.glassfish.jersey.core - jersey-server - true - - - javax.validation - validation-api - - - - - org.glassfish.jersey.containers - jersey-container-servlet-core - true - - - org.hibernate - hibernate-core - true - - - javax.activation - javax.activation-api - - - javax.xml.bind - jaxb-api - - - javax.persistence - javax.persistence-api - - - - - org.hibernate.validator - hibernate-validator - true - - - javax.validation - validation-api - - - - - org.influxdb - influxdb-java - true - - - org.jolokia - jolokia-core - true - - - org.infinispan - infinispan-spring5-embedded - true - - - org.liquibase - liquibase-core - true - - - org.mongodb - mongodb-driver-async - true - - - org.mongodb - mongodb-driver-reactivestreams - true - - - org.springframework - spring-jdbc - true - - - org.springframework - spring-jms - true - - - org.springframework - spring-messaging - true - - - org.springframework - spring-webflux - true - - - org.springframework - spring-webmvc - true - - - org.springframework.amqp - spring-rabbit - true - - - org.springframework.data - spring-data-cassandra - true - - - org.springframework.data - spring-data-couchbase - true - - - org.springframework.data - spring-data-ldap - true - - - org.springframework.data - spring-data-mongodb - true - - - org.springframework.data - spring-data-neo4j - true - - - org.springframework.data - spring-data-redis - true - - - org.springframework.data - spring-data-solr - true - - - - wstx-asl - org.codehaus.woodstox - - - - - org.springframework.integration - spring-integration-core - true - - - org.springframework.security - spring-security-config - true - - - org.springframework.security - spring-security-web - true - - - org.springframework.session - spring-session-core - true - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - runtime - - - - org.springframework.boot - spring-boot-autoconfigure-processor - true - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot-test - test - - - org.springframework.boot - spring-boot-test-support - test - - - io.projectreactor - reactor-test - test - - - com.squareup.okhttp3 - mockwebserver - test - - - org.hamcrest - hamcrest-core - - - - - com.jayway.jsonpath - json-path - test - - - io.undertow - undertow-core - test - - - io.undertow - undertow-servlet - test - - - org.jboss.spec.javax.servlet - jboss-servlet-api_3.1_spec - - - - - jakarta.validation - jakarta.validation-api - test - - - jakarta.xml.bind - jakarta.xml.bind-api - test - - - org.apache.logging.log4j - log4j-to-slf4j - test - - - org.aspectj - aspectjrt - test - - - org.eclipse.jetty - jetty-webapp - test - - - org.hsqldb - hsqldb - test - - - org.glassfish.jersey.ext - jersey-spring5 - test - - - org.glassfish.jersey.media - jersey-media-json-jackson - test - - - org.skyscreamer - jsonassert - test - - - org.springframework - spring-orm - test - - - org.springframework.data - spring-data-elasticsearch - test - - - org.springframework.data - spring-data-rest-webmvc - test - - - org.springframework.integration - spring-integration-jmx - test - - - org.springframework.restdocs - spring-restdocs-mockmvc - test - - - javax.servlet - javax.servlet-api - - - - - org.springframework.restdocs - spring-restdocs-webtestclient - test - - - org.springframework.security - spring-security-test - test - - - org.springframework.security - spring-security-oauth2-resource-server - test - - - org.springframework.security - spring-security-oauth2-jose - test - - - org.yaml - snakeyaml - test - - - redis.clients - jedis - true - - - - - full - - - full - - - - - - com.googlecode.maven-download-plugin - download-maven-plugin - - - unpack-doc-resources - generate-resources - - wget - - - ${spring-doc-resources.url} - true - ${refdocs.build.directory} - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - ant-contrib - ant-contrib - 1.0b3 - - - ant - ant - - - - - org.apache.ant - ant-nodeps - 1.8.1 - - - org.tigris.antelope - antelopetasks - 3.2.10 - - - - - set-up-maven-properties - prepare-package - - run - - - true - - - - - - - - - - - - - - - package-docs-zip - package - - run - - - - - - - - - - - - - - - - - org.asciidoctor - asciidoctor-maven-plugin - - - generate-html-documentation - prepare-package - - process-asciidoc - - - html5 - ${project.build.directory}/generated-docs/reference/html - highlight.js - book - - js/highlight - github - true - ./images - font - css/ - spring.css - warn - - - true - - DEBUG - - - - - - generate-pdf-documentation - prepare-package - - process-asciidoc - - - pdf - ${project.build.directory}/generated-docs/reference/pdf - - - - - ${refdocs.build.directory} - index.adoc - - ${version-type} - ${project.version} - ${project.build.directory}/generated-snippets/ - - - - - org.asciidoctor - asciidoctorj-pdf - 1.5.0-alpha.18 - - - - - org.apache.maven.plugins - maven-resources-plugin - - - copy-asciidoc-resources - generate-resources - - copy-resources - - - ${refdocs.build.directory} - - - src/main/asciidoc - false - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-zip - - attach-artifact - - - - - ${project.build.directory}/${project.artifactId}-${project.version}-docs.zip - zip - docs - - - - - - - - - - - diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/auditevents.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/auditevents.adoc similarity index 79% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/auditevents.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/auditevents.adoc index 91dac834d5e..9c6358f20b3 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/auditevents.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/auditevents.adoc @@ -10,12 +10,12 @@ The `auditevents` endpoint provides information about the application's audit ev To retrieve the audit events, make a `GET` request to `/actuator/auditevents`, as shown in the following curl-based example: -include::{snippets}auditevents/filtered/curl-request.adoc[] +include::{snippets}/auditevents/filtered/curl-request.adoc[] The preceding example retrieves `logout` events for the principal, `alice`, that occurred after 09:37 on 7 November 2017 in the UTC timezone. The resulting response is similar to the following: -include::{snippets}auditevents/filtered/http-response.adoc[] +include::{snippets}/auditevents/filtered/http-response.adoc[] @@ -26,7 +26,7 @@ The endpoint uses query parameters to limit the events that it returns. The following table shows the supported query parameters: [cols="2,4"] -include::{snippets}auditevents/filtered/request-parameters.adoc[] +include::{snippets}/auditevents/filtered/request-parameters.adoc[] @@ -37,4 +37,4 @@ The response contains details of all of the audit events that matched the query. The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}auditevents/all/response-fields.adoc[] +include::{snippets}/auditevents/all/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/beans.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/beans.adoc similarity index 78% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/beans.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/beans.adoc index 5417a906011..e3307538bae 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/beans.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/beans.adoc @@ -10,11 +10,11 @@ The `beans` endpoint provides information about the application's beans. To retrieve the beans, make a `GET` request to `/actuator/beans`, as shown in the following curl-based example: -include::{snippets}beans/curl-request.adoc[] +include::{snippets}/beans/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}beans/http-response.adoc[] +include::{snippets}/beans/http-response.adoc[] @@ -25,4 +25,4 @@ The response contains details of the application's beans. The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}beans/response-fields.adoc[] +include::{snippets}/beans/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/caches.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/caches.adoc similarity index 78% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/caches.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/caches.adoc index 3f2156a4b9a..f6057a656d2 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/caches.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/caches.adoc @@ -9,11 +9,11 @@ The `caches` endpoint provides access to the application's caches. == Retrieving All Caches To retrieve the application's caches, make a `GET` request to `/actuator/caches`, as shown in the following curl-based example: -include::{snippets}caches/all/curl-request.adoc[] +include::{snippets}/caches/all/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}caches/all/http-response.adoc[] +include::{snippets}/caches/all/http-response.adoc[] @@ -23,7 +23,7 @@ The response contains details of the application's caches. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}caches/all/response-fields.adoc[] +include::{snippets}/caches/all/response-fields.adoc[] @@ -31,12 +31,12 @@ include::{snippets}caches/all/response-fields.adoc[] == Retrieving Caches by Name To retrieve a cache by name, make a `GET` request to `/actuator/caches/\{name}`, as shown in the following curl-based example: -include::{snippets}caches/named/curl-request.adoc[] +include::{snippets}/caches/named/curl-request.adoc[] The preceding example retrieves information about the cache named `cities`. The resulting response is similar to the following: -include::{snippets}caches/named/http-response.adoc[] +include::{snippets}/caches/named/http-response.adoc[] @@ -47,7 +47,7 @@ Otherwise, the `cacheManager` must be specified. The following table shows the supported query parameters: [cols="2,4"] -include::{snippets}caches/named/request-parameters.adoc[] +include::{snippets}/caches/named/request-parameters.adoc[] @@ -57,7 +57,7 @@ The response contains details of the requested cache. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}caches/named/response-fields.adoc[] +include::{snippets}/caches/named/response-fields.adoc[] @@ -65,7 +65,7 @@ include::{snippets}caches/named/response-fields.adoc[] == Evict All Caches To clear all available caches, make a `DELETE` request to `/actuator/caches` as shown in the following curl-based example: -include::{snippets}caches/evict-all/curl-request.adoc[] +include::{snippets}/caches/evict-all/curl-request.adoc[] @@ -73,7 +73,7 @@ include::{snippets}caches/evict-all/curl-request.adoc[] == Evict a Cache by Name To evict a particular cache, make a `DELETE` request to `/actuator/caches/\{name}` as shown in the following curl-based example: -include::{snippets}caches/evict-named/curl-request.adoc[] +include::{snippets}/caches/evict-named/curl-request.adoc[] NOTE: As there are two caches named `countries`, the `cacheManager` has to be provided to specify which `Cache` should be cleared. @@ -86,4 +86,4 @@ Otherwise, the `cacheManager` must be specified. The following table shows the supported query parameters: [cols="2,4"] -include::{snippets}caches/evict-named/request-parameters.adoc[] +include::{snippets}/caches/evict-named/request-parameters.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/conditions.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/conditions.adoc similarity index 80% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/conditions.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/conditions.adoc index 26dace0267f..2477015d832 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/conditions.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/conditions.adoc @@ -10,11 +10,11 @@ The `conditions` endpoint provides information about the evaluation of condition To retrieve the report, make a `GET` request to `/actuator/conditions`, as shown in the following curl-based example: -include::{snippets}conditions/curl-request.adoc[] +include::{snippets}/conditions/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}conditions/http-response.adoc[] +include::{snippets}/conditions/http-response.adoc[] @@ -25,4 +25,4 @@ The response contains details of the application's condition evaluation. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}conditions/response-fields.adoc[] +include::{snippets}/conditions/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/configprops.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/configprops.adoc similarity index 80% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/configprops.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/configprops.adoc index 651b0ec5123..1f251b9c2ed 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/configprops.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/configprops.adoc @@ -10,11 +10,11 @@ The `configprops` endpoint provides information about the application's `@Config To retrieve the `@ConfigurationProperties` beans, make a `GET` request to `/actuator/configprops`, as shown in the following curl-based example: -include::{snippets}configprops/curl-request.adoc[] +include::{snippets}/configprops/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}configprops/http-response.adoc[] +include::{snippets}/configprops/http-response.adoc[] @@ -25,4 +25,4 @@ The response contains details of the application's `@ConfigurationProperties` be The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}configprops/response-fields.adoc[] +include::{snippets}/configprops/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/env.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/env.adoc similarity index 78% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/env.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/env.adoc index d7b917ca166..4b624946dba 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/env.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/env.adoc @@ -10,11 +10,11 @@ The `env` endpoint provides information about the application's `Environment`. To retrieve the entire environment, make a `GET` request to `/actuator/env`, as shown in the following curl-based example: -include::{snippets}env/all/curl-request.adoc[] +include::{snippets}/env/all/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}env/all/http-response.adoc[] +include::{snippets}/env/all/http-response.adoc[] @@ -25,7 +25,7 @@ The response contains details of the application's `Environment`. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}env/all/response-fields.adoc[] +include::{snippets}/env/all/response-fields.adoc[] @@ -34,12 +34,12 @@ include::{snippets}env/all/response-fields.adoc[] To retrieve a single property, make a `GET` request to `/actuator/env/{property.name}`, as shown in the following curl-based example: -include::{snippets}env/single/curl-request.adoc[] +include::{snippets}/env/single/curl-request.adoc[] The preceding example retrieves information about the property named `com.example.cache.max-size`. The resulting response is similar to the following: -include::{snippets}env/single/http-response.adoc[] +include::{snippets}/env/single/http-response.adoc[] @@ -50,4 +50,4 @@ The response contains details of the requested property. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}env/single/response-fields.adoc[] +include::{snippets}/env/single/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/flyway.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/flyway.adoc similarity index 79% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/flyway.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/flyway.adoc index 8fe81d6295d..d70b0e6a563 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/flyway.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/flyway.adoc @@ -10,11 +10,11 @@ The `flyway` endpoint provides information about database migrations performed b To retrieve the migrations, make a `GET` request to `/actuator/flyway`, as shown in the following curl-based example: -include::{snippets}flyway/curl-request.adoc[] +include::{snippets}/flyway/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}flyway/http-response.adoc[] +include::{snippets}/flyway/http-response.adoc[] @@ -25,4 +25,4 @@ The response contains details of the application's Flyway migrations. The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}flyway/response-fields.adoc[] +include::{snippets}/flyway/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/health.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/health.adoc similarity index 82% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/health.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/health.adoc index a7c1998dde3..6cbaf51771b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/health.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/health.adoc @@ -8,11 +8,11 @@ The `health` endpoint provides detailed information about the health of the appl == Retrieving the Health of the application To retrieve the health of the application, make a `GET` request to `/actuator/health`, as shown in the following curl-based example: -include::{snippets}health/curl-request.adoc[] +include::{snippets}/health/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}health/http-response.adoc[] +include::{snippets}/health/http-response.adoc[] @@ -22,7 +22,7 @@ The response contains details of the health of the application. The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}health/response-fields.adoc[] +include::{snippets}/health/response-fields.adoc[] NOTE: The response fields above are for the V3 API. If you need to return V2 JSON you should use an accept header or `application/vnd.spring-boot.actuator.v2+json` @@ -33,11 +33,11 @@ If you need to return V2 JSON you should use an accept header or `application/vn == Retrieving the Health of a component To retrieve the health of a particular component of the application's health, make a `GET` request to `/actuator/health/\{component}`, as shown in the following curl-based example: -include::{snippets}health/component/curl-request.adoc[] +include::{snippets}/health/component/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}health/component/http-response.adoc[] +include::{snippets}/health/component/http-response.adoc[] @@ -47,7 +47,7 @@ The response contains details of the health of a particular component of the app The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}health/component/response-fields.adoc[] +include::{snippets}/health/component/response-fields.adoc[] @@ -55,11 +55,11 @@ include::{snippets}health/component/response-fields.adoc[] == Retrieving the Health of a nested component If a particular component contains other nested components (as the `broker` indicator in the example above), the health of such a nested component can be retrieved by issuing a `GET` request to `/actuator/health/\{component}/\{subcomponent}`, as shown in the following curl-based example: -include::{snippets}health/instance/curl-request.adoc[] +include::{snippets}/health/instance/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}health/instance/http-response.adoc[] +include::{snippets}/health/instance/http-response.adoc[] Components of an application's health may be nested arbitrarily deep depending on the application's health indicators and how they have been grouped. The health endpoint supports any number of `/\{component}` identifiers in the URL to allow the health of a component at any depth to be retrieved. @@ -72,4 +72,4 @@ The response contains details of the health of an instance of a particular compo The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}health/instance/response-fields.adoc[] +include::{snippets}/health/instance/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/heapdump.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/heapdump.adoc similarity index 92% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/heapdump.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/heapdump.adoc index ebbba69207d..57488cb0170 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/heapdump.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/heapdump.adoc @@ -13,6 +13,6 @@ The response is binary data in https://docs.oracle.com/javase/8/docs/technotes/s Typically, you should save the response to disk for subsequent analysis. When using curl, this can be achieved by using the `-O` option, as shown in the following example: -include::{snippets}heapdump/curl-request.adoc[] +include::{snippets}/heapdump/curl-request.adoc[] The preceding example results in a file named `heapdump` being written to the current working directory. diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/httptrace.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/httptrace.adoc similarity index 79% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/httptrace.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/httptrace.adoc index ea1149f9efd..b7937e57a2b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/httptrace.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/httptrace.adoc @@ -10,11 +10,11 @@ The `httptrace` endpoint provides information about HTTP request-response exchan To retrieve the traces, make a `GET` request to `/actuator/httptrace`, as shown in the following curl-based example: -include::{snippets}httptrace/curl-request.adoc[] +include::{snippets}/httptrace/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}httptrace/http-response.adoc[] +include::{snippets}/httptrace/http-response.adoc[] @@ -25,4 +25,4 @@ The response contains details of the traced HTTP request-response exchanges. The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}httptrace/response-fields.adoc[] +include::{snippets}/httptrace/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/info.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/info.adoc similarity index 81% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/info.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/info.adoc index f431c3a8d80..91f884face2 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/info.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/info.adoc @@ -10,11 +10,11 @@ The `info` endpoint provides general information about the application. To retrieve the information about the application, make a `GET` request to `/actuator/info`, as shown in the following curl-based example: -include::{snippets}info/curl-request.adoc[] +include::{snippets}/info/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}info/http-response.adoc[] +include::{snippets}/info/http-response.adoc[] @@ -33,7 +33,7 @@ Spring Boot provides `build` and `git` contributions. The following table describe the structure of the `build` section of the response: [cols="2,1,3"] -include::{snippets}info/response-fields-beneath-build.adoc[] +include::{snippets}/info/response-fields-beneath-build.adoc[] @@ -43,4 +43,4 @@ include::{snippets}info/response-fields-beneath-build.adoc[] The following table describes the structure of the `git` section of the response: [cols="2,1,3"] -include::{snippets}info/response-fields-beneath-git.adoc[] +include::{snippets}/info/response-fields-beneath-git.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/integrationgraph.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/integrationgraph.adoc similarity index 80% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/integrationgraph.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/integrationgraph.adoc index e2d3274729d..5a2b28a63a0 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/integrationgraph.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/integrationgraph.adoc @@ -9,11 +9,11 @@ The `integrationgraph` endpoint exposes a graph containing all Spring Integratio == Retrieving the Spring Integration graph To retrieve the information about the application, make a `GET` request to `/actuator/integrationgraph`, as shown in the following curl-based example: -include::{snippets}integrationgraph/graph/curl-request.adoc[] +include::{snippets}/integrationgraph/graph/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}integrationgraph/graph/http-response.adoc[] +include::{snippets}/integrationgraph/graph/http-response.adoc[] @@ -28,8 +28,8 @@ More information about the structure can be found in the https://docs.spring.io/ == Rebuilding the Spring Integration graph To rebuild the exposed graph, make a `POST` request to `/actuator/integrationgraph`, as shown in the following curl-based example: -include::{snippets}integrationgraph/rebuild/curl-request.adoc[] +include::{snippets}/integrationgraph/rebuild/curl-request.adoc[] This will result in a `204 - No Content` response: -include::{snippets}integrationgraph/rebuild/http-response.adoc[] +include::{snippets}/integrationgraph/rebuild/http-response.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/liquibase.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/liquibase.adoc similarity index 79% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/liquibase.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/liquibase.adoc index 1e84c8efac8..a517d85cce2 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/liquibase.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/liquibase.adoc @@ -10,11 +10,11 @@ The `liquibase` endpoint provides information about database change sets applied To retrieve the changes, make a `GET` request to `/actuator/liquibase`, as shown in the following curl-based example: -include::{snippets}liquibase/curl-request.adoc[] +include::{snippets}/liquibase/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}liquibase/http-response.adoc[] +include::{snippets}/liquibase/http-response.adoc[] @@ -25,4 +25,4 @@ The response contains details of the application's Liquibase change sets. The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}liquibase/response-fields.adoc[] +include::{snippets}/liquibase/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/logfile.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/logfile.adoc similarity index 77% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/logfile.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/logfile.adoc index 99121fc6734..9fd1dc8658f 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/logfile.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/logfile.adoc @@ -10,11 +10,11 @@ The `logfile` endpoint provides access to the contents of the application's log To retrieve the log file, make a `GET` request to `/actuator/logfile`, as shown in the following curl-based example: -include::{snippets}logfile/entire/curl-request.adoc[] +include::{snippets}/logfile/entire/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}logfile/entire/http-response.adoc[] +include::{snippets}/logfile/entire/http-response.adoc[] @@ -25,9 +25,9 @@ NOTE: Retrieving part of the log file is not supported when using Jersey. To retrieve part of the log file, make a `GET` request to `/actuator/logfile` by using the `Range` header, as shown in the following curl-based example: -include::{snippets}logfile/range/curl-request.adoc[] +include::{snippets}/logfile/range/curl-request.adoc[] The preceding example retrieves the first 1024 bytes of the log file. The resulting response is similar to the following: -include::{snippets}logfile/range/http-response.adoc[] +include::{snippets}/logfile/range/http-response.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/loggers.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/loggers.adoc similarity index 79% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/loggers.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/loggers.adoc index e4609c73e7f..5e88b104e45 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/loggers.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/loggers.adoc @@ -10,11 +10,11 @@ The `loggers` endpoint provides access to the application's loggers and the conf To retrieve the application's loggers, make a `GET` request to `/actuator/loggers`, as shown in the following curl-based example: -include::{snippets}loggers/all/curl-request.adoc[] +include::{snippets}/loggers/all/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}loggers/all/http-response.adoc[] +include::{snippets}/loggers/all/http-response.adoc[] @@ -25,7 +25,7 @@ The response contains details of the application's loggers. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}loggers/all/response-fields.adoc[] +include::{snippets}/loggers/all/response-fields.adoc[] @@ -34,12 +34,12 @@ include::{snippets}loggers/all/response-fields.adoc[] To retrieve a single logger, make a `GET` request to `/actuator/loggers/{logger.name}`, as shown in the following curl-based example: -include::{snippets}loggers/single/curl-request.adoc[] +include::{snippets}/loggers/single/curl-request.adoc[] The preceding example retrieves information about the logger named `com.example`. The resulting response is similar to the following: -include::{snippets}loggers/single/http-response.adoc[] +include::{snippets}/loggers/single/http-response.adoc[] @@ -50,7 +50,7 @@ The response contains details of the requested logger. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}loggers/single/response-fields.adoc[] +include::{snippets}/loggers/single/response-fields.adoc[] @@ -60,12 +60,12 @@ include::{snippets}loggers/single/response-fields.adoc[] To retrieve a single group, make a `GET` request to `/actuator/loggers/{group.name}`, as shown in the following curl-based example: -include::{snippets}loggers/group/curl-request.adoc[] +include::{snippets}/loggers/group/curl-request.adoc[] The preceding example retrieves information about the logger group named `test`. The resulting response is similar to the following: -include::{snippets}loggers/group/http-response.adoc[] +include::{snippets}/loggers/group/http-response.adoc[] @@ -76,7 +76,7 @@ The response contains details of the requested group. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}loggers/group/response-fields.adoc[] +include::{snippets}/loggers/group/response-fields.adoc[] @@ -85,7 +85,7 @@ include::{snippets}loggers/group/response-fields.adoc[] To set the level of a logger, make a `POST` request to `/actuator/loggers/{logger.name}` with a JSON body that specifies the configured level for the logger, as shown in the following curl-based example: -include::{snippets}loggers/set/curl-request.adoc[] +include::{snippets}/loggers/set/curl-request.adoc[] The preceding example sets the `configuredLevel` of the `com.example` logger to `DEBUG`. @@ -98,7 +98,7 @@ The request specifies the desired level of the logger. The following table describes the structure of the request: [cols="3,1,3"] -include::{snippets}loggers/set/request-fields.adoc[] +include::{snippets}/loggers/set/request-fields.adoc[] @@ -107,7 +107,7 @@ include::{snippets}loggers/set/request-fields.adoc[] To set the level of a logger, make a `POST` request to `/actuator/loggers/{group.name}` with a JSON body that specifies the configured level for the logger group, as shown in the following curl-based example: -include::{snippets}loggers/setGroup/curl-request.adoc[] +include::{snippets}/loggers/setGroup/curl-request.adoc[] The preceding example sets the `configuredLevel` of the `test` logger group to `DEBUG`. @@ -120,7 +120,7 @@ The request specifies the desired level of the logger group. The following table describes the structure of the request: [cols="3,1,3"] -include::{snippets}loggers/set/request-fields.adoc[] +include::{snippets}/loggers/set/request-fields.adoc[] @@ -129,6 +129,6 @@ include::{snippets}loggers/set/request-fields.adoc[] To clear the level of a logger, make a `POST` request to `/actuator/loggers/{logger.name}` with a JSON body containing an empty object, as shown in the following curl-based example: -include::{snippets}loggers/clear/curl-request.adoc[] +include::{snippets}/loggers/clear/curl-request.adoc[] The preceding example clears the configured level of the `com.example` logger. diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/mappings.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/mappings.adoc similarity index 83% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/mappings.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/mappings.adoc index 1d7371d9e25..20ac03e0f78 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/mappings.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/mappings.adoc @@ -10,11 +10,11 @@ The `mappings` endpoint provides information about the application's request map To retrieve the mappings, make a `GET` request to `/actuator/mappings`, as shown in the following curl-based example: -include::{snippets}mappings/curl-request.adoc[] +include::{snippets}/mappings/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}mappings/http-response.adoc[] +include::{snippets}/mappings/http-response.adoc[] @@ -26,7 +26,7 @@ The items found in the response depend on the type of web application (reactive The following table describes the structure of the common elements of the response: [cols="2,1,3"] -include::{snippets}mappings/response-fields.adoc[] +include::{snippets}/mappings/response-fields.adoc[] The entries that may be found in `contexts.*.mappings` are described in the following sections. @@ -38,7 +38,7 @@ When using Spring MVC, the response contains details of any `DispatcherServlet` The following table describes the structure of this section of the response: [cols="4,1,2"] -include::{snippets}mappings/response-fields-dispatcher-servlets.adoc[] +include::{snippets}/mappings/response-fields-dispatcher-servlets.adoc[] @@ -49,7 +49,7 @@ When using the Servlet stack, the response contains details of any `Servlet` map The following table describes the structure of this section of the response: [cols="2,1,3"] -include::{snippets}mappings/response-fields-servlets.adoc[] +include::{snippets}/mappings/response-fields-servlets.adoc[] @@ -60,7 +60,7 @@ When using the Servlet stack, the response contains details of any `Filter` mapp The following table describes the structure of this section of the response: [cols="2,1,3"] -include::{snippets}mappings/response-fields-servlet-filters.adoc[] +include::{snippets}/mappings/response-fields-servlet-filters.adoc[] @@ -71,4 +71,4 @@ When using Spring WebFlux, the response contains details of any `DispatcherHandl The following table describes the structure of this section of the response: [cols="4,1,2"] -include::{snippets}mappings/response-fields-dispatcher-handlers.adoc[] +include::{snippets}/mappings/response-fields-dispatcher-handlers.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/metrics.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/metrics.adoc similarity index 76% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/metrics.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/metrics.adoc index db26c3fd95e..ac5430abe8f 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/metrics.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/metrics.adoc @@ -10,11 +10,11 @@ The `metrics` endpoint provides access to application metrics. To retrieve the names of the available metrics, make a `GET` request to `/actuator/metrics`, as shown in the following curl-based example: -include::{snippets}metrics/names/curl-request.adoc[] +include::{snippets}/metrics/names/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}metrics/names/http-response.adoc[] +include::{snippets}/metrics/names/http-response.adoc[] @@ -25,7 +25,7 @@ The response contains details of the metric names. The following table describes the structure of the response: [cols="3,1,2"] -include::{snippets}metrics/names/response-fields.adoc[] +include::{snippets}/metrics/names/response-fields.adoc[] @@ -34,12 +34,12 @@ include::{snippets}metrics/names/response-fields.adoc[] To retrieve a metric, make a `GET` request to `/actuator/metrics/{metric.name}`, as shown in the following curl-based example: -include::{snippets}metrics/metric/curl-request.adoc[] +include::{snippets}/metrics/metric/curl-request.adoc[] The preceding example retrieves information about the metric named `jvm.memory.max`. The resulting response is similar to the following: -include::{snippets}metrics/metric/http-response.adoc[] +include::{snippets}/metrics/metric/http-response.adoc[] @@ -50,7 +50,7 @@ The endpoint uses query parameters to <> into The following table shows the single supported query parameter: [cols="2,4"] -include::{snippets}metrics/metric-with-tags/request-parameters.adoc[] +include::{snippets}/metrics/metric-with-tags/request-parameters.adoc[] @@ -60,7 +60,7 @@ include::{snippets}metrics/metric-with-tags/request-parameters.adoc[] The response contains details of the metric. The following table describes the structure of the response: -include::{snippets}metrics/metric/response-fields.adoc[] +include::{snippets}/metrics/metric/response-fields.adoc[] [[metrics-drilling-down]] @@ -68,9 +68,9 @@ include::{snippets}metrics/metric/response-fields.adoc[] To drill down into a metric, make a `GET` request to `/actuator/metrics/{metric.name}` using the `tag` query parameter, as shown in the following curl-based example: -include::{snippets}metrics/metric-with-tags/curl-request.adoc[] +include::{snippets}/metrics/metric-with-tags/curl-request.adoc[] The preceding example retrieves the `jvm.memory.max` metric, where the `area` tag has a value of `nonheap` and the `id` attribute has a value of `Compressed Class Space`. The resulting response is similar to the following: -include::{snippets}metrics/metric-with-tags/http-response.adoc[] +include::{snippets}/metrics/metric-with-tags/http-response.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/prometheus.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/prometheus.adoc similarity index 79% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/prometheus.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/prometheus.adoc index 1d1006bc376..16d2205ba4a 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/prometheus.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/prometheus.adoc @@ -10,8 +10,8 @@ The `prometheus` endpoint provides Spring Boot application's metrics in the form To retrieve the metrics, make a `GET` request to `/actuator/prometheus`, as shown in the following curl-based example: -include::{snippets}prometheus/curl-request.adoc[] +include::{snippets}/prometheus/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}prometheus/http-response.adoc[] +include::{snippets}/prometheus/http-response.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/scheduledtasks.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/scheduledtasks.adoc similarity index 78% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/scheduledtasks.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/scheduledtasks.adoc index a3a4f3a9a4c..1e69e6046a3 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/scheduledtasks.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/scheduledtasks.adoc @@ -10,11 +10,11 @@ The `scheduledtasks` endpoint provides information about the application's sched To retrieve the scheduled tasks, make a `GET` request to `/actuator/scheduledtasks`, as shown in the following curl-based example: -include::{snippets}scheduled-tasks/curl-request.adoc[] +include::{snippets}/scheduled-tasks/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}scheduled-tasks/http-response.adoc[] +include::{snippets}/scheduled-tasks/http-response.adoc[] @@ -25,4 +25,4 @@ The response contains details of the application's scheduled tasks. The following table describes the structure of the response: [cols="2,1,3"] -include::{snippets}scheduled-tasks/response-fields.adoc[] +include::{snippets}/scheduled-tasks/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/sessions.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/sessions.adoc similarity index 78% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/sessions.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/sessions.adoc index 8cc3508d9e9..01f2d8a8428 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/sessions.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/sessions.adoc @@ -10,12 +10,12 @@ The `sessions` endpoint provides information about the application's HTTP sessio To retrieve the sessions, make a `GET` request to `/actuator/sessions`, as shown in the following curl-based example: -include::{snippets}sessions/username/curl-request.adoc[] +include::{snippets}/sessions/username/curl-request.adoc[] The preceding examples retrieves all of the sessions for the user whose username is `alice`. The resulting response is similar to the following: -include::{snippets}sessions/username/http-response.adoc[] +include::{snippets}/sessions/username/http-response.adoc[] @@ -26,7 +26,7 @@ The endpoint uses query parameters to limit the sessions that it returns. The following table shows the single required query parameter: [cols="2,4"] -include::{snippets}sessions/username/request-parameters.adoc[] +include::{snippets}/sessions/username/request-parameters.adoc[] @@ -37,7 +37,7 @@ The response contains details of the matching sessions. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}sessions/username/response-fields.adoc[] +include::{snippets}/sessions/username/response-fields.adoc[] @@ -46,12 +46,12 @@ include::{snippets}sessions/username/response-fields.adoc[] To retrieve a single session, make a `GET` request to `/actuator/sessions/\{id}`, as shown in the following curl-based example: -include::{snippets}sessions/id/curl-request.adoc[] +include::{snippets}/sessions/id/curl-request.adoc[] The preceding example retrieves the session with the `id` of `4db5efcc-99cb-4d05-a52c-b49acfbb7ea9`. The resulting response is similar to the following: -include::{snippets}sessions/id/http-response.adoc[] +include::{snippets}/sessions/id/http-response.adoc[] @@ -62,7 +62,7 @@ The response contains details of the requested session. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}sessions/id/response-fields.adoc[] +include::{snippets}/sessions/id/response-fields.adoc[] @@ -71,6 +71,6 @@ include::{snippets}sessions/id/response-fields.adoc[] To delete a session, make a `DELETE` request to `/actuator/sessions/\{id}`, as shown in the following curl-based example: -include::{snippets}sessions/delete/curl-request.adoc[] +include::{snippets}/sessions/delete/curl-request.adoc[] The preceding example deletes the session with the `id` of `4db5efcc-99cb-4d05-a52c-b49acfbb7ea9`. diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/shutdown.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/shutdown.adoc similarity index 78% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/shutdown.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/shutdown.adoc index 00aec5b1bf0..2231904f675 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/shutdown.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/shutdown.adoc @@ -10,11 +10,11 @@ The `shutdown` endpoint is used to shut down the application. To shut down the application, make a `POST` request to `/actuator/shutdown`, as shown in the following curl-based example: -include::{snippets}shutdown/curl-request.adoc[] +include::{snippets}/shutdown/curl-request.adoc[] A response similar to the following is produced: -include::{snippets}shutdown/http-response.adoc[] +include::{snippets}/shutdown/http-response.adoc[] @@ -25,4 +25,4 @@ The response contains details of the result of the shutdown request. The following table describes the structure of the response: [cols="3,1,3"] -include::{snippets}shutdown/response-fields.adoc[] +include::{snippets}/shutdown/response-fields.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/threaddump.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/threaddump.adoc similarity index 76% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/threaddump.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/threaddump.adoc index fa61f6df0c9..e141296d703 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/endpoints/threaddump.adoc +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/endpoints/threaddump.adoc @@ -10,11 +10,11 @@ The `threaddump` endpoint provides a thread dump from the application's JVM. To retrieve the thread dump as JSON, make a `GET` request to `/actuator/threaddump` with an appropriate `Accept` header, as shown in the following curl-based example: -include::{snippets}threaddump/json/curl-request.adoc[] +include::{snippets}/threaddump/json/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}threaddump/json/http-response.adoc[] +include::{snippets}/threaddump/json/http-response.adoc[] @@ -25,7 +25,7 @@ The response contains details of the JVM's threads. The following table describes the structure of the response: [cols="3,1,2"] -include::{snippets}threaddump/json/response-fields.adoc[] +include::{snippets}/threaddump/json/response-fields.adoc[] @@ -35,8 +35,8 @@ include::{snippets}threaddump/json/response-fields.adoc[] To retrieve the thread dump as text, make a `GET` request to `/actuator/threaddump` that accepts `text/plain`, as shown in the following curl-based example: -include::{snippets}threaddump/text/curl-request.adoc[] +include::{snippets}/threaddump/text/curl-request.adoc[] The resulting response is similar to the following: -include::{snippets}threaddump/text/http-response.adoc[] +include::{snippets}/threaddump/text/http-response.adoc[] diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/index.adoc b/spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/index.adoc similarity index 100% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/asciidoc/index.adoc rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/docs/asciidoc/index.adoc diff --git a/spring-boot-project/spring-boot-actuator/build.gradle b/spring-boot-project/spring-boot-actuator/build.gradle new file mode 100644 index 00000000000..73dddb18803 --- /dev/null +++ b/spring-boot-project/spring-boot-actuator/build.gradle @@ -0,0 +1,96 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.configuration-properties' + id 'org.springframework.boot.optional-dependencies' + id 'org.springframework.boot.deployed' +} + +description = 'Spring Boot Actuator' + +dependencies { + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation project(':spring-boot-project:spring-boot') + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + optional 'com.fasterxml.jackson.core:jackson-databind' + optional 'com.hazelcast:hazelcast' + optional 'com.hazelcast:hazelcast-spring' + optional 'com.sun.mail:jakarta.mail' + optional 'com.zaxxer:HikariCP' + optional 'io.lettuce:lettuce-core' + optional 'io.micrometer:micrometer-core' + optional 'io.micrometer:micrometer-registry-prometheus' + optional 'io.prometheus:simpleclient_pushgateway' + optional 'io.reactivex:rxjava-reactive-streams' + optional 'io.searchbox:jest' + optional 'org.elasticsearch.client:elasticsearch-rest-client' + optional ('io.undertow:undertow-servlet') { + exclude group: 'org.jboss.spec.javax.annotation', module: 'jboss-annotations-api_1.2_spec' + exclude group: 'org.jboss.spec.javax.servlet', module: 'jboss-servlet-api_4.0_spec' + } + optional 'javax.cache:cache-api' + optional 'javax.jms:javax.jms-api' + optional 'net.sf.ehcache:ehcache' + optional 'org.apache.tomcat.embed:tomcat-embed-core' + optional 'org.aspectj:aspectjweaver' + optional 'org.eclipse.jetty:jetty-server' + optional 'org.elasticsearch:elasticsearch' + optional 'org.flywaydb:flyway-core' + optional 'org.glassfish.jersey.core:jersey-server' + optional 'org.glassfish.jersey.containers:jersey-container-servlet-core' + optional 'org.hibernate.validator:hibernate-validator' + optional 'org.infinispan:infinispan-spring4-embedded' + optional 'org.influxdb:influxdb-java' + optional 'org.liquibase:liquibase-core' + optional 'org.mongodb:mongodb-driver-async' + optional 'org.mongodb:mongodb-driver-reactivestreams' + optional 'org.springframework:spring-jdbc' + optional 'org.springframework:spring-messaging' + optional 'org.springframework:spring-webflux' + optional 'org.springframework:spring-web' + optional 'org.springframework:spring-webmvc' + optional 'org.springframework.amqp:spring-rabbit' + optional 'org.springframework.data:spring-data-cassandra' + optional 'org.springframework.data:spring-data-couchbase' + optional 'org.springframework.data:spring-data-ldap' + optional 'org.springframework.data:spring-data-mongodb' + optional 'org.springframework.data:spring-data-neo4j' + optional 'org.springframework.data:spring-data-redis' + optional 'org.springframework.data:spring-data-rest-webmvc' + optional 'org.springframework.data:spring-data-solr' + optional 'org.springframework.integration:spring-integration-core' + optional 'org.springframework.security:spring-security-core' + optional 'org.springframework.security:spring-security-web' + optional 'org.springframework.session:spring-session-core' + + testImplementation project(':spring-boot-project:spring-boot-test') + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation project(':spring-boot-project:spring-boot-autoconfigure') + testImplementation 'org.assertj:assertj-core' + testImplementation 'com.jayway.jsonpath:json-path' + testImplementation 'io.projectreactor:reactor-test' + testImplementation 'org.apache.logging.log4j:log4j-to-slf4j' + testImplementation 'org.awaitility:awaitility' + testImplementation 'org.glassfish.jersey.media:jersey-media-json-jackson' + testImplementation 'org.hamcrest:hamcrest' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.mockito:mockito-core' + testImplementation 'org.mockito:mockito-junit-jupiter' + testImplementation 'org.skyscreamer:jsonassert' + testImplementation 'org.springframework:spring-test' + + testRuntimeOnly 'io.projectreactor.netty:reactor-netty' + testRuntimeOnly 'javax.xml.bind:jaxb-api' + testRuntimeOnly 'org.apache.tomcat.embed:tomcat-embed-el' + testRuntimeOnly 'org.glassfish.jersey.ext:jersey-spring4' + testRuntimeOnly 'org.hsqldb:hsqldb' +} + +compileJava { + options.compilerArgs << '-parameters' +} + +compileTestJava { + options.compilerArgs << '-parameters' +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-actuator/pom.xml b/spring-boot-project/spring-boot-actuator/pom.xml deleted file mode 100644 index cedc88716cf..00000000000 --- a/spring-boot-project/spring-boot-actuator/pom.xml +++ /dev/null @@ -1,401 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-actuator - Spring Boot Actuator - Spring Boot Actuator - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - - com.fasterxml.jackson.core - jackson-databind - true - - - com.hazelcast - hazelcast - true - - - com.hazelcast - hazelcast-spring - true - - - com.sun.mail - jakarta.mail - true - - - com.zaxxer - HikariCP - true - - - io.lettuce - lettuce-core - true - - - io.micrometer - micrometer-core - true - - - io.micrometer - micrometer-registry-prometheus - true - - - io.prometheus - simpleclient_pushgateway - true - - - io.reactivex - rxjava-reactive-streams - true - - - io.searchbox - jest - true - - - org.elasticsearch.client - elasticsearch-rest-client - true - - - io.undertow - undertow-servlet - true - - - org.jboss.spec.javax.servlet - jboss-servlet-api_3.1_spec - - - - - javax.cache - cache-api - true - - - jakarta.jms - jakarta.jms-api - true - - - jakarta.ws.rs - jakarta.ws.rs-api - true - - - net.sf.ehcache - ehcache - true - - - org.apache.tomcat.embed - tomcat-embed-core - true - - - org.aspectj - aspectjweaver - true - - - org.eclipse.jetty - jetty-server - true - - - javax.servlet - javax.servlet-api - - - - - org.elasticsearch - elasticsearch - true - - - org.flywaydb - flyway-core - true - - - org.glassfish.jersey.core - jersey-server - true - - - javax.validation - validation-api - - - - - org.glassfish.jersey.containers - jersey-container-servlet-core - true - - - org.hibernate.validator - hibernate-validator - true - - - javax.validation - validation-api - - - - - org.infinispan - infinispan-spring5-embedded - true - - - org.influxdb - influxdb-java - true - - - org.liquibase - liquibase-core - true - - - org.mongodb - mongodb-driver-async - true - - - org.mongodb - mongodb-driver-reactivestreams - true - - - org.springframework - spring-jdbc - true - - - org.springframework - spring-messaging - true - - - org.springframework - spring-webflux - true - - - org.springframework - spring-web - true - - - org.springframework - spring-webmvc - true - - - org.springframework.amqp - spring-rabbit - true - - - org.springframework.data - spring-data-cassandra - true - - - org.springframework.data - spring-data-couchbase - true - - - org.springframework.data - spring-data-ldap - true - - - org.springframework.data - spring-data-mongodb - true - - - org.springframework.data - spring-data-neo4j - true - - - org.springframework.data - spring-data-redis - true - - - org.springframework.data - spring-data-rest-webmvc - true - - - org.springframework.data - spring-data-solr - true - - - - wstx-asl - org.codehaus.woodstox - - - - - org.springframework.integration - spring-integration-core - true - - - org.springframework.security - spring-security-core - true - - - org.springframework.security - spring-security-web - true - - - org.springframework.session - spring-session-core - true - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot-test - test - - - org.springframework.boot - spring-boot-test-support - test - - - org.springframework.boot - spring-boot-autoconfigure - test - - - ch.qos.logback - logback-classic - test - - - jakarta.validation - jakarta.validation-api - test - - - jakarta.xml.bind - jakarta.xml.bind-api - test - - - org.apache.logging.log4j - log4j-to-slf4j - test - - - org.apache.tomcat.embed - tomcat-embed-el - test - - - org.glassfish.jersey.media - jersey-media-json-jackson - test - - - org.awaitility - awaitility - test - - - com.jayway.jsonpath - json-path - test - - - io.projectreactor - reactor-test - test - - - io.projectreactor.netty - reactor-netty - test - - - org.hsqldb - hsqldb - test - - - org.glassfish.jersey.ext - jersey-spring5 - test - - - javax.validation - validation-api - - - - - org.skyscreamer - jsonassert - test - - - - diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointTestInvocationContextProvider.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointTestInvocationContextProvider.java index 41bf39c07fa..c1669f45457 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointTestInvocationContextProvider.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointTestInvocationContextProvider.java @@ -66,6 +66,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.MergedAnnotations; import org.springframework.core.annotation.MergedAnnotations.SearchStrategy; +import org.springframework.http.HttpMethod; import org.springframework.http.server.reactive.HttpHandler; import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.util.ClassUtils; @@ -192,7 +193,13 @@ class WebEndpointTestInvocationContextProvider implements TestTemplateInvocation DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory( "http://localhost:" + determinePort()); uriBuilderFactory.setEncodingMode(EncodingMode.NONE); - return WebTestClient.bindToServer().uriBuilderFactory(uriBuilderFactory).responseTimeout(TIMEOUT).build(); + return WebTestClient.bindToServer().uriBuilderFactory(uriBuilderFactory).responseTimeout(TIMEOUT) + .filter((request, next) -> { + if (HttpMethod.GET == request.method()) { + return next.exchange(request).retry(10); + } + return next.exchange(request); + }).build(); } private int determinePort() { diff --git a/spring-boot-project/spring-boot-autoconfigure/build.gradle b/spring-boot-project/spring-boot-autoconfigure/build.gradle new file mode 100644 index 00000000000..ff509e74258 --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/build.gradle @@ -0,0 +1,185 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' + id 'org.springframework.boot.auto-configuration' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' + id 'org.springframework.boot.optional-dependencies' +} + +description = 'Spring Boot AutoConfigure' + +dependencies { + api project(':spring-boot-project:spring-boot') + + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + optional 'com.atomikos:transactions-jdbc' + optional 'com.atomikos:transactions-jta' + optional 'com.couchbase.client:couchbase-spring-cache' + optional 'com.fasterxml.jackson.core:jackson-databind' + optional 'com.fasterxml.jackson.dataformat:jackson-dataformat-cbor' + optional 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml' + optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda' + optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' + optional 'com.fasterxml.jackson.module:jackson-module-parameter-names' + optional 'com.google.code.gson:gson' + optional 'com.hazelcast:hazelcast' + optional 'com.hazelcast:hazelcast-client' + optional 'com.hazelcast:hazelcast-spring' + optional 'com.h2database:h2' + optional 'com.samskivert:jmustache' + optional 'com.sun.mail:jakarta.mail' + optional 'de.flapdoodle.embed:de.flapdoodle.embed.mongo' + optional 'io.lettuce:lettuce-core' + optional 'io.projectreactor.netty:reactor-netty' + optional 'io.searchbox:jest' + optional 'io.rsocket:rsocket-core' + optional 'io.rsocket:rsocket-transport-netty' + optional ('io.undertow:undertow-servlet') { + exclude group: 'org.jboss.spec.javax.annotation', module: 'jboss-annotations-api_1.2_spec' + exclude group: 'org.jboss.spec.javax.servlet', module: 'jboss-servlet-api_4.0_spec' + } + optional ('io.undertow:undertow-websockets-jsr') { + exclude group: 'org.jboss.spec.javax.annotation', module: 'jboss-annotations-api_1.2_spec' + exclude group: 'org.jboss.spec.javax.servlet', module: 'jboss-servlet-api_4.0_spec' + } + optional 'jakarta.jms:jakarta.jms-api' + optional 'jakarta.mail:jakarta.mail-api' + optional 'jakarta.json.bind:jakarta.json.bind-api' + optional 'jakarta.persistence:jakarta.persistence-api' + optional 'jakarta.validation:jakarta.validation-api' + optional 'jakarta.ws.rs:jakarta.ws.rs-api' + optional 'javax.cache:cache-api' + optional 'javax.money:money-api' + optional 'net.sf.ehcache:ehcache' + optional 'org.apache.activemq:activemq-broker' + optional 'org.apache.activemq:artemis-jms-client' + optional 'org.apache.activemq:artemis-jms-server' + optional 'org.apache.commons:commons-dbcp2' + optional 'org.apache.kafka:kafka-streams' + optional 'org.apache.solr:solr-solrj' + optional 'org.apache.tomcat.embed:tomcat-embed-core' + optional 'org.apache.tomcat.embed:tomcat-embed-el' + optional 'org.apache.tomcat.embed:tomcat-embed-websocket' + optional 'org.apache.tomcat:tomcat-jdbc' + optional 'org.codehaus.btm:btm' + optional 'org.codehaus.groovy:groovy-templates' + optional 'com.github.ben-manes.caffeine:caffeine' + optional 'com.github.mxab.thymeleaf.extras:thymeleaf-extras-data-attribute' + optional 'com.sendgrid:sendgrid-java' + optional 'com.unboundid:unboundid-ldapsdk' + optional 'com.zaxxer:HikariCP' + optional 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' + optional 'org.aspectj:aspectjweaver' + optional 'org.eclipse.jetty:jetty-webapp' + optional 'org.eclipse.jetty:jetty-reactive-httpclient' + optional 'org.eclipse.jetty.websocket:javax-websocket-server-impl' + optional 'org.ehcache:ehcache' + optional 'org.elasticsearch.client:elasticsearch-rest-client' + optional 'org.elasticsearch.client:elasticsearch-rest-high-level-client' + optional 'org.flywaydb:flyway-core' + optional 'org.freemarker:freemarker' + optional 'org.glassfish.jersey.core:jersey-server' + optional 'org.glassfish.jersey.containers:jersey-container-servlet-core' + optional 'org.glassfish.jersey.containers:jersey-container-servlet' + optional 'org.glassfish.jersey.ext:jersey-spring5' + optional 'org.glassfish.jersey.media:jersey-media-json-jackson' + optional 'org.hibernate:hibernate-core' + optional 'org.hibernate:hibernate-jcache' + optional 'org.hibernate.validator:hibernate-validator' + optional 'org.infinispan:infinispan-jcache' + optional 'org.infinispan:infinispan-spring5-embedded' + optional 'org.influxdb:influxdb-java' + optional 'org.jboss:jboss-transaction-spi' + optional 'org.jooq:jooq' + optional 'org.liquibase:liquibase-core' + optional 'org.messaginghub:pooled-jms' + optional 'org.mongodb:mongodb-driver-async' + optional 'org.mongodb:mongodb-driver-reactivestreams' + optional 'org.quartz-scheduler:quartz' + optional 'org.springframework:spring-jdbc' + optional 'org.springframework.integration:spring-integration-core' + optional 'org.springframework.integration:spring-integration-jdbc' + optional 'org.springframework.integration:spring-integration-jmx' + optional 'org.springframework:spring-jms' + optional 'org.springframework:spring-orm' + optional 'org.springframework:spring-tx' + optional 'org.springframework:spring-web' + optional 'org.springframework:spring-websocket' + optional 'org.springframework:spring-webflux' + optional 'org.springframework:spring-webmvc' + optional 'org.springframework.batch:spring-batch-core' + optional 'org.springframework.data:spring-data-couchbase' + optional 'org.springframework.data:spring-data-jpa' + optional 'org.springframework.data:spring-data-rest-webmvc' + optional 'org.springframework.data:spring-data-cassandra' + optional 'org.springframework.data:spring-data-elasticsearch' + optional 'org.springframework.data:spring-data-jdbc' + optional 'org.springframework.data:spring-data-ldap' + optional 'org.springframework.data:spring-data-mongodb' + optional 'org.springframework.data:spring-data-neo4j' + optional 'org.springframework.data:spring-data-redis' + optional 'org.springframework.data:spring-data-solr' + optional 'org.springframework.hateoas:spring-hateoas' + optional 'org.springframework.security:spring-security-acl' + optional 'org.springframework.security:spring-security-config' + optional 'org.springframework.security:spring-security-data' + optional 'org.springframework.security:spring-security-oauth2-client' + optional 'org.springframework.security:spring-security-oauth2-jose' + optional 'org.springframework.security:spring-security-oauth2-resource-server' + optional 'org.springframework.security:spring-security-rsocket' + optional 'org.springframework.security:spring-security-saml2-service-provider' + optional 'org.springframework.security:spring-security-web' + optional 'org.springframework.session:spring-session-core' + optional 'org.springframework.session:spring-session-data-mongodb' + optional 'org.springframework.session:spring-session-data-redis' + optional 'org.springframework.session:spring-session-hazelcast' + optional 'org.springframework.session:spring-session-jdbc' + optional 'org.springframework.amqp:spring-rabbit' + optional 'org.springframework.kafka:spring-kafka' + optional 'org.springframework.cloud:spring-cloud-spring-service-connector' + optional 'org.springframework.ws:spring-ws-core' + optional 'org.thymeleaf:thymeleaf' + optional 'org.thymeleaf:thymeleaf-spring5' + optional 'org.thymeleaf.extras:thymeleaf-extras-java8time' + optional 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' + optional 'redis.clients:jedis' + + testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation project(':spring-boot-project:spring-boot-test') + testImplementation 'ch.qos.logback:logback-classic' + testImplementation 'commons-fileupload:commons-fileupload' + testImplementation 'com.atomikos:transactions-jms' + testImplementation 'com.jayway.jsonpath:json-path' + testImplementation 'com.squareup.okhttp3:mockwebserver' + testImplementation 'com.sun.xml.messaging.saaj:saaj-impl' + testImplementation 'jakarta.json:jakarta.json-api' + testImplementation 'jakarta.xml.ws:jakarta.xml.ws-api' + testImplementation 'mysql:mysql-connector-java' + testImplementation 'org.apache.johnzon:johnzon-jsonb' + testImplementation 'org.apache.logging.log4j:log4j-to-slf4j' + testImplementation 'org.apache.tomcat.embed:tomcat-embed-jasper' + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.awaitility:awaitility' + testImplementation 'org.hsqldb:hsqldb' + testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.neo4j:neo4j-ogm-bolt-native-types' + testImplementation 'org.neo4j:neo4j-ogm-http-driver' + testImplementation 'org.neo4j:neo4j-ogm-embedded-driver' + testImplementation 'org.springframework:spring-test' + testImplementation 'org.springframework.kafka:spring-kafka-test' + testImplementation 'org.springframework.security:spring-security-test' + testImplementation 'org.testcontainers:cassandra' + testImplementation 'org.testcontainers:couchbase' + testImplementation 'org.testcontainers:elasticsearch' + testImplementation 'org.testcontainers:junit-jupiter' + testImplementation 'org.testcontainers:testcontainers' + testImplementation 'org.yaml:snakeyaml' + + testRuntimeOnly 'org.jetbrains.kotlin:kotlin-reflect' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} diff --git a/spring-boot-project/spring-boot-autoconfigure/pom.xml b/spring-boot-project/spring-boot-autoconfigure/pom.xml deleted file mode 100755 index a187161806f..00000000000 --- a/spring-boot-project/spring-boot-autoconfigure/pom.xml +++ /dev/null @@ -1,1044 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-autoconfigure - Spring Boot AutoConfigure - Spring Boot AutoConfigure - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot - - - - com.atomikos - transactions-jdbc - true - - - com.atomikos - transactions-jta - true - - - com.couchbase.client - couchbase-spring-cache - true - - - com.fasterxml.jackson.core - jackson-databind - true - - - com.fasterxml.jackson.dataformat - jackson-dataformat-cbor - true - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - true - - - com.fasterxml.jackson.datatype - jackson-datatype-joda - true - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - true - - - com.fasterxml.jackson.module - jackson-module-parameter-names - true - - - com.google.code.gson - gson - true - - - com.hazelcast - hazelcast - true - - - com.hazelcast - hazelcast-client - true - - - com.hazelcast - hazelcast-spring - true - - - com.h2database - h2 - true - - - com.samskivert - jmustache - true - - - com.sun.mail - jakarta.mail - true - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - true - - - io.lettuce - lettuce-core - true - - - io.projectreactor.netty - reactor-netty - true - - - io.rsocket - rsocket-core - true - - - io.rsocket - rsocket-transport-netty - true - - - io.searchbox - jest - true - - - jakarta.json.bind - jakarta.json.bind-api - true - - - javax.cache - cache-api - true - - - javax.money - money-api - true - - - org.apache.kafka - kafka-streams - true - - - javax.ws.rs - javax.ws.rs-api - - - - - org.flywaydb - flyway-core - true - - - org.glassfish.jersey.core - jersey-server - true - - - javax.validation - validation-api - - - - - org.glassfish.jersey.containers - jersey-container-servlet-core - true - - - org.glassfish.jersey.containers - jersey-container-servlet - true - - - org.glassfish.jersey.ext - jersey-spring5 - true - - - org.glassfish.hk2.external - bean-validator - - - org.hibernate - hibernate-validator - - - - - org.glassfish.jersey.media - jersey-media-json-jackson - true - - - org.apache.activemq - activemq-broker - true - - - geronimo-jms_1.1_spec - org.apache.geronimo.specs - - - - - org.apache.activemq - artemis-jms-client - true - - - geronimo-jms_2.0_spec - org.apache.geronimo.specs - - - - - org.apache.activemq - artemis-jms-server - true - - - geronimo-jms_2.0_spec - org.apache.geronimo.specs - - - - - org.apache.commons - commons-dbcp2 - true - - - org.apache.solr - solr-solrj - true - - - org.codehaus.woodstox - wstx-asl - - - log4j - log4j - - - - - org.apache.tomcat.embed - tomcat-embed-core - true - - - org.apache.tomcat.embed - tomcat-embed-el - true - - - org.apache.tomcat.embed - tomcat-embed-websocket - true - - - org.apache.tomcat - tomcat-jdbc - true - - - org.codehaus.btm - btm - true - - - javax.transaction - jta - - - - - org.codehaus.groovy - groovy-templates - true - - - com.sendgrid - sendgrid-java - true - - - com.unboundid - unboundid-ldapsdk - true - - - com.zaxxer - HikariCP - true - - - org.eclipse.jetty - jetty-webapp - true - - - javax.servlet - javax.servlet-api - - - - - org.eclipse.jetty - jetty-reactive-httpclient - true - - - org.eclipse.jetty.websocket - javax-websocket-server-impl - true - - - javax.annotation - javax.annotation-api - - - javax.servlet - javax.servlet-api - - - javax.websocket - javax.websocket-api - - - javax.websocket - javax.websocket-client-api - - - - - io.undertow - undertow-servlet - true - - - io.undertow - undertow-websockets-jsr - true - - - jakarta.persistence - jakarta.persistence-api - true - - - jakarta.validation - jakarta.validation-api - true - - - jakarta.ws.rs - jakarta.ws.rs-api - true - - - org.ehcache - ehcache - true - - - org.elasticsearch.client - elasticsearch-rest-client - true - - - org.elasticsearch.client - elasticsearch-rest-high-level-client - true - - - org.freemarker - freemarker - true - - - org.hibernate - hibernate-core - true - - - javax.activation - javax.activation-api - - - javax.persistence - javax.persistence-api - - - javax.xml.bind - jaxb-api - - - - - org.hibernate - hibernate-jcache - true - - - org.hibernate.validator - hibernate-validator - true - - - javax.validation - validation-api - - - - - org.infinispan - infinispan-jcache - true - - - org.infinispan - infinispan-spring5-embedded - true - - - org.jboss - jboss-transaction-spi - true - - - org.messaginghub - pooled-jms - true - - - org.apache.geronimo.specs - geronimo-jms_2.0_spec - - - - - org.mongodb - mongodb-driver-async - true - - - org.mongodb - mongodb-driver-reactivestreams - true - - - org.springframework - spring-jdbc - true - - - org.springframework.integration - spring-integration-core - true - - - org.springframework.integration - spring-integration-jdbc - true - - - org.springframework.integration - spring-integration-jmx - true - - - org.springframework - spring-jms - true - - - org.springframework - spring-orm - true - - - org.springframework - spring-tx - true - - - org.springframework - spring-web - true - - - org.springframework - spring-websocket - true - - - org.springframework - spring-webflux - true - - - org.springframework - spring-webmvc - true - - - org.springframework.batch - spring-batch-core - true - - - org.springframework.data - spring-data-couchbase - true - - - org.slf4j - jcl-over-slf4j - - - - - org.springframework.data - spring-data-jpa - true - - - jcl-over-slf4j - org.slf4j - - - - - org.springframework.data - spring-data-rest-webmvc - true - - - jcl-over-slf4j - org.slf4j - - - - - org.springframework.data - spring-data-cassandra - true - - - org.springframework.data - spring-data-jdbc - true - - - org.springframework.data - spring-data-ldap - true - - - org.springframework.data - spring-data-mongodb - true - - - jcl-over-slf4j - org.slf4j - - - - - org.springframework.data - spring-data-neo4j - true - - - jcl-over-slf4j - org.slf4j - - - - - org.springframework.data - spring-data-redis - true - - - org.springframework.data - spring-data-elasticsearch - true - - - jcl-over-slf4j - org.slf4j - - - - - org.springframework.data - spring-data-solr - true - - - jcl-over-slf4j - org.slf4j - - - - - org.springframework.hateoas - spring-hateoas - true - - - redis.clients - jedis - true - - - org.liquibase - liquibase-core - true - - - org.springframework.security - spring-security-acl - true - - - org.springframework.security - spring-security-config - true - - - org.springframework.security - spring-security-data - true - - - javax.xml.bind - jaxb-api - - - - - org.springframework.security - spring-security-oauth2-client - true - - - com.sun.mail - javax.mail - - - - - org.springframework.security - spring-security-oauth2-jose - true - - - org.springframework.security - spring-security-oauth2-resource-server - true - - - org.springframework.security - spring-security-rsocket - true - - - org.springframework.security - spring-security-saml2-service-provider - true - - - org.springframework.security - spring-security-web - true - - - org.springframework.session - spring-session-core - true - - - org.springframework.session - spring-session-data-mongodb - true - - - org.springframework.session - spring-session-data-redis - true - - - org.springframework.session - spring-session-hazelcast - true - - - javax.annotation - javax.annotation-api - - - - - org.springframework.session - spring-session-jdbc - true - - - org.springframework.amqp - spring-rabbit - true - - - org.springframework.kafka - spring-kafka - true - - - org.springframework.cloud - spring-cloud-spring-service-connector - true - - - org.springframework.ws - spring-ws-core - true - - - org.thymeleaf - thymeleaf - true - - - org.thymeleaf - thymeleaf-spring5 - true - - - nz.net.ultraq.thymeleaf - thymeleaf-layout-dialect - true - - - com.github.ben-manes.caffeine - caffeine - true - - - com.github.mxab.thymeleaf.extras - thymeleaf-extras-data-attribute - true - - - org.thymeleaf.extras - thymeleaf-extras-java8time - true - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity5 - true - - - jakarta.jms - jakarta.jms-api - true - - - jakarta.mail - jakarta.mail-api - true - - - net.sf.ehcache - ehcache - true - - - org.aspectj - aspectjweaver - true - - - org.influxdb - influxdb-java - true - - - org.jooq - jooq - true - - - javax.xml.bind - jaxb-api - - - - - org.quartz-scheduler - quartz - true - - - - org.springframework.boot - spring-boot-autoconfigure-processor - true - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.jetbrains.kotlin - kotlin-reflect - test - - - org.jetbrains.kotlin - kotlin-stdlib-jdk8 - test - - - org.springframework.boot - spring-boot-test-support - test - - - org.springframework.boot - spring-boot-test - test - - - ch.qos.logback - logback-classic - test - - - commons-fileupload - commons-fileupload - test - - - com.atomikos - transactions-jms - test - - - com.jayway.jsonpath - json-path - test - - - com.squareup.okhttp3 - mockwebserver - test - - - org.hamcrest - hamcrest-core - - - - - com.sun.xml.messaging.saaj - saaj-impl - test - - - jakarta.json - jakarta.json-api - test - - - jakarta.xml.ws - jakarta.xml.ws-api - test - - - mysql - mysql-connector-java - test - - - org.apache.johnzon - johnzon-jsonb - test - - - org.apache.logging.log4j - log4j-to-slf4j - test - - - org.apache.tomcat.embed - tomcat-embed-jasper - test - - - org.awaitility - awaitility - test - - - org.hsqldb - hsqldb - test - - - org.neo4j - neo4j-ogm-bolt-native-types - test - - - org.neo4j - neo4j-ogm-embedded-driver - test - - - org.neo4j - neo4j-ogm-http-driver - test - - - org.springframework - spring-test - test - - - org.springframework.kafka - spring-kafka-test - test - - - org.springframework.security - spring-security-test - test - - - org.testcontainers - cassandra - test - - - org.testcontainers - couchbase - test - - - org.testcontainers - elasticsearch - test - - - org.testcontainers - junit-jupiter - test - - - org.testcontainers - testcontainers - test - - - javax.annotation - javax.annotation-api - - - javax.xml.bind - jaxb-api - - - - - org.yaml - snakeyaml - test - - - - - - org.jetbrains.kotlin - kotlin-maven-plugin - - - test-compile - test-compile - - test-compile - - - - ${project.basedir}/src/test/kotlin - ${project.basedir}/src/test/java - - - - - - - - - - java9+ - - [9,) - - - - org.glassfish.jaxb - jaxb-runtime - true - - - - - diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ReactiveRestClientAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ReactiveRestClientAutoConfigurationTests.java index 8ccaf257f98..614c598ae7f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ReactiveRestClientAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/elasticsearch/ReactiveRestClientAutoConfigurationTests.java @@ -74,10 +74,11 @@ public class ReactiveRestClientAutoConfigurationTests { @Test void restClientCanQueryElasticsearchNode() { - this.contextRunner - .withPropertyValues("spring.data.elasticsearch.client.reactive.endpoints=" - + elasticsearch.getContainerIpAddress() + ":" + elasticsearch.getFirstMappedPort()) - .run((context) -> { + this.contextRunner.withPropertyValues( + "spring.data.elasticsearch.client.reactive.endpoints=" + elasticsearch.getContainerIpAddress() + ":" + + elasticsearch.getFirstMappedPort(), + "spring.data.elasticsearch.client.reactive.connection-timeout=120s", + "spring.data.elasticsearch.client.reactive.socket-timeout=120s").run((context) -> { ReactiveElasticsearchClient client = context.getBean(ReactiveElasticsearchClient.class); Map source = new HashMap<>(); source.put("a", "alpha"); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java index ba889f9762c..2461c1eaa95 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/transaction/TransactionAutoConfigurationTests.java @@ -16,6 +16,8 @@ package org.springframework.boot.autoconfigure.transaction; +import java.util.UUID; + import javax.sql.DataSource; import org.junit.jupiter.api.Test; @@ -81,7 +83,7 @@ class TransactionAutoConfigurationTests { DataSourceTransactionManagerAutoConfiguration.class)) .withUserConfiguration(SinglePlatformTransactionManagerConfiguration.class, SingleReactiveTransactionManagerConfiguration.class) - .run((context) -> { + .withPropertyValues("spring.datasource.url:jdbc:h2:mem:" + UUID.randomUUID()).run((context) -> { PlatformTransactionManager platformTransactionManager = context .getBean(PlatformTransactionManager.class); TransactionTemplate transactionTemplate = context.getBean(TransactionTemplate.class); diff --git a/spring-boot-project/spring-boot-cli/build.gradle b/spring-boot-project/spring-boot-cli/build.gradle new file mode 100644 index 00000000000..db7ee46c8d5 --- /dev/null +++ b/spring-boot-project/spring-boot-cli/build.gradle @@ -0,0 +1,195 @@ +plugins { + id 'java' + id 'org.springframework.boot.deployed' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.integration-test' +} + +description = "Spring Boot CLI" + +configurations { + dependenciesBom + loader + testRepository +} + +dependencies { + compileOnly project(':spring-boot-project:spring-boot') + + compileOnly 'jakarta.servlet:jakarta.servlet-api' + compileOnly 'org.codehaus.groovy:groovy-templates' + compileOnly 'org.springframework:spring-web' + + dependenciesBom project(path: ':spring-boot-project:spring-boot-dependencies', configuration: 'effectiveBom') + + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + implementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools') + + implementation 'com.vaadin.external.google:android-json' + implementation 'jline:jline' + implementation 'net.sf.jopt-simple:jopt-simple' + implementation('org.apache.httpcomponents:httpclient') { + exclude group: 'commons-logging', module: 'commons-logging' + } + implementation 'org.apache.maven:maven-model' + implementation('org.apache.maven:maven-resolver-provider') { + exclude group: 'com.google.guava', module: 'guava' + } + implementation 'org.apache.maven.resolver:maven-resolver-connector-basic' + implementation 'org.apache.maven.resolver:maven-resolver-transport-file' + implementation('org.apache.maven.resolver:maven-resolver-transport-http') { + exclude group: 'org.slf4j', module: 'jcl-over-slf4j' + } + implementation 'org.apache.maven:maven-settings-builder' + implementation 'org.codehaus.groovy:groovy' + implementation 'org.slf4j:slf4j-simple' + implementation 'org.sonatype.plexus:plexus-sec-dispatcher' + implementation('org.sonatype.sisu:sisu-inject-plexus') { + exclude group: 'javax.enterprise', module: 'cdi-api' + exclude group: 'org.sonatype.sisu', module: 'sisu-inject-bean' + } + implementation 'org.springframework:spring-core' + implementation 'org.springframework.security:spring-security-crypto' + + intTestImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + intTestImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools') + intTestImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + intTestImplementation 'org.assertj:assertj-core' + intTestImplementation 'org.junit.jupiter:junit-jupiter' + intTestImplementation 'org.springframework:spring-core' + + loader project(':spring-boot-project:spring-boot-tools:spring-boot-loader') + + testImplementation project(':spring-boot-project:spring-boot') + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation project(':spring-boot-project:spring-boot-test') + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.codehaus.groovy:groovy-templates' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.mockito:mockito-core' + testImplementation 'org.springframework:spring-test' + + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-amqp', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-aop', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-artemis', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-batch', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-integration', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-security', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-web', configuration: 'mavenRepository') +} + +task syncSpringBootDependenciesBom(type: Sync) { + destinationDir = file("$buildDir/generated-resources/org/springframework/boot/cli/compiler/dependencies") + from configurations.dependenciesBom +} + +task syncTestRepository(type: Sync) { + destinationDir = file("${buildDir}/test-repository") + from configurations.testRepository +} + +sourceSets { + main { + output.dir("$buildDir/generated-resources", builtBy: 'syncSpringBootDependenciesBom') + } +} + +test { + dependsOn syncTestRepository + useJUnitPlatform() +} + +task fullJar(type: Jar) { + classifier = 'full' + entryCompression = 'stored' + from(configurations.runtimeClasspath) { + into 'BOOT-INF/lib' + } + from(sourceSets.main.output) { + into 'BOOT-INF/classes' + } + into("") { + from zipTree(configurations.loader.singleFile) + } + manifest { + attributes( + 'Class-Loader': 'groovy.lang.GroovyClassLoader', + 'Main-Class': 'org.springframework.boot.loader.JarLauncher', + 'Start-Class': 'org.springframework.boot.cli.SpringCli' + ) + } +} + +def configureArchive(archive) { + archive.classifier = 'bin' + archive.into "spring-${project.version}" + archive.from(fullJar) { + rename { + it.replace("-full", "") + } + into 'lib/' + } + archive.from(file('src/main/content')) { + eachFile { it.mode = it.directory ? 0x755 : 0x644 } + } + archive.from(file('src/main/executablecontent')) { + eachFile { it.mode = 0x755 } + } +} + +task zip(type: Zip) { + classifier = 'bin' + configureArchive it +} + +intTest { + dependsOn syncTestRepository, zip +} + +task tar(type: Tar) { + compression = 'gzip' + archiveExtension = 'tar.gz' + configureArchive it +} + +task scoopManifest(type: org.springframework.boot.build.cli.ScoopManifest) { + dependsOn zip + outputDir = file("$buildDir/scoop") + template = file('src/main/scoop/springboot.json') + archive = zip.archiveFile +} + +def scoopManifestArtifact = artifacts.add('archives', file("$buildDir/scoop/springboot.json")) { + type 'json' + classifier 'scoop' + builtBy 'scoopManifest' +} + +task homebrewFormula(type: org.springframework.boot.build.cli.HomebrewFormula) { + dependsOn tar + outputDir = file("$buildDir/homebrew") + template = file('src/main/homebrew/springboot.rb') + archive = tar.archiveFile +} + +def homebrewFormulaArtifact = artifacts.add('archives', file("$buildDir/homebrew/springboot.rb")) { + type 'rb' + classifier 'homebrew' + builtBy 'homebrewFormula' +} + +publishing { + publications { + getByName('maven') { + artifact fullJar + artifact tar + artifact zip + artifact scoopManifestArtifact + artifact homebrewFormulaArtifact + } + } +} + diff --git a/spring-boot-project/spring-boot-cli/pom.xml b/spring-boot-project/spring-boot-cli/pom.xml deleted file mode 100644 index a349767d00a..00000000000 --- a/spring-boot-project/spring-boot-cli/pom.xml +++ /dev/null @@ -1,469 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-cli - Spring Boot CLI - Spring Boot CLI - - ${basedir}/../.. - org.springframework.boot.cli.SpringCli - default - ${project.build.directory}/generated-resources/org/springframework/boot/cli/compiler/dependencies - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot-loader-tools - - - com.vaadin.external.google - android-json - - - jline - jline - - - net.sf.jopt-simple - jopt-simple - - - org.codehaus.groovy - groovy - - - org.sonatype.plexus - plexus-sec-dispatcher - - - org.sonatype.sisu - sisu-inject-plexus - - - org.sonatype.sisu - sisu-inject-bean - - - javax.enterprise - cdi-api - - - - - org.springframework - spring-core - - - org.springframework.security - spring-security-crypto - - - org.apache.httpcomponents - httpclient - - - org.apache.maven - maven-model - - - org.apache.maven - maven-settings-builder - - - org.apache.maven - maven-resolver-provider - - - com.google.guava - guava - - - - - org.apache.maven.resolver - maven-resolver-connector-basic - - - org.apache.maven.resolver - maven-resolver-impl - - - org.apache.maven.resolver - maven-resolver-transport-file - - - org.apache.maven.resolver - maven-resolver-transport-http - - - jcl-over-slf4j - org.slf4j - - - - - - org.springframework.boot - spring-boot-dependencies - effective-pom - provided - ${project.version} - - - org.codehaus.groovy - groovy-templates - provided - - - org.springframework.boot - spring-boot - provided - - - org.springframework - spring-web - provided - - - jakarta.servlet - jakarta.servlet-api - provided - - - - org.springframework.boot - spring-boot-test-support - test - - - org.springframework.boot - spring-boot-test - test - - - junit - junit - test - - - org.hamcrest - hamcrest-core - - - - - - - - ${project.build.directory}/generated-resources - - - ${basedir}/src/main/resources - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${project.build.directory}/generated-resources - - - ${spring.profiles.active} - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-effective-pom - generate-resources - - copy - - - - - org.springframework.boot - spring-boot-dependencies - effective-pom - true - ${generated.pom.dir} - effective-pom.xml - - - - - - unpack - prepare-package - - unpack - - - - - org.springframework.boot - spring-boot-loader - ${project.version} - jar - - - ${project.build.directory}/assembly - - - - copy - prepare-package - - copy-dependencies - - - ${project.build.directory}/assembly/BOOT-INF/lib - runtime - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - jar-with-dependencies - package - - single - - - - src/main/assembly/jar-with-dependencies.xml - - - - true - org.springframework.boot.loader.JarLauncher - - - ${start-class} - groovy.lang.GroovyClassLoader - - - - - - bin-package - package - - single - - - - src/main/assembly/bin-package.xml - - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - ant-contrib - ant-contrib - 1.0b3 - - - ant - ant - - - - - org.apache.ant - ant-nodeps - 1.8.1 - - - org.tigris.antelope - antelopetasks - 3.2.10 - - - - - homebrew - package - - run - - false - - - - - - - - - - - - - - - - - - - - - - - - - scoop - package - - run - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-test-source - process-resources - - add-test-source - - - - src/it/java - - - - - - - - - - integration - - true - - - integration - - - - java9+ - - [9,) - - - - org.glassfish.jaxb - jaxb-runtime - true - - - - - diff --git a/spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/CommandLineIT.java b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/CommandLineIT.java similarity index 81% rename from spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/CommandLineIT.java rename to spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/CommandLineIT.java index c98970b2692..1ee79398555 100644 --- a/spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/CommandLineIT.java +++ b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/CommandLineIT.java @@ -43,39 +43,40 @@ class CommandLineIT { this.cli = new CommandLineInvoker(tempDir); } - @Test void hintProducesListOfValidCommands() - throws IOException, InterruptedException { + @Test + void hintProducesListOfValidCommands() throws IOException, InterruptedException { Invocation cli = this.cli.invoke("hint"); assertThat(cli.await()).isEqualTo(0); assertThat(cli.getErrorOutput()).isEmpty(); assertThat(cli.getStandardOutputLines()).hasSize(11); } - @Test void invokingWithNoArgumentsDisplaysHelp() - throws IOException, InterruptedException { + @Test + void invokingWithNoArgumentsDisplaysHelp() throws IOException, InterruptedException { Invocation cli = this.cli.invoke(); assertThat(cli.await()).isEqualTo(1); assertThat(cli.getErrorOutput()).isEmpty(); assertThat(cli.getStandardOutput()).startsWith("usage:"); } - @Test void unrecognizedCommandsAreHandledGracefully() - throws IOException, InterruptedException { + @Test + void unrecognizedCommandsAreHandledGracefully() throws IOException, InterruptedException { Invocation cli = this.cli.invoke("not-a-real-command"); assertThat(cli.await()).isEqualTo(1); - assertThat(cli.getErrorOutput()) - .contains("'not-a-real-command' is not a valid command"); + assertThat(cli.getErrorOutput()).contains("'not-a-real-command' is not a valid command"); assertThat(cli.getStandardOutput()).isEmpty(); } - @Test void version() throws IOException, InterruptedException { + @Test + void version() throws IOException, InterruptedException { Invocation cli = this.cli.invoke("version"); assertThat(cli.await()).isEqualTo(0); assertThat(cli.getErrorOutput()).isEmpty(); assertThat(cli.getStandardOutput()).startsWith("Spring CLI v"); } - @Test void help() throws IOException, InterruptedException { + @Test + void help() throws IOException, InterruptedException { Invocation cli = this.cli.invoke("help"); assertThat(cli.await()).isEqualTo(1); assertThat(cli.getErrorOutput()).isEmpty(); diff --git a/spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/JarCommandIT.java b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/JarCommandIT.java similarity index 71% rename from spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/JarCommandIT.java rename to spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/JarCommandIT.java index 255b91d5de0..cafb01739d3 100644 --- a/spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/JarCommandIT.java +++ b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/JarCommandIT.java @@ -37,8 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ class JarCommandIT { - private static final boolean JAVA_9_OR_LATER = isClassPresent( - "java.security.cert.URICertStoreParameters"); + private static final boolean JAVA_9_OR_LATER = isClassPresent("java.security.cert.URICertStoreParameters"); private CommandLineInvoker cli; @@ -46,31 +45,32 @@ class JarCommandIT { @BeforeEach void setup(@TempDir File tempDir) { - this.cli = new CommandLineInvoker(new File("src/it/resources/jar-command"), - tempDir); + this.cli = new CommandLineInvoker(new File("src/intTest/resources/jar-command"), tempDir); this.tempDir = tempDir; } - @Test void noArguments() throws Exception { + @Test + void noArguments() throws Exception { Invocation invocation = this.cli.invoke("jar"); invocation.await(); assertThat(invocation.getStandardOutput()).isEqualTo(""); - assertThat(invocation.getErrorOutput()).contains("The name of the " - + "resulting jar and at least one source file must be specified"); + assertThat(invocation.getErrorOutput()) + .contains("The name of the " + "resulting jar and at least one source file must be specified"); } - @Test void noSources() throws Exception { + @Test + void noSources() throws Exception { Invocation invocation = this.cli.invoke("jar", "test-app.jar"); invocation.await(); assertThat(invocation.getStandardOutput()).isEqualTo(""); - assertThat(invocation.getErrorOutput()).contains("The name of the " - + "resulting jar and at least one source file must be specified"); + assertThat(invocation.getErrorOutput()) + .contains("The name of the " + "resulting jar and at least one source file must be specified"); } - @Test void jarCreationWithGrabResolver() throws Exception { + @Test + void jarCreationWithGrabResolver() throws Exception { File jar = new File(this.tempDir, "test-app.jar"); - Invocation invocation = this.cli.invoke("run", jar.getAbsolutePath(), - "bad.groovy"); + Invocation invocation = this.cli.invoke("run", jar.getAbsolutePath(), "bad.groovy"); invocation.await(); if (!JAVA_9_OR_LATER) { assertThat(invocation.getErrorOutput()).isEqualTo(""); @@ -82,8 +82,7 @@ class JarCommandIT { } assertThat(jar).exists(); - Process process = new JavaExecutable() - .processBuilder("-jar", jar.getAbsolutePath()).start(); + Process process = new JavaExecutable().processBuilder("-jar", jar.getAbsolutePath()).start(); invocation = new Invocation(process); invocation.await(); @@ -92,9 +91,33 @@ class JarCommandIT { } } - @Test void jarCreation() throws Exception { + @Test + void jarCreation() throws Exception { File jar = new File(this.tempDir, "test-app.jar"); - Invocation invocation = this.cli.invoke("jar", jar.getAbsolutePath(), + Invocation invocation = this.cli.invoke("jar", jar.getAbsolutePath(), "jar.groovy"); + invocation.await(); + if (!JAVA_9_OR_LATER) { + assertThat(invocation.getErrorOutput()).isEmpty(); + } + assertThat(jar).exists(); + + Process process = new JavaExecutable().processBuilder("-jar", jar.getAbsolutePath()).start(); + invocation = new Invocation(process); + invocation.await(); + + if (!JAVA_9_OR_LATER) { + assertThat(invocation.getErrorOutput()).isEqualTo(""); + } + assertThat(invocation.getStandardOutput()).contains("Hello World!") + .contains("/BOOT-INF/classes!/public/public.txt").contains("/BOOT-INF/classes!/resources/resource.txt") + .contains("/BOOT-INF/classes!/static/static.txt").contains("/BOOT-INF/classes!/templates/template.txt") + .contains("/BOOT-INF/classes!/root.properties").contains("Goodbye Mama"); + } + + @Test + void jarCreationWithIncludes() throws Exception { + File jar = new File(this.tempDir, "test-app.jar"); + Invocation invocation = this.cli.invoke("jar", jar.getAbsolutePath(), "--include", "-public/**,-resources/**", "jar.groovy"); invocation.await(); if (!JAVA_9_OR_LATER) { @@ -102,42 +125,14 @@ class JarCommandIT { } assertThat(jar).exists(); - Process process = new JavaExecutable() - .processBuilder("-jar", jar.getAbsolutePath()).start(); + Process process = new JavaExecutable().processBuilder("-jar", jar.getAbsolutePath()).start(); invocation = new Invocation(process); invocation.await(); if (!JAVA_9_OR_LATER) { assertThat(invocation.getErrorOutput()).isEqualTo(""); } - assertThat(invocation.getStandardOutput()).contains("Hello World!") - .contains("/BOOT-INF/classes!/public/public.txt") - .contains("/BOOT-INF/classes!/resources/resource.txt") - .contains("/BOOT-INF/classes!/static/static.txt") - .contains("/BOOT-INF/classes!/templates/template.txt") - .contains("/BOOT-INF/classes!/root.properties").contains("Goodbye Mama"); - } - - @Test void jarCreationWithIncludes() throws Exception { - File jar = new File(this.tempDir, "test-app.jar"); - Invocation invocation = this.cli.invoke("jar", jar.getAbsolutePath(), "--include", - "-public/**,-resources/**", "jar.groovy"); - invocation.await(); - if (!JAVA_9_OR_LATER) { - assertThat(invocation.getErrorOutput()).isEmpty(); - } - assertThat(jar).exists(); - - Process process = new JavaExecutable() - .processBuilder("-jar", jar.getAbsolutePath()).start(); - invocation = new Invocation(process); - invocation.await(); - - if (!JAVA_9_OR_LATER) { - assertThat(invocation.getErrorOutput()).isEqualTo(""); - } - assertThat(invocation.getStandardOutput()).contains("Hello World!") - .doesNotContain("/public/public.txt") + assertThat(invocation.getStandardOutput()).contains("Hello World!").doesNotContain("/public/public.txt") .doesNotContain("/resources/resource.txt").contains("/static/static.txt") .contains("/templates/template.txt").contains("Goodbye Mama"); } diff --git a/spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/WarCommandIT.java b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/WarCommandIT.java similarity index 83% rename from spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/WarCommandIT.java rename to spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/WarCommandIT.java index 0554fff7d98..4ea3ffa4b5b 100644 --- a/spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/WarCommandIT.java +++ b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/WarCommandIT.java @@ -43,25 +43,22 @@ class WarCommandIT { @BeforeEach void setup(@TempDir File tempDir) { - this.cli = new CommandLineInvoker(new File("src/it/resources/war-command"), - tempDir); + this.cli = new CommandLineInvoker(new File("src/intTest/resources/war-command"), tempDir); this.tempDir = tempDir; } - @Test void warCreation() throws Exception { + @Test + void warCreation() throws Exception { File war = new File(this.tempDir, "test-app.war"); - Invocation invocation = this.cli.invoke("war", war.getAbsolutePath(), - "war.groovy"); + Invocation invocation = this.cli.invoke("war", war.getAbsolutePath(), "war.groovy"); invocation.await(); assertThat(war.exists()).isTrue(); - Process process = new JavaExecutable() - .processBuilder("-jar", war.getAbsolutePath(), "--server.port=0").start(); + Process process = new JavaExecutable().processBuilder("-jar", war.getAbsolutePath(), "--server.port=0").start(); invocation = new Invocation(process); invocation.await(); assertThat(invocation.getOutput()).contains("onStart error"); assertThat(invocation.getOutput()).contains("Tomcat started"); - assertThat(invocation.getOutput()) - .contains("/WEB-INF/lib-provided/tomcat-embed-core"); + assertThat(invocation.getOutput()).contains("/WEB-INF/lib-provided/tomcat-embed-core"); assertThat(invocation.getOutput()).contains("WEB-INF/classes!/root.properties"); process.destroy(); } diff --git a/spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java similarity index 83% rename from spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java rename to spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java index b1e1c0cd78c..4792b8ebadc 100644 --- a/spring-boot-project/spring-boot-cli/src/it/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java +++ b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java @@ -25,6 +25,10 @@ import java.io.InputStream; import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -63,19 +67,22 @@ public final class CommandLineInvoker { } private Process runCliProcess(String... args) throws IOException { + Path m2 = this.temp.toPath().resolve(".m2"); + Files.createDirectories(m2); + Files.copy(Paths.get("src", "intTest", "resources", "settings.xml"), m2.resolve("settings.xml"), + StandardCopyOption.REPLACE_EXISTING); List command = new ArrayList<>(); command.add(findLaunchScript().getAbsolutePath()); command.addAll(Arrays.asList(args)); - ProcessBuilder processBuilder = new ProcessBuilder(command) - .directory(this.workingDirectory); - processBuilder.environment().remove("JAVA_OPTS"); + ProcessBuilder processBuilder = new ProcessBuilder(command).directory(this.workingDirectory); + processBuilder.environment().put("JAVA_OPTS", "-Duser.home=" + this.temp); return processBuilder.start(); } private File findLaunchScript() throws IOException { File unpacked = new File(this.temp, "unpacked-cli"); if (!unpacked.isDirectory()) { - File zip = new BuildOutput(getClass()).getRootLocation() + File zip = new File(new BuildOutput(getClass()).getRootLocation(), "distributions") .listFiles((pathname) -> pathname.getName().endsWith("-bin.zip"))[0]; try (ZipInputStream input = new ZipInputStream(new FileInputStream(zip))) { ZipEntry entry; @@ -99,8 +106,7 @@ public final class CommandLineInvoker { File bin = new File(unpacked.listFiles()[0], "bin"); File launchScript = new File(bin, isWindows() ? "spring.bat" : "spring"); Assert.state(launchScript.exists() && launchScript.isFile(), - () -> "Could not find CLI launch script " - + launchScript.getAbsolutePath()); + () -> "Could not find CLI launch script " + launchScript.getAbsolutePath()); return launchScript; } @@ -125,10 +131,10 @@ public final class CommandLineInvoker { public Invocation(Process process) { this.process = process; - this.streamReaders.add(new Thread(new StreamReadingRunnable( - this.process.getErrorStream(), this.err, this.combined))); - this.streamReaders.add(new Thread(new StreamReadingRunnable( - this.process.getInputStream(), this.out, this.combined))); + this.streamReaders + .add(new Thread(new StreamReadingRunnable(this.process.getErrorStream(), this.err, this.combined))); + this.streamReaders + .add(new Thread(new StreamReadingRunnable(this.process.getInputStream(), this.out, this.combined))); for (Thread streamReader : this.streamReaders) { streamReader.start(); } @@ -162,10 +168,8 @@ public final class CommandLineInvoker { } private List getLines(StringBuffer buffer) { - BufferedReader reader = new BufferedReader( - new StringReader(buffer.toString())); - return reader.lines().filter((line) -> !line.startsWith("Picked up ")) - .collect(Collectors.toList()); + BufferedReader reader = new BufferedReader(new StringReader(buffer.toString())); + return reader.lines().filter((line) -> !line.startsWith("Picked up ")).collect(Collectors.toList()); } public int await() throws InterruptedException { diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/jar-command/bad.groovy b/spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/bad.groovy similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/jar-command/bad.groovy rename to spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/bad.groovy diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/jar-command/jar.groovy b/spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/jar.groovy similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/jar-command/jar.groovy rename to spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/jar.groovy diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/jar-command/public/public.txt b/spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/public/public.txt similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/jar-command/public/public.txt rename to spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/public/public.txt diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/jar-command/resources/resource.txt b/spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/resources/resource.txt similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/jar-command/resources/resource.txt rename to spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/resources/resource.txt diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/jar-command/root.properties b/spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/root.properties similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/jar-command/root.properties rename to spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/root.properties diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/jar-command/static/static.txt b/spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/static/static.txt similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/jar-command/static/static.txt rename to spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/static/static.txt diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/jar-command/templates/template.txt b/spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/templates/template.txt similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/jar-command/templates/template.txt rename to spring-boot-project/spring-boot-cli/src/intTest/resources/jar-command/templates/template.txt diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/run-command/quiet.groovy b/spring-boot-project/spring-boot-cli/src/intTest/resources/run-command/quiet.groovy similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/run-command/quiet.groovy rename to spring-boot-project/spring-boot-cli/src/intTest/resources/run-command/quiet.groovy diff --git a/spring-boot-project/spring-boot-cli/src/intTest/resources/settings.xml b/spring-boot-project/spring-boot-cli/src/intTest/resources/settings.xml new file mode 100644 index 00000000000..bbe1ac0ed3c --- /dev/null +++ b/spring-boot-project/spring-boot-cli/src/intTest/resources/settings.xml @@ -0,0 +1,23 @@ + + ../../../../build/local-m2-repository + + + cli-test-repo + + true + + + + local.central + file:../../../../build/test-repository + + true + + + true + + + + + + \ No newline at end of file diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/war-command/root.properties b/spring-boot-project/spring-boot-cli/src/intTest/resources/war-command/root.properties similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/war-command/root.properties rename to spring-boot-project/spring-boot-cli/src/intTest/resources/war-command/root.properties diff --git a/spring-boot-project/spring-boot-cli/src/it/resources/war-command/war.groovy b/spring-boot-project/spring-boot-cli/src/intTest/resources/war-command/war.groovy similarity index 100% rename from spring-boot-project/spring-boot-cli/src/it/resources/war-command/war.groovy rename to spring-boot-project/spring-boot-cli/src/intTest/resources/war-command/war.groovy diff --git a/spring-boot-project/spring-boot-cli/src/main/homebrew/springboot.rb b/spring-boot-project/spring-boot-cli/src/main/homebrew/springboot.rb index 4c9d0e75905..5f338dcceb2 100644 --- a/spring-boot-project/spring-boot-cli/src/main/homebrew/springboot.rb +++ b/spring-boot-project/spring-boot-cli/src/main/homebrew/springboot.rb @@ -4,7 +4,7 @@ class Springboot < Formula homepage 'https://spring.io/projects/spring-boot' url 'https://repo.spring.io/${repo}/org/springframework/boot/spring-boot-cli/${project.version}/spring-boot-cli-${project.version}-bin.tar.gz' version '${project.version}' - sha256 '${checksum}' + sha256 '${hash}' head 'https://github.com/spring-projects/spring-boot.git' if build.head? diff --git a/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/dependencies/SpringBootDependenciesDependencyManagement.java b/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/dependencies/SpringBootDependenciesDependencyManagement.java index 694c2785428..7f79b5c08a8 100644 --- a/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/dependencies/SpringBootDependenciesDependencyManagement.java +++ b/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/dependencies/SpringBootDependenciesDependencyManagement.java @@ -42,8 +42,8 @@ public class SpringBootDependenciesDependencyManagement extends MavenModelDepend modelProcessor.setModelReader(new DefaultModelReader()); try { - return modelProcessor.read( - SpringBootDependenciesDependencyManagement.class.getResourceAsStream("effective-pom.xml"), null); + return modelProcessor.read(SpringBootDependenciesDependencyManagement.class + .getResourceAsStream("spring-boot-dependencies-effective-bom.xml"), null); } catch (IOException ex) { throw new IllegalStateException("Failed to build model from effective pom", ex); diff --git a/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/maven/MavenSettingsReader.java b/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/maven/MavenSettingsReader.java index 10a8e7b02a4..c1ae15b6d50 100644 --- a/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/maven/MavenSettingsReader.java +++ b/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/maven/MavenSettingsReader.java @@ -17,7 +17,6 @@ package org.springframework.boot.cli.compiler.maven; import java.io.File; -import java.lang.reflect.Field; import org.apache.maven.settings.Settings; import org.apache.maven.settings.building.DefaultSettingsBuilderFactory; @@ -83,21 +82,7 @@ public class MavenSettingsReader { } private SettingsDecrypter createSettingsDecrypter() { - SettingsDecrypter settingsDecrypter = new DefaultSettingsDecrypter(); - setField(DefaultSettingsDecrypter.class, "securityDispatcher", settingsDecrypter, - new SpringBootSecDispatcher()); - return settingsDecrypter; - } - - private void setField(Class sourceClass, String fieldName, Object target, Object value) { - try { - Field field = sourceClass.getDeclaredField(fieldName); - field.setAccessible(true); - field.set(target, value); - } - catch (Exception ex) { - throw new IllegalStateException("Failed to set field '" + fieldName + "' on '" + target + "'", ex); - } + return new DefaultSettingsDecrypter(new SpringBootSecDispatcher()); } private class SpringBootSecDispatcher extends DefaultSecDispatcher { diff --git a/spring-boot-project/spring-boot-cli/src/main/scoop/springboot.json b/spring-boot-project/spring-boot-cli/src/main/scoop/springboot.json index b8b3ad73f2d..dbfe2308cc1 100644 --- a/spring-boot-project/spring-boot-cli/src/main/scoop/springboot.json +++ b/spring-boot-project/spring-boot-cli/src/main/scoop/springboot.json @@ -1,11 +1,11 @@ { "homepage": "https://projects.spring.io/spring-boot/", - "version": "${scoop-version}", + "version": "${scoopVersion}", "license": "Apache 2.0", "hash": "${hash}", "url": "https://repo.spring.io/${repo}/org/springframework/boot/spring-boot-cli/${project.version}/spring-boot-cli-${project.version}-bin.zip", "extract_dir": "spring-${project.version}", - "bin": "bin\\spring.bat", + "bin": "bin\\\\spring.bat", "suggest": { "JDK": [ "java/oraclejdk", @@ -14,13 +14,13 @@ }, "checkver": { "github": "https://github.com/spring-projects/spring-boot", - "re": "/releases/tag/(?:v)?(2[\\d.]+)\\.RELEASE" + "re": "/releases/tag/(?:v)?(2[\\d.]+)\\\\.RELEASE" }, "autoupdate": { - "url": "https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/$version.RELEASE/spring-boot-cli-$version.RELEASE-bin.zip", - "extract_dir": "spring-$version.RELEASE", + "url": "https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/\$version.RELEASE/spring-boot-cli-\$version.RELEASE-bin.zip", + "extract_dir": "spring-\$version.RELEASE", "hash": { - "url": "$url.sha256" + "url": "\$url.sha256" } } } diff --git a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/CliTester.java b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/CliTester.java index f9015b196fc..0586e792af3 100644 --- a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/CliTester.java +++ b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/CliTester.java @@ -96,12 +96,14 @@ public class CliTester implements BeforeEachCallback, AfterEachCallback { for (String arg : args) { if (arg.startsWith("--classpath=")) { arg = arg + ":" + this.buildOutput.getTestClassesLocation().getAbsolutePath(); + arg = arg + ":" + this.buildOutput.getTestResourcesLocation().getAbsolutePath(); classpathUpdated = true; } updatedArgs.add(arg); } if (!classpathUpdated) { - updatedArgs.add("--classpath=.:" + this.buildOutput.getTestClassesLocation().getAbsolutePath()); + updatedArgs.add("--classpath=.:" + this.buildOutput.getTestClassesLocation().getAbsolutePath() + ":" + + this.buildOutput.getTestResourcesLocation().getAbsolutePath()); } Future future = submitCommand(new RunCommand(), StringUtils.toStringArray(updatedArgs)); this.commands.add(future.get(this.timeout, TimeUnit.MILLISECONDS)); @@ -134,6 +136,8 @@ public class CliTester implements BeforeEachCallback, AfterEachCallback { "org.springframework.boot.cli.CliTesterSpringApplication"); this.serverPortFile = new File(this.temp, "server.port"); System.setProperty("portfile", this.serverPortFile.getAbsolutePath()); + String userHome = System.getProperty("user.home"); + System.setProperty("user.home", "src/test/resources/cli-tester"); try { command.run(sources); return command; @@ -142,6 +146,7 @@ public class CliTester implements BeforeEachCallback, AfterEachCallback { System.clearProperty("server.port"); System.clearProperty("spring.application.class.name"); System.clearProperty("portfile"); + System.setProperty("user.home", userHome); Thread.currentThread().setContextClassLoader(loader); } }); diff --git a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/GrabCommandIntegrationTests.java b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/GrabCommandIntegrationTests.java index 8790f3f3146..fec42a0efc2 100644 --- a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/GrabCommandIntegrationTests.java +++ b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/GrabCommandIntegrationTests.java @@ -57,15 +57,12 @@ class GrabCommandIntegrationTests { @Test void grab() throws Exception { - System.setProperty("grape.root", this.cli.getTemp().getAbsolutePath()); System.setProperty("groovy.grape.report.downloads", "true"); - // Use --autoconfigure=false to limit the amount of downloaded dependencies String output = this.cli.grab("grab.groovy", "--autoconfigure=false"); assertThat(new File(this.cli.getTemp(), "repository/joda-time/joda-time")).isDirectory(); - // Should be resolved from local repository cache - assertThat(output.contains("Downloading: file:")).isTrue(); + assertThat(output).contains("Downloading: "); } @Test diff --git a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/RunCommandIntegrationTests.java b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/RunCommandIntegrationTests.java index d16fa456845..28c5991d5b4 100644 --- a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/RunCommandIntegrationTests.java +++ b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/RunCommandIntegrationTests.java @@ -42,7 +42,7 @@ class RunCommandIntegrationTests { CliTester cli; RunCommandIntegrationTests(CapturedOutput output) { - this.cli = new CliTester("src/it/resources/run-command/", output); + this.cli = new CliTester("src/test/resources/run-command/", output); } private Properties systemProperties = new Properties(); diff --git a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/dependencies/SpringBootDependenciesDependencyManagementTests.java b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/dependencies/SpringBootDependenciesDependencyManagementTests.java index abf868f0f7b..b6677248c5e 100644 --- a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/dependencies/SpringBootDependenciesDependencyManagementTests.java +++ b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/dependencies/SpringBootDependenciesDependencyManagementTests.java @@ -19,7 +19,6 @@ package org.springframework.boot.cli.compiler.dependencies; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.empty; /** * Tests for {@link SpringBootDependenciesDependencyManagement} @@ -45,7 +44,7 @@ class SpringBootDependenciesDependencyManagementTests { @Test void getDependencies() { - assertThat(this.dependencyManagement.getDependencies()).isNotEqualTo(empty()); + assertThat(this.dependencyManagement.getDependencies()).isNotEmpty(); } } diff --git a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngineTests.java b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngineTests.java index 95377e122b0..2c1d15329c7 100644 --- a/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngineTests.java +++ b/spring-boot-project/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngineTests.java @@ -47,9 +47,12 @@ class AetherGrapeEngineTests { private final GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); - private final RepositoryConfiguration springMilestones = new RepositoryConfiguration("spring-milestones", + private final RepositoryConfiguration springMilestone = new RepositoryConfiguration("spring-milestone", URI.create("https://repo.spring.io/milestone"), false); + private final RepositoryConfiguration springSnaphot = new RepositoryConfiguration("spring-snapshot", + URI.create("https://repo.spring.io/snapshot"), true); + private AetherGrapeEngine createGrapeEngine(RepositoryConfiguration... additionalRepositories) { List repositoryConfigurations = new ArrayList<>(); repositoryConfigurations @@ -64,7 +67,7 @@ class AetherGrapeEngineTests { @Test void dependencyResolution() { Map args = new HashMap<>(); - createGrapeEngine(this.springMilestones).grab(args, + createGrapeEngine(this.springMilestone, this.springSnaphot).grab(args, createDependency("org.springframework", "spring-jdbc", null)); assertThat(this.groovyClassLoader.getURLs()).hasSize(5); } @@ -104,7 +107,7 @@ class AetherGrapeEngineTests { Map args = new HashMap<>(); args.put("excludes", Arrays.asList(createExclusion("org.springframework", "spring-core"))); - createGrapeEngine(this.springMilestones).grab(args, + createGrapeEngine(this.springMilestone, this.springSnaphot).grab(args, createDependency("org.springframework", "spring-jdbc", "3.2.4.RELEASE"), createDependency("org.springframework", "spring-beans", "3.2.4.RELEASE")); @@ -126,7 +129,7 @@ class AetherGrapeEngineTests { GroovyClassLoader customClassLoader = new GroovyClassLoader(); args.put("classLoader", customClassLoader); - createGrapeEngine(this.springMilestones).grab(args, + createGrapeEngine(this.springMilestone, this.springSnaphot).grab(args, createDependency("org.springframework", "spring-jdbc", null)); assertThat(this.groovyClassLoader.getURLs()).isEmpty(); diff --git a/spring-boot-project/spring-boot-cli/src/test/resources/.m2/settings.xml b/spring-boot-project/spring-boot-cli/src/test/resources/.m2/settings.xml index 8ae764f39d3..7aff3641141 100644 --- a/spring-boot-project/spring-boot-cli/src/test/resources/.m2/settings.xml +++ b/spring-boot-project/spring-boot-cli/src/test/resources/.m2/settings.xml @@ -2,7 +2,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> - + build/local-m2-repository central-mirror @@ -10,7 +10,6 @@ central - central-mirror @@ -18,7 +17,6 @@ password - true @@ -29,5 +27,4 @@ password - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/settings.xml b/spring-boot-project/spring-boot-cli/src/test/resources/cli-tester/.m2/settings.xml similarity index 52% rename from spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/settings.xml rename to spring-boot-project/spring-boot-cli/src/test/resources/cli-tester/.m2/settings.xml index e1e0ace341b..504eb80a055 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/settings.xml +++ b/spring-boot-project/spring-boot-cli/src/test/resources/cli-tester/.m2/settings.xml @@ -1,15 +1,16 @@ + build/local-m2-repository - it-repo + cli-test-repo true local.central - @localRepositoryUrl@ + file:build/test-repository true @@ -17,19 +18,27 @@ true - - - - local.central - @localRepositoryUrl@ + + spring-snapshot + https://repo.spring.io/snapshot - true + false true - - + + + spring-milestone + https://repo.spring.io/milestone + + true + + + false + + + diff --git a/spring-boot-project/spring-boot-cli/src/test/resources/run-command/quiet.groovy b/spring-boot-project/spring-boot-cli/src/test/resources/run-command/quiet.groovy new file mode 100644 index 00000000000..32640370e1a --- /dev/null +++ b/spring-boot-project/spring-boot-cli/src/test/resources/run-command/quiet.groovy @@ -0,0 +1,10 @@ +package org.test + +@Component +class Example implements CommandLineRunner { + + void run(String... args) { + print "Ssshh" + } + +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle new file mode 100644 index 00000000000..f3d7d7ec17e --- /dev/null +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -0,0 +1,1900 @@ +plugins { + id 'org.springframework.boot.bom' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' +} + +description = 'Spring Boot Dependencies' + +bom { + upgrade { + policy = 'same-major-version' + gitHub { + issueLabels = ['type: dependency-upgrade'] + } + } + library('ActiveMQ', '5.15.11') { + group('org.apache.activemq') { + modules = [ + 'activemq-amqp', + 'activemq-blueprint', + 'activemq-broker', + 'activemq-camel', + 'activemq-client', + 'activemq-console' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'activemq-http', + 'activemq-jaas', + 'activemq-jdbc-store', + 'activemq-jms-pool', + 'activemq-kahadb-store', + 'activemq-karaf', + 'activemq-leveldb-store' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'activemq-log4j-appender', + 'activemq-mqtt', + 'activemq-openwire-generator', + 'activemq-openwire-legacy', + 'activemq-osgi', + 'activemq-partition', + 'activemq-pool', + 'activemq-ra', + 'activemq-run', + 'activemq-runtime-config', + 'activemq-shiro', + 'activemq-spring' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'activemq-stomp', + 'activemq-web' + ] + } + } + library('ANTLR2', '2.7.7') { + group('antlr') { + modules = [ + 'antlr' + ] + } + } + library('AppEngine SDK', '1.9.77') { + group('com.google.appengine') { + modules = [ + 'appengine-api-1.0-sdk' + ] + } + } + library('Artemis', '2.10.1') { + group('org.apache.activemq') { + modules = [ + 'artemis-amqp-protocol', + 'artemis-commons' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'artemis-core-client' { + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-json_1.0_spec' + }, + 'artemis-jms-client' { + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-json_1.0_spec' + }, + 'artemis-jms-server' { + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-json_1.0_spec' + }, + 'artemis-journal', + 'artemis-selector', + 'artemis-server' { + exclude group: 'commons-logging', module: 'commons-logging' + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-json_1.0_spec' + }, + 'artemis-service-extensions' + ] + } + } + library('AspectJ', '1.9.5') { + group('org.aspectj') { + modules = [ + 'aspectjrt', + 'aspectjtools', + 'aspectjweaver' + ] + } + } + library('AssertJ', '3.14.0') { + group('org.assertj') { + modules = [ + 'assertj-core' + ] + } + } + library('Atomikos', '4.0.6') { + group('com.atomikos') { + modules = [ + 'transactions-jdbc', + 'transactions-jms', + 'transactions-jta' + ] + } + } + library('Awaitility', '4.0.1') { + group('org.awaitility') { + modules = [ + 'awaitility', + 'awaitility-groovy', + 'awaitility-kotlin', + 'awaitility-scala' + ] + } + } + library('Bitronix', '2.1.4') { + group('org.codehaus.btm') { + modules = [ + 'btm' + ] + } + } + library('Build Helper Maven Plugin', '3.0.0') { + group('org.codehaus.mojo') { + plugins = [ + 'build-helper-maven-plugin' + ] + } + } + library('Byte Buddy', '1.10.4') { + group('net.bytebuddy') { + modules = [ + 'byte-buddy', + 'byte-buddy-agent' + ] + } + } + library('Caffeine', '2.8.0') { + group('com.github.ben-manes.caffeine') { + modules = [ + 'caffeine', + 'guava', + 'jcache', + 'simulator' + ] + } + } + library('Cassandra Driver', '3.7.2') { + group('com.datastax.cassandra') { + modules = [ + 'cassandra-driver-core', + 'cassandra-driver-mapping' + ] + } + } + library('Classmate', '1.5.1') { + group('com.fasterxml') { + modules = [ + 'classmate' + ] + } + } + library('Commons Codec', '1.13') { + group('commons-codec') { + modules = [ + 'commons-codec' + ] + } + } + library('Commons DBCP2', '2.7.0') { + group('org.apache.commons') { + modules = [ + 'commons-dbcp2' { + exclude group: 'commons-logging', module: 'commons-logging' + } + ] + } + } + library('Commons Lang3', '3.9') { + group('org.apache.commons') { + modules = [ + 'commons-lang3' + ] + } + } + library('Commons Pool', '1.6') { + group('commons-pool') { + modules = [ + 'commons-pool' + ] + } + } + library('Commons Pool2', '2.7.0') { + group('org.apache.commons') { + modules = [ + 'commons-pool2' + ] + } + } + library('Couchbase Cache Client', '2.1.0') { + group('com.couchbase.client') { + modules = [ + 'couchbase-spring-cache' + ] + } + } + library('Couchbase Client', '2.7.11') { + group('com.couchbase.client') { + modules = [ + 'java-client' + ] + } + } + library('DB2 JDBC', '11.5.0.0') { + group('com.ibm.db2') { + modules = [ + 'jcc' + ] + } + } + library('Dependency Management Plugin', '1.0.8.RELEASE') { + group('io.spring.gradle') { + modules = [ + 'dependency-management-plugin' + ] + } + } + library('Derby', '10.14.2.0') { + prohibit('[10.15,)') { + because 'it requires Java 9' + } + group('org.apache.derby') { + modules = [ + 'derby', + 'derbyclient' + ] + } + } + library('Dropwizard Metrics', '4.1.1') { + group('io.dropwizard.metrics') { + modules = [ + 'metrics-annotation', + 'metrics-core', + 'metrics-ehcache', + 'metrics-graphite', + 'metrics-healthchecks', + 'metrics-httpasyncclient', + 'metrics-jdbi', + 'metrics-jersey2', + 'metrics-jetty9', + 'metrics-jmx', + 'metrics-json', + 'metrics-jvm', + 'metrics-log4j2', + 'metrics-logback', + 'metrics-servlet', + 'metrics-servlets' + ] + } + } + library('Ehcache', '2.10.6') { + group('net.sf.ehcache') { + modules = [ + 'ehcache' + ] + } + } + library('Ehcache3', '3.8.1') { + group('org.ehcache') { + modules = [ + 'ehcache', + 'ehcache-clustered', + 'ehcache-transactions' + ] + } + } + library('Elasticsearch', '6.8.5') { + group('org.elasticsearch') { + modules = [ + 'elasticsearch' + ] + } + group('org.elasticsearch.client') { + modules = [ + 'transport', + 'elasticsearch-rest-client' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'elasticsearch-rest-high-level-client' + ] + } + group('org.elasticsearch.distribution.integ-test-zip') { + modules = [ + 'elasticsearch' + ] + } + group('org.elasticsearch.plugin') { + modules = [ + 'transport-netty4-client' + ] + } + } + library('Embedded Mongo', '2.2.0') { + group('de.flapdoodle.embed') { + modules = [ + 'de.flapdoodle.embed.mongo' + ] + } + } + library('Exec Maven Plugin', '1.6.0') { + group('org.codehaus.mojo') { + plugins = [ + 'exec-maven-plugin' + ] + } + } + library('Flatten Maven Plugin', '1.1.0') { + group('org.codehaus.mojo') { + plugins = [ + 'flatten-maven-plugin' + ] + } + } + library('Flyway', '6.1.3') { + group('org.flywaydb') { + modules = [ + 'flyway-core' + ] + plugins = [ + 'flyway-maven-plugin' + ] + } + } + library('FreeMarker', '2.3.29') { + group('org.freemarker') { + modules = [ + 'freemarker' + ] + } + } + library('Git Commit ID Plugin', '3.0.1') { + group('pl.project13.maven') { + plugins = [ + 'git-commit-id-plugin' + ] + } + } + library('Glassfish EL', '3.0.3') { + group('org.glassfish') { + modules = [ + 'jakarta.el' + ] + } + } + library('Glassfish JAXB', '2.3.2') { + group('org.glassfish.jaxb') { + modules = [ + 'codemodel', + 'codemodel-annotation-compiler', + 'jaxb-jxc', + 'jaxb-runtime', + 'jaxb-xjc', + 'txw2', + 'txwc2', + 'xsom' + ] + } + } + library('Groovy', '2.5.8') { + group('org.codehaus.groovy') { + modules = [ + 'groovy', + 'groovy-ant', + 'groovy-backports-compat23', + 'groovy-bsf', + 'groovy-cli-commons', + 'groovy-cli-picocli', + 'groovy-console', + 'groovy-datetime', + 'groovy-dateutil', + 'groovy-docgenerator', + 'groovy-groovydoc', + 'groovy-groovysh', + 'groovy-jaxb', + 'groovy-jmx', + 'groovy-json', + 'groovy-json-direct', + 'groovy-jsr223', + 'groovy-macro', + 'groovy-nio', + 'groovy-servlet', + 'groovy-sql', + 'groovy-swing', + 'groovy-templates', + 'groovy-test', + 'groovy-test-junit5', + 'groovy-testng', + 'groovy-xml' + ] + } + } + library('Gson', '2.8.6') { + group('com.google.code.gson') { + modules = [ + 'gson' + ] + } + } + library('H2', '1.4.200') { + group('com.h2database') { + modules = [ + 'h2' + ] + } + } + library('Hamcrest', '2.2') { + group('org.hamcrest') { + modules = [ + 'hamcrest', + 'hamcrest-core', + 'hamcrest-library' + ] + } + } + library('Hazelcast', '3.12.4') { + group('com.hazelcast') { + modules = [ + 'hazelcast', + 'hazelcast-client', + 'hazelcast-spring' + ] + } + } + library('Hazelcast Hibernate5', '1.3.2') { + group('com.hazelcast') { + modules = [ + 'hazelcast-hibernate52', + 'hazelcast-hibernate53' + ] + } + } + library('Hibernate', '5.4.9.Final') { + group('org.hibernate') { + modules = [ + 'hibernate-c3p0', + 'hibernate-core', + 'hibernate-ehcache', + 'hibernate-entitymanager', + 'hibernate-envers', + 'hibernate-hikaricp', + 'hibernate-java8', + 'hibernate-jcache', + 'hibernate-jpamodelgen', + 'hibernate-proxool', + 'hibernate-spatial', + 'hibernate-testing', + 'hibernate-vibur' + ] + } + } + library('Hibernate Validator', '6.1.0.Final') { + group('org.hibernate.validator') { + modules = [ + 'hibernate-validator', + 'hibernate-validator-annotation-processor' + ] + } + } + library('HikariCP', '3.4.1') { + group('com.zaxxer') { + modules = [ + 'HikariCP' + ] + } + } + library('HSQLDB', '2.5.0') { + group('org.hsqldb') { + modules = [ + 'hsqldb' + ] + } + } + library('HtmlUnit', '2.36.0') { + group('net.sourceforge.htmlunit') { + modules = [ + 'htmlunit' { + exclude group: 'commons-logging', module: 'commons-logging' + } + ] + } + } + library('HttpAsyncClient', '4.1.4') { + group('org.apache.httpcomponents') { + modules = [ + 'httpasyncclient' { + exclude group: 'commons-logging', module: 'commons-logging' + } + ] + } + } + library('HttpClient', '4.5.10') { + group('org.apache.httpcomponents') { + modules = [ + 'fluent-hc', + 'httpclient' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'httpclient-cache', + 'httpclient-osgi', + 'httpclient-win', + 'httpmime' + ] + } + } + library('HttpCore', '4.4.12') { + group('org.apache.httpcomponents') { + modules = [ + 'httpcore', + 'httpcore-nio' + ] + } + } + library('Infinispan', '9.4.16.Final') { + group('org.infinispan') { + modules = [ + 'infinispan-cachestore-jdbc', + 'infinispan-cachestore-jpa', + 'infinispan-cachestore-leveldb', + 'infinispan-cachestore-remote', + 'infinispan-cachestore-rest', + 'infinispan-cachestore-rocksdb', + 'infinispan-cdi-common', + 'infinispan-cdi-embedded', + 'infinispan-cdi-remote', + 'infinispan-client-hotrod', + 'infinispan-cloud', + 'infinispan-clustered-counter', + 'infinispan-clustered-lock', + 'infinispan-commons', + 'infinispan-core', + 'infinispan-directory-provider', + 'infinispan-hibernate-cache-v53', + 'infinispan-jcache', + 'infinispan-jcache-commons', + 'infinispan-jcache-remote', + 'infinispan-lucene-directory', + 'infinispan-objectfilter', + 'infinispan-osgi', + 'infinispan-persistence-cli', + 'infinispan-persistence-soft-index', + 'infinispan-query', + 'infinispan-query-dsl', + 'infinispan-remote-query-client', + 'infinispan-remote-query-server', + 'infinispan-scripting', + 'infinispan-server-core', + 'infinispan-server-hotrod', + 'infinispan-server-memcached', + 'infinispan-server-router', + 'infinispan-spring4-common', + 'infinispan-spring4-embedded', + 'infinispan-spring4-remote', + 'infinispan-spring5-common', + 'infinispan-spring5-embedded', + 'infinispan-spring5-remote', + 'infinispan-tasks', + 'infinispan-tasks-api', + 'infinispan-tools', + 'infinispan-tree' + ] + plugins = [ + 'infinispan-protocol-parser-generator-maven-plugin' + ] + } + } + library('InfluxDB Java', '2.16') { + group('org.influxdb') { + modules = [ + 'influxdb-java' + ] + } + } + library('Jackson Bom', '2.10.1') { + group('com.fasterxml.jackson') { + imports = [ + 'jackson-bom' + ] + } + } + library('Jakarta Activation', '1.2.1') { + group('com.sun.activation') { + modules = [ + 'jakarta.activation' + ] + } + group('jakarta.activation') { + modules = [ + 'jakarta.activation-api' + ] + } + } + library('Jakarta Annotation', '1.3.5') { + group('jakarta.annotation') { + modules = [ + 'jakarta.annotation-api' + ] + } + } + library('Jakarta JMS', '2.0.3') { + group('jakarta.jms') { + modules = [ + 'jakarta.jms-api' + ] + } + } + library('Jakarta Json', '1.1.6') { + group('jakarta.json') { + modules = [ + 'jakarta.json-api' + ] + } + } + library('Jakarta Json Bind', '1.0.2') { + group('jakarta.json.bind') { + modules = [ + 'jakarta.json.bind-api' + ] + } + } + library('Jakarta Mail', '1.6.4') { + group('jakarta.mail') { + modules = [ + 'jakarta.mail-api' + ] + } + } + library('Jakarta Persistence', '2.2.3') { + group('jakarta.persistence') { + modules = [ + 'jakarta.persistence-api' + ] + } + } + library('Jakarta Servlet', '4.0.3') { + group('jakarta.servlet') { + modules = [ + 'jakarta.servlet-api' + ] + } + } + library('Jakarta Servlet JSP JSTL', '1.2.7') { + group('jakarta.servlet.jsp.jstl') { + modules = [ + 'jakarta.servlet.jsp.jstl-api' + ] + } + } + library('Jakarta Transaction', '1.3.3') { + group('jakarta.transaction') { + modules = [ + 'jakarta.transaction-api' + ] + } + } + library('Jakarta Validation', '2.0.1') { + group('jakarta.validation') { + modules = [ + 'jakarta.validation-api' + ] + } + } + library('Jakarta WebSocket', '1.1.2') { + group('jakarta.websocket') { + modules = [ + 'jakarta.websocket-api' + ] + } + } + library('Jakarta WS RS', '2.1.6') { + group('jakarta.ws.rs') { + modules = [ + 'jakarta.ws.rs-api' + ] + } + } + library('Jakarta XML Bind', '2.3.2') { + group('jakarta.xml.bind') { + modules = [ + 'jakarta.xml.bind-api' + ] + } + } + library('Jakarta XML WS', '2.3.2') { + group('jakarta.xml.ws') { + modules = [ + 'jakarta.xml.ws-api' + ] + } + } + library('Janino', '3.1.0') { + group('org.codehaus.janino') { + modules = [ + 'commons-compiler', + 'commons-compiler-jdk', + 'janino' + ] + } + } + library('Javax Activation', '1.2.0') { + group('javax.activation') { + modules = [ + 'javax.activation-api' + ] + } + } + library('Javax Annotation', '1.3.2') { + group('javax.annotation') { + modules = [ + 'javax.annotation-api' + ] + } + } + library('Javax Cache', '1.1.1') { + group('javax.cache') { + modules = [ + 'cache-api' + ] + } + } + library('Javax JAXB', '2.3.1') { + group('javax.xml.bind') { + modules = [ + 'jaxb-api' + ] + } + } + library('Javax JAXWS', '2.3.1') { + group('javax.xml.ws') { + modules = [ + 'jaxws-api' + ] + } + } + library('Javax JMS', '2.0.1') { + group('javax.jms') { + modules = [ + 'javax.jms-api' + ] + } + } + library('Javax Json', '1.1.4') { + group('javax.json') { + modules = [ + 'javax.json-api' + ] + } + } + library('Javax JsonB', '1.0') { + group('javax.json.bind') { + modules = [ + 'javax.json.bind-api' + ] + } + } + library('Javax Mail', '1.6.2') { + group('javax.mail') { + modules = [ + 'javax.mail-api' + ] + } + } + library('Javax Money', '1.0.3') { + group('javax.money') { + modules = [ + 'money-api' + ] + } + } + library('Javax Persistence', '2.2') { + group('javax.persistence') { + modules = [ + 'javax.persistence-api' + ] + } + } + library('Javax Transaction', '1.3') { + group('javax.transaction') { + modules = [ + 'javax.transaction-api' + ] + } + } + library('Javax Validation', '2.0.1.Final') { + group('javax.validation') { + modules = [ + 'validation-api' + ] + } + } + library('Javax WebSocket', '1.1') { + group('javax.websocket') { + modules = [ + 'javax.websocket-api' + ] + } + } + library('Jaxen', '1.2.0') { + group('jaxen') { + modules = [ + 'jaxen' + ] + } + } + library('Jaybird', '3.0.8') { + group('org.firebirdsql.jdbc') { + modules = [ + 'jaybird-jdk17', + 'jaybird-jdk18' + ] + } + } + library('JBoss Logging', '3.4.1.Final') { + group('org.jboss.logging') { + modules = [ + 'jboss-logging' + ] + } + } + library('JBoss Transaction SPI', '7.6.0.Final') { + group('org.jboss') { + modules = [ + 'jboss-transaction-spi' + ] + } + } + library('JDOM2', '2.0.6') { + group('org.jdom') { + modules = [ + 'jdom2' + ] + } + } + library('Jedis', '3.1.0') { + group('redis.clients') { + modules = [ + 'jedis' + ] + } + } + library('Jersey', '2.29.1') { + group('org.glassfish.jersey') { + imports = [ + 'jersey-bom' + ] + } + } + library('Jest', '6.3.1') { + group('io.searchbox') { + modules = [ + 'jest' + ] + } + } + library('Jetty EL', '8.5.40') { + group('org.mortbay.jasper') { + modules = [ + 'apache-el' + ] + } + } + library('Jetty JSP', '2.2.0.v201112011158') { + group('org.eclipse.jetty.orbit') { + modules = [ + 'javax.servlet.jsp' + ] + } + } + library('Jetty Reactive HTTPClient', '1.1.0') { + group('org.eclipse.jetty') { + modules = [ + 'jetty-reactive-httpclient' + ] + } + } + library('Jetty', '9.4.24.v20191120') { + group('org.eclipse.jetty') { + imports = [ + 'jetty-bom' + ] + } + } + library('JMustache', '1.15') { + group('com.samskivert') { + modules = [ + 'jmustache' + ] + } + } + library('JNA', '4.5.2') { + group('net.java.dev.jna') { + modules = [ + 'jna', + 'jna-platform' + ] + } + } + library('Joda Time', '2.10.5') { + group('joda-time') { + modules = [ + 'joda-time' + ] + } + } + library('Johnzon', '1.2.2') { + group('org.apache.johnzon') { + modules = [ + 'johnzon-core', + 'johnzon-jaxrs', + 'johnzon-jsonb', + 'johnzon-jsonb-extras', + 'johnzon-jsonschema', + 'johnzon-mapper', + 'johnzon-websocket' + ] + plugins = [ + 'johnzon-maven-plugin' + ] + } + } + library('Jolokia', '1.6.2') { + group('org.jolokia') { + modules = [ + 'jolokia-core' + ] + } + } + library('jOOQ', '3.12.3') { + group('org.jooq') { + modules = [ + 'jooq', + 'jooq-meta', + 'jooq-codegen' + ] + plugins = [ + 'jooq-codegen-maven' + ] + } + } + library('Json Path', '2.4.0') { + group('com.jayway.jsonpath') { + modules = [ + 'json-path', + 'json-path-assert' + ] + } + } + library('JsonAssert', '1.5.0') { + group('org.skyscreamer') { + modules = [ + 'jsonassert' + ] + } + } + library('JSTL', '1.2') { + group('javax.servlet') { + modules = [ + 'jstl' + ] + } + } + library('JTDS', '1.3.1') { + group('net.sourceforge.jtds') { + modules = [ + 'jtds' + ] + } + } + library('JUnit', '4.12') { + group('junit') { + modules = [ + 'junit' + ] + } + } + library('JUnit Jupiter', '5.5.2') { + group('org.junit') { + imports = [ + 'junit-bom' + ] + } + } + library('Kafka', '2.3.1') { + group('org.apache.kafka') { + modules = [ + 'connect-api', + 'connect-basic-auth-extension', + 'connect-file', + 'connect-json', + 'connect-runtime', + 'connect-transforms', + 'kafka-clients', + 'kafka-log4j-appender', + 'kafka-streams', + 'kafka-streams-scala_2.11', + 'kafka-streams-scala_2.12', + 'kafka-streams-test-utils', + 'kafka-tools', + 'kafka_2.11', + 'kafka_2.12' + ] + } + } + library('Kotlin', "$kotlinVersion") { + group('org.jetbrains.kotlin') { + imports = [ + 'kotlin-bom' + ] + plugins = [ + 'kotlin-maven-plugin' + ] + } + } + library('Kotlin Coroutines', '1.3.2') { + group('org.jetbrains.kotlinx') { + imports = [ + 'kotlinx-coroutines-bom' + ] + } + } + library('Lettuce', '5.2.1.RELEASE') { + group('io.lettuce') { + modules = [ + 'lettuce-core' + ] + } + } + library('Liquibase', '3.8.2') { + group('org.liquibase') { + modules = [ + 'liquibase-core' { + exclude group: 'ch.qos.logback', module: 'logback-classic' + } + ] + } + } + library('Log4j2', '2.12.1') { + group('org.apache.logging.log4j') { + modules = [ + 'log4j-to-slf4j' + ] + imports = [ + 'log4j-bom' + ] + } + } + library('Logback', '1.2.3') { + group('ch.qos.logback') { + modules = [ + 'logback-access', + 'logback-classic', + 'logback-core' + ] + } + } + library('Lombok', '1.18.10') { + group('org.projectlombok') { + modules = [ + 'lombok' + ] + } + } + library('MariaDB', '2.5.2') { + group('org.mariadb.jdbc') { + modules = [ + 'mariadb-java-client' + ] + } + } + library('Maven AntRun Plugin', '1.8') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-antrun-plugin' + ] + } + } + library('Maven Assembly Plugin', '3.2.0') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-assembly-plugin' + ] + } + } + library('Maven Clean Plugin', '3.1.0') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-clean-plugin' + ] + } + } + library('Maven Compiler Plugin', '3.8.1') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-compiler-plugin' + ] + } + } + library('Maven Dependency Plugin', '3.1.1') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-dependency-plugin' + ] + } + } + library('Maven Deploy Plugin', '2.8.2') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-deploy-plugin' + ] + } + } + library('Maven Enforcer Plugin', '3.0.0-M3') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-enforcer-plugin' + ] + } + } + library('Maven Failsafe Plugin', '2.22.2') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-failsafe-plugin' + ] + } + } + library('Maven Help Plugin', '3.2.0') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-help-plugin' + ] + } + } + library('Maven Install Plugin', '2.5.2') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-install-plugin' + ] + } + } + library('Maven Invoker Plugin', '3.2.1') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-invoker-plugin' + ] + } + } + library('Maven Jar Plugin', '3.2.0') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-jar-plugin' + ] + } + } + library('Maven Javadoc Plugin', '3.1.1') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-javadoc-plugin' + ] + } + } + library('Maven Resources Plugin', '3.1.0') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-resources-plugin' + ] + } + } + library('Maven Shade Plugin', '3.2.1') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-shade-plugin' + ] + } + } + library('Maven Source Plugin', '3.2.0') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-source-plugin' + ] + } + } + library('Maven Surefire Plugin', '2.22.2') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-surefire-plugin' + ] + } + } + library('Maven War Plugin', '3.2.3') { + group('org.apache.maven.plugins') { + plugins = [ + 'maven-war-plugin' + ] + } + } + library('Micrometer', '1.3.1') { + group('io.micrometer') { + modules = [ + 'micrometer-registry-stackdriver' { + exclude group: 'javax.annotation', module: 'javax.annotation-api' + } + ] + imports = [ + 'micrometer-bom' + ] + } + } + library('MIMEPull', '1.9.12') { + group('org.jvnet.mimepull') { + modules = [ + 'mimepull' + ] + } + } + library('Mockito', '3.2.0') { + group('org.mockito') { + modules = [ + 'mockito-core', + 'mockito-inline', + 'mockito-junit-jupiter' + ] + } + } + library('Mongo Driver ReactiveStreams', '1.12.0') { + group('org.mongodb') { + modules = [ + 'mongodb-driver-reactivestreams' + ] + } + } + library('MongoDB', '3.11.2') { + group('org.mongodb') { + modules = [ + 'bson', + 'mongodb-driver', + 'mongodb-driver-async', + 'mongodb-driver-core', + 'mongo-java-driver' + ] + } + } + library('MSSQL JDBC', '7.4.1.jre8') { + group('com.microsoft.sqlserver') { + modules = [ + 'mssql-jdbc' + ] + } + } + library('MySQL', '8.0.18') { + group('mysql') { + modules = [ + 'mysql-connector-java' { + exclude group: 'com.google.protobuf', module: 'protobuf-java' + } + ] + } + } + library('NekoHTML', '1.9.22') { + group('net.sourceforge.nekohtml') { + modules = [ + 'nekohtml' + ] + } + } + library('Neo4j OGM', '3.2.3') { + group('org.neo4j') { + modules = [ + 'neo4j-ogm-api', + 'neo4j-ogm-bolt-driver', + 'neo4j-ogm-bolt-native-types', + 'neo4j-ogm-core', + 'neo4j-ogm-embedded-driver', + 'neo4j-ogm-embedded-native-types', + 'neo4j-ogm-http-driver' + ] + } + } + library('Netty', '4.1.43.Final') { + group('io.netty') { + imports = [ + 'netty-bom' + ] + } + } + library('Netty tcNative', '2.0.28.Final') { + group('io.netty') { + modules = [ + 'netty-tcnative-boringssl-static' + ] + } + } + library('NIO Multipart Parser', '1.1.0') { + group('org.synchronoss.cloud') { + modules = [ + 'nio-multipart-parser' + ] + } + } + library('OJDBC', '19.3.0.0') { + group('com.oracle.ojdbc') { + modules = [ + 'dms', + 'ojdbc10', + 'ojdbc10_g', + 'ojdbc10dms', + 'ojdbc10dms_g', + 'ojdbc8', + 'ojdbc8_g', + 'ojdbc8dms', + 'ojdbc8dms_g', + 'ons', + 'oraclepki', + 'orai18n', + 'osdt_cert', + 'osdt_core', + 'simplefan', + 'ucp', + 'xdb', + 'xmlparserv2' + ] + } + } + library('OkHttp3', '3.14.4') { + group('com.squareup.okhttp3') { + modules = [ + 'logging-interceptor', + 'mockwebserver', + 'okcurl', + 'okhttp', + 'okhttp-dnsoverhttps', + 'okhttp-sse', + 'okhttp-testing-support', + 'okhttp-tls', + 'okhttp-urlconnection' + ] + } + } + library('Pooled JMS', '1.1.0') { + group('org.messaginghub') { + modules = [ + 'pooled-jms' + ] + } + } + library('Postgresql', '42.2.8') { + group('org.postgresql') { + modules = [ + 'postgresql' + ] + } + } + library('Prometheus PushGateway', '0.8.0') { + group('io.prometheus') { + modules = [ + 'simpleclient_pushgateway' + ] + } + } + library('Quartz', '2.3.2') { + group('org.quartz-scheduler') { + modules = [ + 'quartz' { + exclude group: 'com.mchange', module: 'c3p0' + exclude group: 'com.zaxxer', module: '*' + }, + 'quartz-jobs' + ] + } + } + library('QueryDSL', '4.2.2') { + group('com.querydsl') { + modules = [ + 'querydsl-apt', + 'querydsl-collections', + 'querydsl-core', + 'querydsl-jpa', + 'querydsl-mongodb' { + exclude group: 'org.mongodb', module: 'mongo-java-driver' + } + ] + } + } + library('Rabbit AMQP Client', '5.7.3') { + group('com.rabbitmq') { + modules = [ + 'amqp-client' + ] + } + } + library('Reactive Streams', '1.0.3') { + group('org.reactivestreams') { + modules = [ + 'reactive-streams' + ] + } + } + library('Reactor Bom', 'Dysprosium-SR2') { + group('io.projectreactor') { + imports = [ + 'reactor-bom' + ] + } + } + library('REST Assured', '3.3.0') { + group('io.rest-assured') { + modules = [ + 'json-path', + 'json-schema-validator', + 'rest-assured', + 'scala-support', + 'spring-mock-mvc', + 'spring-web-test-client', + 'xml-path' + ] + } + } + library('RSocket', '1.0.0-RC5') { + group('io.rsocket') { + imports = [ + 'rsocket-bom' + ] + } + } + library('RxJava', '1.3.8') { + group('io.reactivex') { + modules = [ + 'rxjava' + ] + } + } + library('RxJava Adapter', '1.2.1') { + group('io.reactivex') { + modules = [ + 'rxjava-reactive-streams' + ] + } + } + library('RxJava2', '2.2.15') { + group('io.reactivex.rxjava2') { + modules = [ + 'rxjava' + ] + } + } + library('Spring Boot', '2.3.0.GRADLE-SNAPSHOT') { + group('org.springframework.boot') { + modules = [ + 'spring-boot', + 'spring-boot-test', + 'spring-boot-test-autoconfigure', + 'spring-boot-actuator', + 'spring-boot-actuator-autoconfigure', + 'spring-boot-autoconfigure', + 'spring-boot-autoconfigure-processor', + 'spring-boot-configuration-metadata', + 'spring-boot-configuration-processor', + 'spring-boot-devtools', + 'spring-boot-loader', + 'spring-boot-loader-tools', + 'spring-boot-properties-migrator', + 'spring-boot-starter', + 'spring-boot-starter-activemq', + 'spring-boot-starter-actuator', + 'spring-boot-starter-amqp', + 'spring-boot-starter-aop', + 'spring-boot-starter-artemis', + 'spring-boot-starter-batch', + 'spring-boot-starter-cache', + 'spring-boot-starter-cloud-connectors', + 'spring-boot-starter-data-cassandra', + 'spring-boot-starter-data-cassandra-reactive', + 'spring-boot-starter-data-couchbase', + 'spring-boot-starter-data-couchbase-reactive', + 'spring-boot-starter-data-elasticsearch', + 'spring-boot-starter-data-jdbc', + 'spring-boot-starter-data-jpa', + 'spring-boot-starter-data-ldap', + 'spring-boot-starter-data-mongodb', + 'spring-boot-starter-data-mongodb-reactive', + 'spring-boot-starter-data-redis', + 'spring-boot-starter-data-redis-reactive', + 'spring-boot-starter-data-neo4j', + 'spring-boot-starter-data-rest', + 'spring-boot-starter-data-solr', + 'spring-boot-starter-freemarker', + 'spring-boot-starter-groovy-templates', + 'spring-boot-starter-hateoas', + 'spring-boot-starter-integration', + 'spring-boot-starter-jdbc', + 'spring-boot-starter-jersey', + 'spring-boot-starter-jetty', + 'spring-boot-starter-jooq', + 'spring-boot-starter-json', + 'spring-boot-starter-jta-atomikos', + 'spring-boot-starter-jta-bitronix', + 'spring-boot-starter-log4j2', + 'spring-boot-starter-logging', + 'spring-boot-starter-mail', + 'spring-boot-starter-mustache', + 'spring-boot-starter-oauth2-client', + 'spring-boot-starter-oauth2-resource-server', + 'spring-boot-starter-quartz', + 'spring-boot-starter-reactor-netty', + 'spring-boot-starter-rsocket', + 'spring-boot-starter-security', + 'spring-boot-starter-test', + 'spring-boot-starter-thymeleaf', + 'spring-boot-starter-tomcat', + 'spring-boot-starter-undertow', + 'spring-boot-starter-validation', + 'spring-boot-starter-web', + 'spring-boot-starter-webflux', + 'spring-boot-starter-websocket', + 'spring-boot-starter-web-services' + ] + plugins = [ + 'spring-boot-maven-plugin' + ] + } + } + library('SAAJ Impl', '1.5.1') { + group('com.sun.xml.messaging.saaj') { + modules = [ + 'saaj-impl' + ] + } + } + library('Selenium', '3.141.59') { + group('org.seleniumhq.selenium') { + modules = [ + 'selenium-api', + 'selenium-chrome-driver', + 'selenium-edge-driver', + 'selenium-firefox-driver', + 'selenium-ie-driver', + 'selenium-java', + 'selenium-opera-driver', + 'selenium-remote-driver' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'selenium-safari-driver', + 'selenium-support' { + exclude group: 'commons-logging', module: 'commons-logging' + } + ] + } + } + library('Selenium HtmlUnit', '2.36.0') { + group('org.seleniumhq.selenium') { + modules = [ + 'htmlunit-driver' + ] + } + } + library('SendGrid', '4.4.1') { + group('com.sendgrid') { + modules = [ + 'sendgrid-java' + ] + } + } + library('Servlet API', '4.0.1') { + group('javax.servlet') { + modules = [ + 'javax.servlet-api' + ] + } + } + library('SLF4J', '1.7.29') { + group('org.slf4j') { + modules = [ + 'jcl-over-slf4j', + 'jul-to-slf4j', + 'log4j-over-slf4j', + 'slf4j-api', + 'slf4j-ext', + 'slf4j-jcl', + 'slf4j-jdk14', + 'slf4j-log4j12', + 'slf4j-nop', + 'slf4j-simple' + ] + } + } + library('SnakeYAML', '1.25') { + group('org.yaml') { + modules = [ + 'snakeyaml' + ] + } + } + library('Solr', '8.2.0') { + group('org.apache.solr') { + modules = [ + 'solr-analysis-extras', + 'solr-analytics', + 'solr-cell', + 'solr-clustering', + 'solr-core', + 'solr-dataimporthandler', + 'solr-dataimporthandler-extras', + 'solr-langid', + 'solr-ltr', + 'solr-solrj' { + exclude group: 'org.slf4j', module: 'jcl-over-slf4j' + }, + 'solr-test-framework', + 'solr-velocity' + ] + } + } + library('Spring AMQP', '2.2.2.RELEASE') { + group('org.springframework.amqp') { + modules = [ + 'spring-amqp', + 'spring-rabbit', + 'spring-rabbit-junit', + 'spring-rabbit-test' + ] + } + } + library('Spring Batch', '4.2.1.RELEASE') { + group('org.springframework.batch') { + modules = [ + 'spring-batch-core', + 'spring-batch-infrastructure', + 'spring-batch-integration', + 'spring-batch-test' + ] + } + } + library('Spring Cloud Connectors', '2.0.7.RELEASE') { + group('org.springframework.cloud') { + modules = [ + 'spring-cloud-cloudfoundry-connector', + 'spring-cloud-connectors-core', + 'spring-cloud-heroku-connector', + 'spring-cloud-localconfig-connector', + 'spring-cloud-spring-service-connector' + ] + } + } + library('Spring Data Releasetrain', 'Moore-SR3') { + group('org.springframework.data') { + imports = [ + 'spring-data-releasetrain' + ] + } + } + library('Spring Framework', '5.2.3.BUILD-SNAPSHOT') { + group('org.springframework') { + imports = [ + 'spring-framework-bom' + ] + } + } + library('Spring HATEOAS', '1.0.2.RELEASE') { + group('org.springframework.hateoas') { + modules = [ + 'spring-hateoas' + ] + } + } + library('Spring Integration', '5.2.2.RELEASE') { + group('org.springframework.integration') { + modules = [ + 'spring-integration-http' { + exclude group: 'commons-logging', module: 'commons-logging' + exclude group: 'commons-logging', module: 'commons-logging-api' + } + ] + imports = [ + 'spring-integration-bom' + ] + } + } + library('Spring Kafka', '2.3.4.RELEASE') { + group('org.springframework.kafka') { + modules = [ + 'spring-kafka', + 'spring-kafka-test' + ] + } + } + library('Spring LDAP', '2.3.2.RELEASE') { + group('org.springframework.ldap') { + modules = [ + 'spring-ldap-core', + 'spring-ldap-core-tiger', + 'spring-ldap-ldif-batch', + 'spring-ldap-ldif-core', + 'spring-ldap-odm', + 'spring-ldap-test' + ] + } + } + library('Spring RESTDocs', '2.0.4.RELEASE') { + group('org.springframework.restdocs') { + modules = [ + 'spring-restdocs-asciidoctor', + 'spring-restdocs-core', + 'spring-restdocs-mockmvc', + 'spring-restdocs-restassured', + 'spring-restdocs-webtestclient' + ] + } + } + library('Spring Retry', '1.2.4.RELEASE') { + group('org.springframework.retry') { + modules = [ + 'spring-retry' + ] + } + } + library('Spring Security', '5.2.1.RELEASE') { + group('org.springframework.security') { + imports = [ + 'spring-security-bom' + ] + } + } + library('Spring Session Bom', 'Corn-RELEASE') { + group('org.springframework.session') { + imports = [ + 'spring-session-bom' + ] + } + } + library('Spring WS', '3.0.8.RELEASE') { + group('org.springframework.ws') { + modules = [ + 'spring-ws-core' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'spring-ws-security' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'spring-ws-support' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'spring-ws-test' { + exclude group: 'commons-logging', module: 'commons-logging' + }, + 'spring-xml' + ] + } + } + library('SQLite JDBC', '3.28.0') { + group('org.xerial') { + modules = [ + 'sqlite-jdbc' + ] + } + } + library('Sun Mail', '1.6.4') { + group('com.sun.mail') { + modules = [ + 'jakarta.mail' + ] + } + } + library('Thymeleaf', '3.0.11.RELEASE') { + group('org.thymeleaf') { + modules = [ + 'thymeleaf', + 'thymeleaf-spring5' + ] + } + } + library('Thymeleaf Extras Data Attribute', '2.0.1') { + group('com.github.mxab.thymeleaf.extras') { + modules = [ + 'thymeleaf-extras-data-attribute' + ] + } + } + library('Thymeleaf Extras Java8Time', '3.0.4.RELEASE') { + group('org.thymeleaf.extras') { + modules = [ + 'thymeleaf-extras-java8time' + ] + } + } + library('Thymeleaf Extras SpringSecurity', '3.0.4.RELEASE') { + group('org.thymeleaf.extras') { + modules = [ + 'thymeleaf-extras-springsecurity5' + ] + } + } + library('Thymeleaf Layout Dialect', '2.4.1') { + group('nz.net.ultraq.thymeleaf') { + modules = [ + 'thymeleaf-layout-dialect' + ] + } + } + library('Tomcat', '9.0.30') { + group('org.apache.tomcat') { + modules = [ + 'tomcat-annotations-api', + 'tomcat-jdbc', + 'tomcat-jsp-api' + ] + } + group('org.apache.tomcat.embed') { + modules = [ + 'tomcat-embed-core', + 'tomcat-embed-el', + 'tomcat-embed-jasper', + 'tomcat-embed-websocket' + ] + } + } + library('UnboundID LDAPSDK', '4.0.13') { + group('com.unboundid') { + modules = [ + 'unboundid-ldapsdk' + ] + } + } + library('Undertow', '2.0.28.Final') { + group('io.undertow') { + modules = [ + 'undertow-core', + 'undertow-servlet', + 'undertow-websockets-jsr' + ] + } + } + library('Versions Maven Plugin', '2.7') { + group('org.codehaus.mojo') { + plugins = [ + 'versions-maven-plugin' + ] + } + } + library('WebJars HAL Browser', '3325375') { + group('org.webjars') { + modules = [ + 'hal-browser' + ] + } + } + library('WebJars Locator Core', '0.43') { + group('org.webjars') { + modules = [ + 'webjars-locator-core' + ] + } + } + library('WSDL4j', '1.6.3') { + group('wsdl4j') { + modules = [ + 'wsdl4j' + ] + } + } + library('XML Maven Plugin', '1.0.2') { + group('org.codehaus.mojo') { + plugins = [ + 'xml-maven-plugin' + ] + } + } + library('XmlUnit2', '2.6.3') { + group('org.xmlunit') { + modules = [ + 'xmlunit-assertj', + 'xmlunit-core', + 'xmlunit-legacy', + 'xmlunit-matchers', + 'xmlunit-placeholders' + ] + } + } +} diff --git a/spring-boot-project/spring-boot-dependencies/pom.xml b/spring-boot-project/spring-boot-dependencies/pom.xml deleted file mode 100644 index ce2763d9eb5..00000000000 --- a/spring-boot-project/spring-boot-dependencies/pom.xml +++ /dev/null @@ -1,3531 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-build - ${revision} - ../.. - - spring-boot-dependencies - pom - Spring Boot Dependencies - Spring Boot Dependencies - https://projects.spring.io/spring-boot/# - - - Apache License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0 - - - - https://github.com/spring-projects/spring-boot - - - - Pivotal - info@pivotal.io - Pivotal Software, Inc. - https://www.spring.io - - - - ${basedir}/../.. - - 5.15.11 - 2.7.7 - 1.9.77 - 2.10.1 - 1.9.5 - 3.14.0 - 4.0.6 - 4.0.1 - 2.1.4 - 1.10.4 - 2.8.0 - 3.7.2 - 1.5.1 - 1.13 - 2.7.0 - 3.9 - 1.6 - 2.7.0 - 2.7.11 - 2.1.0 - 1.0.8.RELEASE - 11.5.0.0 - 10.14.2.0 - 4.1.1 - 2.10.6 - 3.8.1 - 2.2.0 - 6.1.3 - 2.3.29 - 6.8.5 - 3.0.3 - 2.3.2 - 2.5.8 - 2.8.6 - 1.4.200 - 2.2 - 3.12.4 - 1.3.2 - 5.4.9.Final - 6.1.0.Final - 3.4.1 - 2.5.0 - 2.36.0 - 4.1.4 - 4.5.10 - 4.4.12 - 9.4.16.Final - 2.16 - - 2.10.1 - ${jackson.version} - 1.2.1 - 1.3.5 - 2.0.3 - 1.1.6 - 1.0.2 - 1.6.4 - 2.2.3 - 4.0.3 - 2.3.5 - 1.2.7 - 1.3.3 - 2.0.1 - 1.1.2 - 2.1.6 - 2.3.2 - 2.3.2 - 3.1.0 - 1.2.0 - 1.3.2 - 1.1.1 - 2.3.1 - 2.3.1 - 2.0.1 - 1.1.4 - 1.0 - 1.6.2 - 1.0.3 - 2.2 - 1.3 - 2.0.1.Final - 1.1 - 1.2.0 - 3.0.8 - 3.4.1.Final - 7.6.0.Final - 2.0.6 - 3.1.0 - 2.29.1 - 6.3.1 - 9.4.24.v20191120 - 2.2.0.v201112011158 - 8.5.49 - 1.1.0 - 1.15 - 4.5.2 - 2.10.5 - 1.6.2 - - 1.2.2 - ${johnzon-jsonb.version} - 3.12.3 - 1.5.0 - 2.4.0 - 1.2 - 1.3.1 - 4.12 - 5.5.2 - 2.3.1 - 1.3.61 - 1.3.2 - 5.2.1.RELEASE - 3.8.2 - 2.12.1 - 1.2.3 - 1.18.10 - 2.5.2 - 1.3.1 - 1.9.12 - 3.2.0 - 1.12.0 - 3.11.2 - 7.4.1.jre8 - 8.0.18 - 1.9.22 - 3.2.3 - 4.1.43.Final - 2.0.28.Final - 1.1.0 - 19.3.0.0 - 3.14.4 - 1.1.0 - 42.2.8 - 0.8.0 - 2.3.2 - 4.2.2 - 5.7.3 - Dysprosium-SR2 - 3.3.0 - 1.0.3 - 1.0.0-RC5 - 1.3.8 - 1.2.1 - 2.2.15 - 3.141.59 - 2.36.0 - 4.4.1 - 4.0.1 - 1.7.29 - 1.25 - 8.2.0 - 2.2.2.RELEASE - 4.2.1.RELEASE - 2.0.7.RELEASE - Moore-SR3 - 5.2.3.BUILD-SNAPSHOT - 1.0.2.RELEASE - 5.2.2.RELEASE - 2.3.4.RELEASE - 2.3.2.RELEASE - 2.0.4.RELEASE - 1.2.4.RELEASE - 5.2.1.RELEASE - Corn-RELEASE - 3.0.8.RELEASE - 3.28.0 - ${jakarta-mail.version} - 1.5.1 - 3.0.11.RELEASE - 3.0.4.RELEASE - 2.4.1 - 2.0.1 - 3.0.4.RELEASE - 9.0.30 - 4.0.13 - 2.0.28.Final - 3325375 - 0.43 - 1.6.3 - 2.6.3 - - 3.0.0 - 1.6.0 - 3.0.1 - 1.8 - 3.2.0 - 3.1.0 - 3.8.1 - 3.1.1 - 2.8.2 - 3.0.0-M3 - 2.22.2 - 2.5.2 - 3.2.1 - 3.2.0 - 3.2.0 - 3.1.1 - 3.1.0 - 3.2.1 - 3.2.0 - 2.22.2 - 3.0.0 - 3.2.3 - 2.7 - 1.0.2 - 1.1.0 - - - - - - org.springframework.boot - spring-boot - ${revision} - - - org.springframework.boot - spring-boot-test - ${revision} - - - org.springframework.boot - spring-boot-test-autoconfigure - ${revision} - - - org.springframework.boot - spring-boot-actuator - ${revision} - - - org.springframework.boot - spring-boot-actuator-autoconfigure - ${revision} - - - org.springframework.boot - spring-boot-autoconfigure - ${revision} - - - org.springframework.boot - spring-boot-autoconfigure-processor - ${revision} - - - org.springframework.boot - spring-boot-configuration-metadata - ${revision} - - - org.springframework.boot - spring-boot-configuration-processor - ${revision} - - - org.springframework.boot - spring-boot-devtools - ${revision} - - - org.springframework.boot - spring-boot-loader - ${revision} - - - org.springframework.boot - spring-boot-loader-tools - ${revision} - - - org.springframework.boot - spring-boot-properties-migrator - ${revision} - - - org.springframework.boot - spring-boot-starter - ${revision} - - - org.springframework.boot - spring-boot-starter-activemq - ${revision} - - - org.springframework.boot - spring-boot-starter-actuator - ${revision} - - - org.springframework.boot - spring-boot-starter-amqp - ${revision} - - - org.springframework.boot - spring-boot-starter-aop - ${revision} - - - org.springframework.boot - spring-boot-starter-artemis - ${revision} - - - org.springframework.boot - spring-boot-starter-batch - ${revision} - - - org.springframework.boot - spring-boot-starter-cache - ${revision} - - - org.springframework.boot - spring-boot-starter-cloud-connectors - ${revision} - - - org.springframework.boot - spring-boot-starter-data-cassandra - ${revision} - - - org.springframework.boot - spring-boot-starter-data-cassandra-reactive - ${revision} - - - org.springframework.boot - spring-boot-starter-data-couchbase - ${revision} - - - org.springframework.boot - spring-boot-starter-data-couchbase-reactive - ${revision} - - - org.springframework.boot - spring-boot-starter-data-elasticsearch - ${revision} - - - org.springframework.boot - spring-boot-starter-data-jdbc - ${revision} - - - org.springframework.boot - spring-boot-starter-data-jpa - ${revision} - - - org.springframework.boot - spring-boot-starter-data-ldap - ${revision} - - - org.springframework.boot - spring-boot-starter-data-mongodb - ${revision} - - - org.springframework.boot - spring-boot-starter-data-mongodb-reactive - ${revision} - - - org.springframework.boot - spring-boot-starter-data-redis - ${revision} - - - org.springframework.boot - spring-boot-starter-data-redis-reactive - ${revision} - - - org.springframework.boot - spring-boot-starter-data-neo4j - ${revision} - - - org.springframework.boot - spring-boot-starter-data-rest - ${revision} - - - org.springframework.boot - spring-boot-starter-data-solr - ${revision} - - - org.springframework.boot - spring-boot-starter-freemarker - ${revision} - - - org.springframework.boot - spring-boot-starter-groovy-templates - ${revision} - - - org.springframework.boot - spring-boot-starter-hateoas - ${revision} - - - org.springframework.boot - spring-boot-starter-integration - ${revision} - - - org.springframework.boot - spring-boot-starter-jdbc - ${revision} - - - org.springframework.boot - spring-boot-starter-jersey - ${revision} - - - org.springframework.boot - spring-boot-starter-jetty - ${revision} - - - org.springframework.boot - spring-boot-starter-jooq - ${revision} - - - org.springframework.boot - spring-boot-starter-json - ${revision} - - - org.springframework.boot - spring-boot-starter-jta-atomikos - ${revision} - - - org.springframework.boot - spring-boot-starter-jta-bitronix - ${revision} - - - org.springframework.boot - spring-boot-starter-log4j2 - ${revision} - - - org.springframework.boot - spring-boot-starter-logging - ${revision} - - - org.springframework.boot - spring-boot-starter-mail - ${revision} - - - org.springframework.boot - spring-boot-starter-mustache - ${revision} - - - org.springframework.boot - spring-boot-starter-oauth2-client - ${revision} - - - org.springframework.boot - spring-boot-starter-oauth2-resource-server - ${revision} - - - org.springframework.boot - spring-boot-starter-quartz - ${revision} - - - org.springframework.boot - spring-boot-starter-reactor-netty - ${revision} - - - org.springframework.boot - spring-boot-starter-rsocket - ${revision} - - - org.springframework.boot - spring-boot-starter-security - ${revision} - - - org.springframework.boot - spring-boot-starter-test - ${revision} - - - org.springframework.boot - spring-boot-starter-thymeleaf - ${revision} - - - org.springframework.boot - spring-boot-starter-tomcat - ${revision} - - - org.springframework.boot - spring-boot-starter-undertow - ${revision} - - - org.springframework.boot - spring-boot-starter-validation - ${revision} - - - org.springframework.boot - spring-boot-starter-web - ${revision} - - - org.springframework.boot - spring-boot-starter-webflux - ${revision} - - - org.springframework.boot - spring-boot-starter-websocket - ${revision} - - - org.springframework.boot - spring-boot-starter-web-services - ${revision} - - - - antlr - antlr - ${antlr2.version} - - - ch.qos.logback - logback-access - ${logback.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - ch.qos.logback - logback-core - ${logback.version} - - - com.atomikos - transactions-jdbc - ${atomikos.version} - - - com.atomikos - transactions-jms - ${atomikos.version} - - - com.atomikos - transactions-jta - ${atomikos.version} - - - com.couchbase.client - java-client - ${couchbase-client.version} - - - com.couchbase.client - couchbase-spring-cache - ${couchbase-cache-client.version} - - - com.datastax.cassandra - cassandra-driver-core - ${cassandra-driver.version} - - - com.datastax.cassandra - cassandra-driver-mapping - ${cassandra-driver.version} - - - com.fasterxml - classmate - ${classmate.version} - - - com.fasterxml.jackson - jackson-bom - ${jackson-bom.version} - import - pom - - - com.github.ben-manes.caffeine - caffeine - ${caffeine.version} - - - com.github.ben-manes.caffeine - guava - ${caffeine.version} - - - com.github.ben-manes.caffeine - jcache - ${caffeine.version} - - - com.github.ben-manes.caffeine - simulator - ${caffeine.version} - - - com.github.mxab.thymeleaf.extras - thymeleaf-extras-data-attribute - ${thymeleaf-extras-data-attribute.version} - - - com.google.appengine - appengine-api-1.0-sdk - ${appengine-sdk.version} - - - com.google.code.gson - gson - ${gson.version} - - - com.h2database - h2 - ${h2.version} - - - com.hazelcast - hazelcast - ${hazelcast.version} - - - com.hazelcast - hazelcast-client - ${hazelcast.version} - - - com.hazelcast - hazelcast-hibernate52 - ${hazelcast-hibernate5.version} - - - com.hazelcast - hazelcast-hibernate53 - ${hazelcast-hibernate5.version} - - - com.hazelcast - hazelcast-spring - ${hazelcast.version} - - - com.ibm.db2 - jcc - ${db2-jdbc.version} - - - com.jayway.jsonpath - json-path - ${json-path.version} - - - com.jayway.jsonpath - json-path-assert - ${json-path.version} - - - com.microsoft.sqlserver - mssql-jdbc - ${mssql-jdbc.version} - - - com.oracle.ojdbc - dms - ${ojdbc.version} - - - com.oracle.ojdbc - ojdbc10 - ${ojdbc.version} - - - com.oracle.ojdbc - ojdbc10_g - ${ojdbc.version} - - - com.oracle.ojdbc - ojdbc10dms - ${ojdbc.version} - - - com.oracle.ojdbc - ojdbc10dms_g - ${ojdbc.version} - - - com.oracle.ojdbc - ojdbc8 - ${ojdbc.version} - - - com.oracle.ojdbc - ojdbc8_g - ${ojdbc.version} - - - com.oracle.ojdbc - ojdbc8dms - ${ojdbc.version} - - - com.oracle.ojdbc - ojdbc8dms_g - ${ojdbc.version} - - - com.oracle.ojdbc - ons - ${ojdbc.version} - - - com.oracle.ojdbc - oraclepki - ${ojdbc.version} - - - com.oracle.ojdbc - orai18n - ${ojdbc.version} - - - com.oracle.ojdbc - osdt_cert - ${ojdbc.version} - - - com.oracle.ojdbc - osdt_core - ${ojdbc.version} - - - com.oracle.ojdbc - simplefan - ${ojdbc.version} - - - com.oracle.ojdbc - ucp - ${ojdbc.version} - - - com.oracle.ojdbc - xdb - ${ojdbc.version} - - - com.oracle.ojdbc - xmlparserv2 - ${ojdbc.version} - - - com.querydsl - querydsl-apt - ${querydsl.version} - - - com.querydsl - querydsl-collections - ${querydsl.version} - - - com.querydsl - querydsl-core - ${querydsl.version} - - - com.querydsl - querydsl-jpa - ${querydsl.version} - - - com.querydsl - querydsl-mongodb - ${querydsl.version} - - - org.mongodb - mongo-java-driver - - - - - com.rabbitmq - amqp-client - ${rabbit-amqp-client.version} - - - com.samskivert - jmustache - ${jmustache.version} - - - com.sendgrid - sendgrid-java - ${sendgrid.version} - - - com.squareup.okhttp3 - logging-interceptor - ${okhttp3.version} - - - com.squareup.okhttp3 - mockwebserver - ${okhttp3.version} - - - com.squareup.okhttp3 - okcurl - ${okhttp3.version} - - - com.squareup.okhttp3 - okhttp - ${okhttp3.version} - - - com.squareup.okhttp3 - okhttp-dnsoverhttps - ${okhttp3.version} - - - com.squareup.okhttp3 - okhttp-sse - ${okhttp3.version} - - - com.squareup.okhttp3 - okhttp-testing-support - ${okhttp3.version} - - - com.squareup.okhttp3 - okhttp-tls - ${okhttp3.version} - - - com.squareup.okhttp3 - okhttp-urlconnection - ${okhttp3.version} - - - com.sun.activation - jakarta.activation - ${jakarta-activation.version} - - - com.sun.mail - jakarta.mail - ${sun-mail.version} - - - com.sun.xml.messaging.saaj - saaj-impl - ${saaj-impl.version} - - - com.unboundid - unboundid-ldapsdk - ${unboundid-ldapsdk.version} - - - com.zaxxer - HikariCP - ${hikaricp.version} - - - commons-codec - commons-codec - ${commons-codec.version} - - - commons-pool - commons-pool - ${commons-pool.version} - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - ${embedded-mongo.version} - - - io.dropwizard.metrics - metrics-annotation - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-core - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-ehcache - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-graphite - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-healthchecks - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-httpasyncclient - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-jdbi - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-jersey2 - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-jetty9 - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-jmx - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-json - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-jvm - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-log4j2 - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-logback - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-servlet - ${dropwizard-metrics.version} - - - io.dropwizard.metrics - metrics-servlets - ${dropwizard-metrics.version} - - - io.lettuce - lettuce-core - ${lettuce.version} - - - io.micrometer - micrometer-registry-stackdriver - ${micrometer.version} - - - javax.annotation - javax.annotation-api - - - - - io.micrometer - micrometer-bom - ${micrometer.version} - pom - import - - - io.netty - netty-bom - ${netty.version} - import - pom - - - io.netty - netty-tcnative-boringssl-static - ${netty-tcnative.version} - - - io.projectreactor - reactor-bom - ${reactor-bom.version} - import - pom - - - io.prometheus - simpleclient_pushgateway - ${prometheus-pushgateway.version} - - - io.reactivex - rxjava - ${rxjava.version} - - - io.reactivex - rxjava-reactive-streams - ${rxjava-adapter.version} - - - io.reactivex.rxjava2 - rxjava - ${rxjava2.version} - - - io.rest-assured - json-path - ${rest-assured.version} - - - io.rest-assured - json-schema-validator - ${rest-assured.version} - - - io.rest-assured - rest-assured - ${rest-assured.version} - - - io.rest-assured - scala-support - ${rest-assured.version} - - - io.rest-assured - spring-mock-mvc - ${rest-assured.version} - - - io.rest-assured - spring-web-test-client - ${rest-assured.version} - - - io.rest-assured - xml-path - ${rest-assured.version} - - - io.rsocket - rsocket-bom - ${rsocket.version} - pom - import - - - io.searchbox - jest - ${jest.version} - - - io.spring.gradle - dependency-management-plugin - ${dependency-management-plugin.version} - - - io.undertow - undertow-core - ${undertow.version} - - - io.undertow - undertow-servlet - ${undertow.version} - - - io.undertow - undertow-websockets-jsr - ${undertow.version} - - - jakarta.activation - jakarta.activation-api - ${jakarta-activation.version} - - - jakarta.annotation - jakarta.annotation-api - ${jakarta-annotation.version} - - - jakarta.jms - jakarta.jms-api - ${jakarta-jms.version} - - - jakarta.json - jakarta.json-api - ${jakarta-json.version} - - - jakarta.json.bind - jakarta.json.bind-api - ${jakarta-json-bind.version} - - - jakarta.mail - jakarta.mail-api - ${jakarta-mail.version} - - - jakarta.persistence - jakarta.persistence-api - ${jakarta-persistence.version} - - - jakarta.servlet - jakarta.servlet-api - ${jakarta-servlet.version} - - - jakarta.servlet.jsp.jstl - jakarta.servlet.jsp.jstl-api - ${jakarta-servlet-jsp-jstl.version} - - - jakarta.transaction - jakarta.transaction-api - ${jakarta-transaction.version} - - - jakarta.validation - jakarta.validation-api - ${jakarta-validation.version} - - - jakarta.websocket - jakarta.websocket-api - ${jakarta-websocket.version} - - - jakarta.ws.rs - jakarta.ws.rs-api - ${jakarta-ws-rs.version} - - - jakarta.xml.bind - jakarta.xml.bind-api - ${jakarta-xml-bind.version} - - - jakarta.xml.ws - jakarta.xml.ws-api - ${jakarta-xml-ws.version} - - - javax.activation - javax.activation-api - ${javax-activation.version} - - - javax.annotation - javax.annotation-api - ${javax-annotation.version} - - - javax.cache - cache-api - ${javax-cache.version} - - - javax.jms - javax.jms-api - ${javax-jms.version} - - - javax.json - javax.json-api - ${javax-json.version} - - - javax.json.bind - javax.json.bind-api - ${javax-jsonb.version} - - - javax.mail - javax.mail-api - ${javax-mail.version} - - - javax.money - money-api - ${javax-money.version} - - - javax.persistence - javax.persistence-api - ${javax-persistence.version} - - - javax.servlet - javax.servlet-api - ${servlet-api.version} - - - javax.servlet - jstl - ${jstl.version} - - - javax.transaction - javax.transaction-api - ${javax-transaction.version} - - - javax.validation - validation-api - ${javax-validation.version} - - - javax.websocket - javax.websocket-api - ${javax-websocket.version} - - - javax.xml.bind - jaxb-api - ${javax-jaxb.version} - - - javax.xml.ws - jaxws-api - ${javax-jaxws.version} - - - jaxen - jaxen - ${jaxen.version} - - - joda-time - joda-time - ${joda-time.version} - - - junit - junit - ${junit.version} - - - mysql - mysql-connector-java - ${mysql.version} - - - com.google.protobuf - protobuf-java - - - - - net.bytebuddy - byte-buddy - ${byte-buddy.version} - - - net.bytebuddy - byte-buddy-agent - ${byte-buddy.version} - - - net.java.dev.jna - jna - ${jna.version} - - - net.java.dev.jna - jna-platform - ${jna.version} - - - net.sf.ehcache - ehcache - ${ehcache.version} - - - net.sourceforge.htmlunit - htmlunit - ${htmlunit.version} - - - commons-logging - commons-logging - - - - - net.sourceforge.jtds - jtds - ${jtds.version} - - - net.sourceforge.nekohtml - nekohtml - ${nekohtml.version} - - - nz.net.ultraq.thymeleaf - thymeleaf-layout-dialect - ${thymeleaf-layout-dialect.version} - - - org.apache.activemq - activemq-amqp - ${activemq.version} - - - org.apache.activemq - activemq-blueprint - ${activemq.version} - - - org.apache.activemq - activemq-broker - ${activemq.version} - - - org.apache.activemq - activemq-camel - ${activemq.version} - - - org.apache.activemq - activemq-client - ${activemq.version} - - - org.apache.activemq - activemq-console - ${activemq.version} - - - commons-logging - commons-logging - - - - - org.apache.activemq - activemq-http - ${activemq.version} - - - org.apache.activemq - activemq-jaas - ${activemq.version} - - - org.apache.activemq - activemq-jdbc-store - ${activemq.version} - - - org.apache.activemq - activemq-jms-pool - ${activemq.version} - - - org.apache.activemq - activemq-kahadb-store - ${activemq.version} - - - org.apache.activemq - activemq-karaf - ${activemq.version} - - - org.apache.activemq - activemq-leveldb-store - ${activemq.version} - - - commons-logging - commons-logging - - - - - org.apache.activemq - activemq-log4j-appender - ${activemq.version} - - - org.apache.activemq - activemq-mqtt - ${activemq.version} - - - org.apache.activemq - activemq-openwire-generator - ${activemq.version} - - - org.apache.activemq - activemq-openwire-legacy - ${activemq.version} - - - org.apache.activemq - activemq-osgi - ${activemq.version} - - - org.apache.activemq - activemq-partition - ${activemq.version} - - - org.apache.activemq - activemq-pool - ${activemq.version} - - - org.apache.activemq - activemq-ra - ${activemq.version} - - - org.apache.activemq - activemq-run - ${activemq.version} - - - org.apache.activemq - activemq-runtime-config - ${activemq.version} - - - org.apache.activemq - activemq-shiro - ${activemq.version} - - - org.apache.activemq - activemq-spring - ${activemq.version} - - - commons-logging - commons-logging - - - - - org.apache.activemq - activemq-stomp - ${activemq.version} - - - org.apache.activemq - activemq-web - ${activemq.version} - - - org.apache.activemq - artemis-amqp-protocol - ${artemis.version} - - - org.apache.activemq - artemis-commons - ${artemis.version} - - - commons-logging - commons-logging - - - - - org.apache.activemq - artemis-core-client - ${artemis.version} - - - org.apache.geronimo.specs - geronimo-json_1.0_spec - - - - - org.apache.activemq - artemis-jms-client - ${artemis.version} - - - org.apache.geronimo.specs - geronimo-json_1.0_spec - - - - - org.apache.activemq - artemis-jms-server - ${artemis.version} - - - org.apache.geronimo.specs - geronimo-json_1.0_spec - - - - - org.apache.activemq - artemis-journal - ${artemis.version} - - - org.apache.activemq - artemis-selector - ${artemis.version} - - - org.apache.activemq - artemis-server - ${artemis.version} - - - commons-logging - commons-logging - - - org.apache.geronimo.specs - geronimo-json_1.0_spec - - - - - org.apache.activemq - artemis-service-extensions - ${artemis.version} - - - org.apache.commons - commons-dbcp2 - ${commons-dbcp2.version} - - - commons-logging - commons-logging - - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - org.apache.commons - commons-pool2 - ${commons-pool2.version} - - - org.apache.derby - derby - ${derby.version} - - - org.apache.httpcomponents - httpasyncclient - ${httpasyncclient.version} - - - commons-logging - commons-logging - - - - - org.apache.httpcomponents - fluent-hc - ${httpclient.version} - - - org.apache.httpcomponents - httpclient - ${httpclient.version} - - - commons-logging - commons-logging - - - - - org.apache.httpcomponents - httpclient-cache - ${httpclient.version} - - - org.apache.httpcomponents - httpclient-osgi - ${httpclient.version} - - - org.apache.httpcomponents - httpclient-win - ${httpclient.version} - - - org.apache.httpcomponents - httpcore - ${httpcore.version} - - - org.apache.httpcomponents - httpcore-nio - ${httpcore.version} - - - org.apache.httpcomponents - httpmime - ${httpclient.version} - - - org.apache.johnzon - johnzon-core - ${johnzon.version} - - - org.apache.johnzon - johnzon-jaxrs - ${johnzon.version} - - - org.apache.johnzon - johnzon-jsonb - ${johnzon.version} - - - org.apache.johnzon - johnzon-jsonb-extras - ${johnzon.version} - - - org.apache.johnzon - johnzon-jsonschema - ${johnzon.version} - - - org.apache.johnzon - johnzon-mapper - ${johnzon.version} - - - org.apache.johnzon - johnzon-websocket - ${johnzon.version} - - - org.apache.kafka - connect-api - ${kafka.version} - - - org.apache.kafka - connect-basic-auth-extension - ${kafka.version} - - - org.apache.kafka - connect-file - ${kafka.version} - - - org.apache.kafka - connect-json - ${kafka.version} - - - org.apache.kafka - connect-runtime - ${kafka.version} - - - org.apache.kafka - connect-transforms - ${kafka.version} - - - org.apache.kafka - kafka-clients - ${kafka.version} - - - org.apache.kafka - kafka-log4j-appender - ${kafka.version} - - - org.apache.kafka - kafka-streams - ${kafka.version} - - - org.apache.kafka - kafka-streams-scala_2.11 - ${kafka.version} - - - org.apache.kafka - kafka-streams-scala_2.12 - ${kafka.version} - - - org.apache.kafka - kafka-streams-test-utils - ${kafka.version} - - - org.apache.kafka - kafka-tools - ${kafka.version} - - - org.apache.kafka - kafka_2.11 - ${kafka.version} - - - org.apache.kafka - kafka_2.12 - ${kafka.version} - - - org.apache.logging.log4j - log4j-bom - ${log4j2.version} - pom - import - - - org.apache.logging.log4j - log4j-to-slf4j - ${log4j2.version} - - - org.apache.solr - solr-analysis-extras - ${solr.version} - - - org.apache.solr - solr-analytics - ${solr.version} - - - org.apache.solr - solr-cell - ${solr.version} - - - org.apache.solr - solr-clustering - ${solr.version} - - - org.apache.solr - solr-core - ${solr.version} - - - org.apache.solr - solr-dataimporthandler - ${solr.version} - - - org.apache.solr - solr-dataimporthandler-extras - ${solr.version} - - - org.apache.solr - solr-langid - ${solr.version} - - - org.apache.solr - solr-ltr - ${solr.version} - - - org.apache.solr - solr-solrj - ${solr.version} - - - org.slf4j - jcl-over-slf4j - - - - - org.apache.solr - solr-test-framework - ${solr.version} - - - org.apache.solr - solr-velocity - ${solr.version} - - - org.apache.tomcat - tomcat-annotations-api - ${tomcat.version} - - - org.apache.tomcat - tomcat-jdbc - ${tomcat.version} - - - org.apache.tomcat - tomcat-jsp-api - ${tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-core - ${tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-el - ${tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-jasper - ${tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-websocket - ${tomcat.version} - - - org.aspectj - aspectjrt - ${aspectj.version} - - - org.aspectj - aspectjtools - ${aspectj.version} - - - org.aspectj - aspectjweaver - ${aspectj.version} - - - org.assertj - assertj-core - ${assertj.version} - - - org.awaitility - awaitility - ${awaitility.version} - - - org.awaitility - awaitility-groovy - ${awaitility.version} - - - org.awaitility - awaitility-kotlin - ${awaitility.version} - - - org.awaitility - awaitility-scala - ${awaitility.version} - - - org.codehaus.btm - btm - ${bitronix.version} - - - org.codehaus.groovy - groovy - ${groovy.version} - - - org.codehaus.groovy - groovy-ant - ${groovy.version} - - - org.codehaus.groovy - groovy-backports-compat23 - ${groovy.version} - - - org.codehaus.groovy - groovy-bsf - ${groovy.version} - - - org.codehaus.groovy - groovy-cli-commons - ${groovy.version} - - - org.codehaus.groovy - groovy-cli-picocli - ${groovy.version} - - - org.codehaus.groovy - groovy-console - ${groovy.version} - - - org.codehaus.groovy - groovy-datetime - ${groovy.version} - - - org.codehaus.groovy - groovy-dateutil - ${groovy.version} - - - org.codehaus.groovy - groovy-docgenerator - ${groovy.version} - - - org.codehaus.groovy - groovy-groovydoc - ${groovy.version} - - - org.codehaus.groovy - groovy-groovysh - ${groovy.version} - - - org.codehaus.groovy - groovy-jaxb - ${groovy.version} - - - org.codehaus.groovy - groovy-jmx - ${groovy.version} - - - org.codehaus.groovy - groovy-json - ${groovy.version} - - - org.codehaus.groovy - groovy-json-direct - ${groovy.version} - - - org.codehaus.groovy - groovy-jsr223 - ${groovy.version} - - - org.codehaus.groovy - groovy-macro - ${groovy.version} - - - org.codehaus.groovy - groovy-nio - ${groovy.version} - - - org.codehaus.groovy - groovy-servlet - ${groovy.version} - - - org.codehaus.groovy - groovy-sql - ${groovy.version} - - - org.codehaus.groovy - groovy-swing - ${groovy.version} - - - org.codehaus.groovy - groovy-templates - ${groovy.version} - - - org.codehaus.groovy - groovy-test - ${groovy.version} - - - org.codehaus.groovy - groovy-test-junit5 - ${groovy.version} - - - org.codehaus.groovy - groovy-testng - ${groovy.version} - - - org.codehaus.groovy - groovy-xml - ${groovy.version} - - - org.codehaus.janino - commons-compiler - ${janino.version} - - - org.codehaus.janino - commons-compiler-jdk - ${janino.version} - - - org.codehaus.janino - janino - ${janino.version} - - - org.eclipse.jetty - jetty-bom - ${jetty.version} - import - pom - - - org.eclipse.jetty - jetty-reactive-httpclient - ${jetty-reactive-httpclient.version} - - - org.eclipse.jetty.orbit - javax.servlet.jsp - ${jetty-jsp.version} - - - org.ehcache - ehcache - ${ehcache3.version} - - - org.ehcache - ehcache-clustered - ${ehcache3.version} - - - org.ehcache - ehcache-transactions - ${ehcache3.version} - - - org.elasticsearch - elasticsearch - ${elasticsearch.version} - - - org.elasticsearch.client - transport - ${elasticsearch.version} - - - org.elasticsearch.distribution.integ-test-zip - elasticsearch - ${elasticsearch.version} - zip - - - org.elasticsearch.plugin - transport-netty4-client - ${elasticsearch.version} - - - org.elasticsearch.client - elasticsearch-rest-client - ${elasticsearch.version} - - - commons-logging - commons-logging - - - - - org.elasticsearch.client - elasticsearch-rest-high-level-client - ${elasticsearch.version} - - - org.firebirdsql.jdbc - jaybird-jdk17 - ${jaybird.version} - - - org.firebirdsql.jdbc - jaybird-jdk18 - ${jaybird.version} - - - org.flywaydb - flyway-core - ${flyway.version} - - - org.freemarker - freemarker - ${freemarker.version} - - - org.glassfish - jakarta.el - ${glassfish-el.version} - - - org.glassfish.jaxb - codemodel - ${glassfish-jaxb.version} - - - org.glassfish.jaxb - codemodel-annotation-compiler - ${glassfish-jaxb.version} - - - org.glassfish.jaxb - jaxb-jxc - ${glassfish-jaxb.version} - - - org.glassfish.jaxb - jaxb-runtime - ${glassfish-jaxb.version} - - - org.glassfish.jaxb - jaxb-xjc - ${glassfish-jaxb.version} - - - org.glassfish.jaxb - txw2 - ${glassfish-jaxb.version} - - - org.glassfish.jaxb - txwc2 - ${glassfish-jaxb.version} - - - org.glassfish.jaxb - xsom - ${glassfish-jaxb.version} - - - org.glassfish.jersey - jersey-bom - ${jersey.version} - import - pom - - - org.hamcrest - hamcrest - ${hamcrest.version} - - - org.hamcrest - hamcrest-core - ${hamcrest.version} - - - org.hamcrest - hamcrest-library - ${hamcrest.version} - - - org.hibernate - hibernate-c3p0 - ${hibernate.version} - - - org.hibernate - hibernate-core - ${hibernate.version} - - - org.hibernate - hibernate-ehcache - ${hibernate.version} - - - org.hibernate - hibernate-entitymanager - ${hibernate.version} - - - org.hibernate - hibernate-envers - ${hibernate.version} - - - org.hibernate - hibernate-hikaricp - ${hibernate.version} - - - org.hibernate - hibernate-java8 - ${hibernate.version} - - - org.hibernate - hibernate-jcache - ${hibernate.version} - - - org.hibernate - hibernate-jpamodelgen - ${hibernate.version} - - - org.hibernate - hibernate-proxool - ${hibernate.version} - - - org.hibernate - hibernate-spatial - ${hibernate.version} - - - org.hibernate - hibernate-testing - ${hibernate.version} - - - org.hibernate - hibernate-vibur - ${hibernate.version} - - - org.hibernate.validator - hibernate-validator - ${hibernate-validator.version} - - - org.hibernate.validator - hibernate-validator-annotation-processor - ${hibernate-validator.version} - - - org.hsqldb - hsqldb - ${hsqldb.version} - - - org.infinispan - infinispan-cachestore-jdbc - ${infinispan.version} - - - org.infinispan - infinispan-cachestore-jpa - ${infinispan.version} - - - org.infinispan - infinispan-cachestore-leveldb - ${infinispan.version} - - - org.infinispan - infinispan-cachestore-remote - ${infinispan.version} - - - org.infinispan - infinispan-cachestore-rest - ${infinispan.version} - - - org.infinispan - infinispan-cachestore-rocksdb - ${infinispan.version} - - - org.infinispan - infinispan-cdi-common - ${infinispan.version} - - - org.infinispan - infinispan-cdi-embedded - ${infinispan.version} - - - org.infinispan - infinispan-cdi-remote - ${infinispan.version} - - - org.infinispan - infinispan-client-hotrod - ${infinispan.version} - - - org.infinispan - infinispan-cloud - ${infinispan.version} - - - org.infinispan - infinispan-clustered-counter - ${infinispan.version} - - - org.infinispan - infinispan-clustered-lock - ${infinispan.version} - - - org.infinispan - infinispan-commons - ${infinispan.version} - - - org.infinispan - infinispan-core - ${infinispan.version} - - - org.infinispan - infinispan-directory-provider - ${infinispan.version} - - - org.infinispan - infinispan-hibernate-cache-v53 - ${infinispan.version} - - - org.infinispan - infinispan-jcache - ${infinispan.version} - - - org.infinispan - infinispan-jcache-commons - ${infinispan.version} - - - org.infinispan - infinispan-jcache-remote - ${infinispan.version} - - - org.infinispan - infinispan-lucene-directory - ${infinispan.version} - - - org.infinispan - infinispan-objectfilter - ${infinispan.version} - - - org.infinispan - infinispan-osgi - ${infinispan.version} - - - org.infinispan - infinispan-persistence-cli - ${infinispan.version} - - - org.infinispan - infinispan-persistence-soft-index - ${infinispan.version} - - - org.infinispan - infinispan-query - ${infinispan.version} - - - org.infinispan - infinispan-query-dsl - ${infinispan.version} - - - org.infinispan - infinispan-remote-query-client - ${infinispan.version} - - - org.infinispan - infinispan-remote-query-server - ${infinispan.version} - - - org.infinispan - infinispan-scripting - ${infinispan.version} - - - org.infinispan - infinispan-server-core - ${infinispan.version} - - - org.infinispan - infinispan-server-hotrod - ${infinispan.version} - - - org.infinispan - infinispan-server-memcached - ${infinispan.version} - - - org.infinispan - infinispan-server-router - ${infinispan.version} - - - org.infinispan - infinispan-spring4-common - ${infinispan.version} - - - org.infinispan - infinispan-spring4-embedded - ${infinispan.version} - - - org.infinispan - infinispan-spring4-remote - ${infinispan.version} - - - org.infinispan - infinispan-spring5-common - ${infinispan.version} - - - org.infinispan - infinispan-spring5-embedded - ${infinispan.version} - - - org.infinispan - infinispan-spring5-remote - ${infinispan.version} - - - org.infinispan - infinispan-tasks - ${infinispan.version} - - - org.infinispan - infinispan-tasks-api - ${infinispan.version} - - - org.infinispan - infinispan-tools - ${infinispan.version} - - - org.infinispan - infinispan-tree - ${infinispan.version} - - - org.influxdb - influxdb-java - ${influxdb-java.version} - - - org.jboss - jboss-transaction-spi - ${jboss-transaction-spi.version} - - - org.jboss.logging - jboss-logging - ${jboss-logging.version} - - - org.jdom - jdom2 - ${jdom2.version} - - - org.jetbrains.kotlin - kotlin-bom - ${kotlin.version} - import - pom - - - org.jetbrains.kotlinx - kotlinx-coroutines-bom - ${kotlin-coroutines.version} - import - pom - - - org.jolokia - jolokia-core - ${jolokia.version} - - - org.jooq - jooq - ${jooq.version} - - - org.jooq - jooq-meta - ${jooq.version} - - - org.jooq - jooq-codegen - ${jooq.version} - - - org.junit - junit-bom - ${junit-jupiter.version} - import - pom - - - org.jvnet.mimepull - mimepull - ${mimepull.version} - - - org.liquibase - liquibase-core - ${liquibase.version} - - - ch.qos.logback - logback-classic - - - - - org.mariadb.jdbc - mariadb-java-client - ${mariadb.version} - - - org.messaginghub - pooled-jms - ${pooled-jms.version} - - - org.mockito - mockito-core - ${mockito.version} - - - org.mockito - mockito-inline - ${mockito.version} - - - org.mockito - mockito-junit-jupiter - ${mockito.version} - - - org.mongodb - bson - ${mongodb.version} - - - org.mongodb - mongodb-driver - ${mongodb.version} - - - org.mongodb - mongodb-driver-async - ${mongodb.version} - - - org.mongodb - mongodb-driver-core - ${mongodb.version} - - - org.mongodb - mongodb-driver-reactivestreams - ${mongo-driver-reactivestreams.version} - - - org.mongodb - mongo-java-driver - ${mongodb.version} - - - org.mortbay.jasper - apache-el - ${jetty-el.version} - - - org.neo4j - neo4j-ogm-api - ${neo4j-ogm.version} - - - org.neo4j - neo4j-ogm-bolt-driver - ${neo4j-ogm.version} - - - org.neo4j - neo4j-ogm-bolt-native-types - ${neo4j-ogm.version} - - - org.neo4j - neo4j-ogm-core - ${neo4j-ogm.version} - - - org.neo4j - neo4j-ogm-embedded-driver - ${neo4j-ogm.version} - - - org.neo4j - neo4j-ogm-embedded-native-types - ${neo4j-ogm.version} - - - org.neo4j - neo4j-ogm-http-driver - ${neo4j-ogm.version} - - - org.postgresql - postgresql - ${postgresql.version} - - - org.projectlombok - lombok - ${lombok.version} - - - org.quartz-scheduler - quartz - ${quartz.version} - - - com.mchange - c3p0 - - - com.zaxxer - * - - - - - org.quartz-scheduler - quartz-jobs - ${quartz.version} - - - org.reactivestreams - reactive-streams - ${reactive-streams.version} - - - org.seleniumhq.selenium - htmlunit-driver - ${selenium-htmlunit.version} - - - org.seleniumhq.selenium - selenium-api - ${selenium.version} - - - org.seleniumhq.selenium - selenium-chrome-driver - ${selenium.version} - - - org.seleniumhq.selenium - selenium-edge-driver - ${selenium.version} - - - org.seleniumhq.selenium - selenium-firefox-driver - ${selenium.version} - - - org.seleniumhq.selenium - selenium-ie-driver - ${selenium.version} - - - org.seleniumhq.selenium - selenium-java - ${selenium.version} - - - org.seleniumhq.selenium - selenium-opera-driver - ${selenium.version} - - - org.seleniumhq.selenium - selenium-remote-driver - ${selenium.version} - - - commons-logging - commons-logging - - - - - org.seleniumhq.selenium - selenium-safari-driver - ${selenium.version} - - - org.seleniumhq.selenium - selenium-support - ${selenium.version} - - - commons-logging - commons-logging - - - - - org.skyscreamer - jsonassert - ${jsonassert.version} - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - org.slf4j - jul-to-slf4j - ${slf4j.version} - - - org.slf4j - log4j-over-slf4j - ${slf4j.version} - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - slf4j-ext - ${slf4j.version} - - - org.slf4j - slf4j-jcl - ${slf4j.version} - - - org.slf4j - slf4j-jdk14 - ${slf4j.version} - - - org.slf4j - slf4j-log4j12 - ${slf4j.version} - - - org.slf4j - slf4j-nop - ${slf4j.version} - - - org.slf4j - slf4j-simple - ${slf4j.version} - - - org.springframework - spring-framework-bom - ${spring-framework.version} - import - pom - - - org.springframework.amqp - spring-amqp - ${spring-amqp.version} - - - org.springframework.amqp - spring-rabbit - ${spring-amqp.version} - - - org.springframework.amqp - spring-rabbit-junit - ${spring-amqp.version} - - - org.springframework.amqp - spring-rabbit-test - ${spring-amqp.version} - - - org.springframework.batch - spring-batch-core - ${spring-batch.version} - - - org.springframework.batch - spring-batch-infrastructure - ${spring-batch.version} - - - org.springframework.batch - spring-batch-integration - ${spring-batch.version} - - - org.springframework.batch - spring-batch-test - ${spring-batch.version} - - - org.springframework.cloud - spring-cloud-cloudfoundry-connector - ${spring-cloud-connectors.version} - - - org.springframework.cloud - spring-cloud-connectors-core - ${spring-cloud-connectors.version} - - - org.springframework.cloud - spring-cloud-heroku-connector - ${spring-cloud-connectors.version} - - - org.springframework.cloud - spring-cloud-localconfig-connector - ${spring-cloud-connectors.version} - - - org.springframework.cloud - spring-cloud-spring-service-connector - ${spring-cloud-connectors.version} - - - org.springframework.data - spring-data-releasetrain - ${spring-data-releasetrain.version} - import - pom - - - org.springframework.hateoas - spring-hateoas - ${spring-hateoas.version} - - - org.springframework.integration - spring-integration-bom - ${spring-integration.version} - import - pom - - - org.springframework.integration - spring-integration-http - ${spring-integration.version} - - - commons-logging - commons-logging - - - commons-logging - commons-logging-api - - - - - org.springframework.kafka - spring-kafka - ${spring-kafka.version} - - - org.springframework.kafka - spring-kafka-test - ${spring-kafka.version} - - - org.springframework.ldap - spring-ldap-core - ${spring-ldap.version} - - - org.springframework.ldap - spring-ldap-core-tiger - ${spring-ldap.version} - - - org.springframework.ldap - spring-ldap-ldif-batch - ${spring-ldap.version} - - - org.springframework.ldap - spring-ldap-ldif-core - ${spring-ldap.version} - - - org.springframework.ldap - spring-ldap-odm - ${spring-ldap.version} - - - org.springframework.ldap - spring-ldap-test - ${spring-ldap.version} - - - org.springframework.restdocs - spring-restdocs-asciidoctor - ${spring-restdocs.version} - - - org.springframework.restdocs - spring-restdocs-core - ${spring-restdocs.version} - - - org.springframework.restdocs - spring-restdocs-mockmvc - ${spring-restdocs.version} - - - org.springframework.restdocs - spring-restdocs-restassured - ${spring-restdocs.version} - - - org.springframework.restdocs - spring-restdocs-webtestclient - ${spring-restdocs.version} - - - org.springframework.retry - spring-retry - ${spring-retry.version} - - - org.springframework.security - spring-security-bom - ${spring-security.version} - import - pom - - - org.springframework.session - spring-session-bom - ${spring-session-bom.version} - import - pom - - - org.springframework.ws - spring-ws-core - ${spring-ws.version} - - - commons-logging - commons-logging - - - - - org.springframework.ws - spring-ws-security - ${spring-ws.version} - - - commons-logging - commons-logging - - - - - org.springframework.ws - spring-ws-support - ${spring-ws.version} - - - commons-logging - commons-logging - - - - - org.springframework.ws - spring-ws-test - ${spring-ws.version} - - - commons-logging - commons-logging - - - - - org.springframework.ws - spring-xml - ${spring-ws.version} - - - org.synchronoss.cloud - nio-multipart-parser - ${nio-multipart-parser.version} - - - org.thymeleaf - thymeleaf - ${thymeleaf.version} - - - org.thymeleaf - thymeleaf-spring5 - ${thymeleaf.version} - - - org.thymeleaf.extras - thymeleaf-extras-java8time - ${thymeleaf-extras-java8time.version} - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity5 - ${thymeleaf-extras-springsecurity.version} - - - org.webjars - hal-browser - ${webjars-hal-browser.version} - - - org.webjars - webjars-locator-core - ${webjars-locator-core.version} - - - org.xerial - sqlite-jdbc - ${sqlite-jdbc.version} - - - org.xmlunit - xmlunit-assertj - ${xmlunit2.version} - - - org.xmlunit - xmlunit-core - ${xmlunit2.version} - - - org.xmlunit - xmlunit-legacy - ${xmlunit2.version} - - - org.xmlunit - xmlunit-matchers - ${xmlunit2.version} - - - org.xmlunit - xmlunit-placeholders - ${xmlunit2.version} - - - org.yaml - snakeyaml - ${snakeyaml.version} - - - redis.clients - jedis - ${jedis.version} - - - wsdl4j - wsdl4j - ${wsdl4j.version} - - - - - - - - org.apache.johnzon - johnzon-maven-plugin - ${johnzon.version} - - - org.jetbrains.kotlin - kotlin-maven-plugin - ${kotlin.version} - - - org.jooq - jooq-codegen-maven - ${jooq.version} - - - org.springframework.boot - spring-boot-maven-plugin - ${revision} - - - org.apache.maven.plugins - maven-antrun-plugin - ${maven-antrun-plugin.version} - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven-assembly-plugin.version} - - false - - - - org.apache.maven.plugins - maven-clean-plugin - ${maven-clean-plugin.version} - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - - org.apache.maven.plugins - maven-deploy-plugin - ${maven-deploy-plugin.version} - - - org.apache.maven.plugins - maven-dependency-plugin - ${maven-dependency-plugin.version} - - - org.apache.maven.plugins - maven-enforcer-plugin - ${maven-enforcer-plugin.version} - - - org.apache.maven.plugins - maven-failsafe-plugin - ${maven-failsafe-plugin.version} - - - org.apache.maven.plugins - maven-install-plugin - ${maven-install-plugin.version} - - - org.apache.maven.plugins - maven-invoker-plugin - ${maven-invoker-plugin.version} - - - org.apache.maven.plugins - maven-help-plugin - ${maven-help-plugin.version} - - - org.apache.maven.plugins - maven-jar-plugin - ${maven-jar-plugin.version} - - - org.apache.maven.plugins - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - - org.apache.maven.plugins - maven-resources-plugin - ${maven-resources-plugin.version} - - - org.apache.maven.plugins - maven-shade-plugin - ${maven-shade-plugin.version} - - - org.apache.maven.plugins - maven-source-plugin - ${maven-source-plugin.version} - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - org.apache.maven.plugins - maven-toolchains-plugin - ${maven-toolchains-plugin.version} - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper-maven-plugin.version} - - - org.codehaus.mojo - exec-maven-plugin - ${exec-maven-plugin.version} - - - org.codehaus.mojo - versions-maven-plugin - ${versions-maven-plugin.version} - - - org.codehaus.mojo - xml-maven-plugin - ${xml-maven-plugin.version} - - - org.codehaus.mojo - flatten-maven-plugin - ${flatten-maven-plugin.version} - - - org.flywaydb - flyway-maven-plugin - ${flyway.version} - - - org.infinispan - infinispan-protocol-parser-generator-maven-plugin - ${infinispan.version} - - - pl.project13.maven - git-commit-id-plugin - ${git-commit-id-plugin.version} - - - - - - org.codehaus.mojo - flatten-maven-plugin - false - - - - flatten-effective-pom - process-resources - - flatten - - - false - ${project.build.directory}/effective-pom - spring-boot-dependencies.xml - oss - - expand - expand - remove - remove - - - - - - flatten - process-resources - - flatten - - - true - bom - - keep - keep - remove - - - - - flatten-clean - clean - - clean - - - - - - org.codehaus.mojo - xml-maven-plugin - false - - - - post-process-effective-pom - process-resources - - transform - - - - -

${project.build.directory}/effective-pom - ${project.build.directory}/effective-pom - src/main/xslt/post-process-flattened-pom.xsl - - - indent - yes - - - - - - - - - post-process-flattened-pom - process-resources - - transform - - - - - ${project.basedir} - ${project.basedir} - .flattened-pom.xml - src/main/xslt/post-process-flattened-pom.xsl - - - indent - yes - - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - false - - - - attach-artifacts - package - - attach-artifact - - - - - ${project.build.directory}/effective-pom/spring-boot-dependencies.xml - effective-pom - - - - - - - - -
diff --git a/spring-boot-project/spring-boot-devtools/build.gradle b/spring-boot-project/spring-boot-devtools/build.gradle new file mode 100644 index 00000000000..4120f22aea6 --- /dev/null +++ b/spring-boot-project/spring-boot-devtools/build.gradle @@ -0,0 +1,86 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.auto-configuration' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' + id 'org.springframework.boot.integration-test' + id 'org.springframework.boot.optional-dependencies' +} + +description = 'Spring Boot Developer Tools' + +configurations { + intTestDependencies +} + +dependencies { + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation project(':spring-boot-project:spring-boot') + implementation project(':spring-boot-project:spring-boot-autoconfigure') + + intTestDependencies project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + intTestImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + intTestImplementation project(':spring-boot-project:spring-boot-autoconfigure') + intTestImplementation project(':spring-boot-project:spring-boot-test') + intTestImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + intTestImplementation 'org.apache.httpcomponents:httpclient' + intTestImplementation 'org.assertj:assertj-core' + intTestImplementation 'org.awaitility:awaitility' + intTestImplementation 'org.junit.jupiter:junit-jupiter' + intTestImplementation 'net.bytebuddy:byte-buddy' + intTestRuntimeOnly 'org.springframework:spring-web' + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + optional 'javax.servlet:javax.servlet-api' + optional 'org.apache.derby:derby' + optional 'org.hibernate:hibernate-core' + optional 'org.springframework:spring-jdbc' + optional 'org.springframework:spring-orm' + optional 'org.springframework:spring-web' + optional 'org.springframework.security:spring-security-config' + optional 'org.springframework.security:spring-security-web' + optional 'org.springframework.data:spring-data-redis' + optional 'org.springframework.session:spring-session-core' + + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation project(':spring-boot-project:spring-boot-test') + testImplementation 'ch.qos.logback:logback-classic' + testImplementation 'com.h2database:h2' + testImplementation 'com.zaxxer:HikariCP' + testImplementation 'org.apache.derby:derbyclient' + testImplementation 'org.apache.tomcat.embed:tomcat-embed-websocket' + testImplementation 'org.apache.tomcat.embed:tomcat-embed-core' + testImplementation 'org.apache.tomcat.embed:tomcat-embed-jasper' + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.awaitility:awaitility' + testImplementation 'org.eclipse.jetty.websocket:websocket-client' + testImplementation 'org.hamcrest:hamcrest-library' + testImplementation 'org.hsqldb:hsqldb' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.mockito:mockito-core' + testImplementation 'org.postgresql:postgresql' + testImplementation 'org.springframework:spring-test' + testImplementation 'org.springframework:spring-webmvc' + testImplementation 'org.springframework:spring-websocket' + testImplementation 'org.springframework.hateoas:spring-hateoas' + testImplementation 'org.springframework.security:spring-security-test' + testImplementation 'org.thymeleaf:thymeleaf' + testImplementation 'org.thymeleaf:thymeleaf-spring5' + testImplementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' + + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testRuntimeOnly 'org.yaml:snakeyaml' +} + +task copyIntTestDependencies(type: Copy) { + destinationDir = file("$buildDir/dependencies") + from { + configurations.intTestDependencies + } + from jar +} + +intTest { + dependsOn copyIntTestDependencies +} diff --git a/spring-boot-project/spring-boot-devtools/pom.xml b/spring-boot-project/spring-boot-devtools/pom.xml deleted file mode 100644 index 9af7e352ad7..00000000000 --- a/spring-boot-project/spring-boot-devtools/pom.xml +++ /dev/null @@ -1,220 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-devtools - Spring Boot Developer Tools - Spring Boot Developer Tools - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot - - - org.springframework.boot - spring-boot-autoconfigure - - - - jakarta.persistence - jakarta.persistence-api - true - - - jakarta.servlet - jakarta.servlet-api - true - - - org.apache.derby - derby - true - - - org.springframework - spring-jdbc - true - - - org.springframework - spring-orm - true - - - org.hibernate - hibernate-core - true - - - javax.activation - javax.activation-api - - - javax.xml.bind - jaxb-api - - - javax.persistence - javax.persistence-api - - - - - org.springframework - spring-web - true - - - org.springframework.security - spring-security-config - true - - - org.springframework.security - spring-security-web - true - - - org.springframework.data - spring-data-redis - true - - - org.springframework.session - spring-session-core - true - - - - org.springframework.boot - spring-boot-autoconfigure-processor - true - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot-test-support - test - - - org.springframework.boot - spring-boot-test - test - - - ch.qos.logback - logback-classic - test - - - com.h2database - h2 - test - - - com.zaxxer - HikariCP - test - - - org.awaitility - awaitility - test - - - org.springframework - spring-webmvc - test - - - org.springframework - spring-websocket - test - - - org.springframework.hateoas - spring-hateoas - test - - - org.apache.derby - derbyclient - ${derby.version} - test - - - org.apache.tomcat.embed - tomcat-embed-websocket - test - - - org.apache.tomcat.embed - tomcat-embed-core - test - - - org.apache.tomcat.embed - tomcat-embed-jasper - test - - - org.eclipse.jetty.websocket - websocket-client - test - - - org.hsqldb - hsqldb - test - - - org.postgresql - postgresql - test - - - org.springframework.security - spring-security-test - test - - - org.thymeleaf - thymeleaf - test - - - org.thymeleaf - thymeleaf-spring5 - test - - - org.yaml - snakeyaml - test - - - nz.net.ultraq.thymeleaf - thymeleaf-layout-dialect - test - - - diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/com/example/ControllerOne.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/com/example/ControllerOne.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/com/example/ControllerOne.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/com/example/ControllerOne.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/com/example/DevToolsTestApplication.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/com/example/DevToolsTestApplication.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/com/example/DevToolsTestApplication.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/com/example/DevToolsTestApplication.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/AbstractApplicationLauncher.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/AbstractApplicationLauncher.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/AbstractApplicationLauncher.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/AbstractApplicationLauncher.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/AbstractDevToolsIntegrationTests.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/AbstractDevToolsIntegrationTests.java similarity index 98% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/AbstractDevToolsIntegrationTests.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/AbstractDevToolsIntegrationTests.java index 4c816949a4c..e8773240a6f 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/AbstractDevToolsIntegrationTests.java +++ b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/AbstractDevToolsIntegrationTests.java @@ -70,7 +70,6 @@ abstract class AbstractDevToolsIntegrationTests { ApplicationState::hasServerPort) .getServerPort(); this.serverPortFile.delete(); - System.out.println("Got port " + port); this.launchedApplication.restartRemote(port); Thread.sleep(1000); return port; diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/ApplicationLauncher.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/ApplicationLauncher.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/ApplicationLauncher.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/ApplicationLauncher.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/ApplicationState.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/ApplicationState.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/ApplicationState.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/ApplicationState.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/DevToolsIntegrationTests.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/DevToolsIntegrationTests.java similarity index 62% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/DevToolsIntegrationTests.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/DevToolsIntegrationTests.java index 3bad93d99dc..91d52907830 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/DevToolsIntegrationTests.java +++ b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/DevToolsIntegrationTests.java @@ -19,11 +19,15 @@ package org.springframework.boot.devtools.tests; import java.io.File; import java.io.IOException; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.client.StandardHttpRequestRetryHandler; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.http.HttpStatus; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import static org.assertj.core.api.Assertions.assertThat; @@ -34,31 +38,33 @@ import static org.assertj.core.api.Assertions.assertThat; */ class DevToolsIntegrationTests extends AbstractDevToolsIntegrationTests { + private final TestRestTemplate template = new TestRestTemplate( + new RestTemplateBuilder().requestFactory(() -> new HttpComponentsClientHttpRequestFactory( + HttpClients.custom().setRetryHandler(new StandardHttpRequestRetryHandler(10, false)).build()))); + @ParameterizedTest(name = "{0}") @MethodSource("parameters") void addARequestMappingToAnExistingController(ApplicationLauncher applicationLauncher) throws Exception { launchApplication(applicationLauncher); - TestRestTemplate template = new TestRestTemplate(); String urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForEntity(urlBase + "/two", String.class).getStatusCode()) + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForEntity(urlBase + "/two", String.class).getStatusCode()) .isEqualTo(HttpStatus.NOT_FOUND); controller("com.example.ControllerOne").withRequestMapping("one").withRequestMapping("two").build(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); } @ParameterizedTest(name = "{0}") @MethodSource("parameters") void removeARequestMappingFromAnExistingController(ApplicationLauncher applicationLauncher) throws Exception { launchApplication(applicationLauncher); - TestRestTemplate template = new TestRestTemplate(); String urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); controller("com.example.ControllerOne").build(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForEntity(urlBase + "/one", String.class).getStatusCode()) + assertThat(this.template.getForEntity(urlBase + "/one", String.class).getStatusCode()) .isEqualTo(HttpStatus.NOT_FOUND); } @@ -66,15 +72,14 @@ class DevToolsIntegrationTests extends AbstractDevToolsIntegrationTests { @MethodSource("parameters") void createAController(ApplicationLauncher applicationLauncher) throws Exception { launchApplication(applicationLauncher); - TestRestTemplate template = new TestRestTemplate(); String urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForEntity(urlBase + "/two", String.class).getStatusCode()) + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForEntity(urlBase + "/two", String.class).getStatusCode()) .isEqualTo(HttpStatus.NOT_FOUND); controller("com.example.ControllerTwo").withRequestMapping("two").build(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); } @@ -82,18 +87,17 @@ class DevToolsIntegrationTests extends AbstractDevToolsIntegrationTests { @MethodSource("parameters") void createAControllerAndThenAddARequestMapping(ApplicationLauncher applicationLauncher) throws Exception { launchApplication(applicationLauncher); - TestRestTemplate template = new TestRestTemplate(); String urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForEntity(urlBase + "/two", String.class).getStatusCode()) + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForEntity(urlBase + "/two", String.class).getStatusCode()) .isEqualTo(HttpStatus.NOT_FOUND); controller("com.example.ControllerTwo").withRequestMapping("two").build(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); controller("com.example.ControllerTwo").withRequestMapping("two").withRequestMapping("three").build(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/three", String.class)).isEqualTo("three"); + assertThat(this.template.getForObject(urlBase + "/three", String.class)).isEqualTo("three"); } @ParameterizedTest(name = "{0}") @@ -101,33 +105,31 @@ class DevToolsIntegrationTests extends AbstractDevToolsIntegrationTests { void createAControllerAndThenAddARequestMappingToAnExistingController(ApplicationLauncher applicationLauncher) throws Exception { launchApplication(applicationLauncher); - TestRestTemplate template = new TestRestTemplate(); String urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForEntity(urlBase + "/two", String.class).getStatusCode()) + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForEntity(urlBase + "/two", String.class).getStatusCode()) .isEqualTo(HttpStatus.NOT_FOUND); controller("com.example.ControllerTwo").withRequestMapping("two").build(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); controller("com.example.ControllerOne").withRequestMapping("one").withRequestMapping("three").build(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); - assertThat(template.getForObject(urlBase + "/three", String.class)).isEqualTo("three"); + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); + assertThat(this.template.getForObject(urlBase + "/three", String.class)).isEqualTo("three"); } @ParameterizedTest(name = "{0}") @MethodSource("parameters") void deleteAController(ApplicationLauncher applicationLauncher) throws Exception { launchApplication(applicationLauncher); - TestRestTemplate template = new TestRestTemplate(); String urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); assertThat(new File(this.launchedApplication.getClassesDirectory(), "com/example/ControllerOne.class").delete()) .isTrue(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForEntity(urlBase + "/one", String.class).getStatusCode()) + assertThat(this.template.getForEntity(urlBase + "/one", String.class).getStatusCode()) .isEqualTo(HttpStatus.NOT_FOUND); } @@ -136,19 +138,18 @@ class DevToolsIntegrationTests extends AbstractDevToolsIntegrationTests { @MethodSource("parameters") void createAControllerAndThenDeleteIt(ApplicationLauncher applicationLauncher) throws Exception { launchApplication(applicationLauncher); - TestRestTemplate template = new TestRestTemplate(); String urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForEntity(urlBase + "/two", String.class).getStatusCode()) + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForEntity(urlBase + "/two", String.class).getStatusCode()) .isEqualTo(HttpStatus.NOT_FOUND); controller("com.example.ControllerTwo").withRequestMapping("two").build(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); - assertThat(template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); + assertThat(this.template.getForObject(urlBase + "/one", String.class)).isEqualTo("one"); + assertThat(this.template.getForObject(urlBase + "/two", String.class)).isEqualTo("two"); assertThat(new File(this.launchedApplication.getClassesDirectory(), "com/example/ControllerTwo.class").delete()) .isTrue(); urlBase = "http://localhost:" + awaitServerPort(); - assertThat(template.getForEntity(urlBase + "/two", String.class).getStatusCode()) + assertThat(this.template.getForEntity(urlBase + "/two", String.class).getStatusCode()) .isEqualTo(HttpStatus.NOT_FOUND); } diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/DevToolsWithLazyInitializationIntegrationTests.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/DevToolsWithLazyInitializationIntegrationTests.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/DevToolsWithLazyInitializationIntegrationTests.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/DevToolsWithLazyInitializationIntegrationTests.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/Directories.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/Directories.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/Directories.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/Directories.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/ExplodedRemoteApplicationLauncher.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/ExplodedRemoteApplicationLauncher.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/ExplodedRemoteApplicationLauncher.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/ExplodedRemoteApplicationLauncher.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/FileContents.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/FileContents.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/FileContents.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/FileContents.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/JarFileRemoteApplicationLauncher.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/JarFileRemoteApplicationLauncher.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/JarFileRemoteApplicationLauncher.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/JarFileRemoteApplicationLauncher.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/JvmLauncher.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/JvmLauncher.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/JvmLauncher.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/JvmLauncher.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/LaunchedApplication.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/LaunchedApplication.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/LaunchedApplication.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/LaunchedApplication.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/LocalApplicationLauncher.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/LocalApplicationLauncher.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/LocalApplicationLauncher.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/LocalApplicationLauncher.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/RemoteApplicationLauncher.java b/spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/RemoteApplicationLauncher.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/src/test/java/org/springframework/boot/devtools/tests/RemoteApplicationLauncher.java rename to spring-boot-project/spring-boot-devtools/src/intTest/java/org/springframework/boot/devtools/tests/RemoteApplicationLauncher.java diff --git a/spring-boot-project/spring-boot-devtools/src/main/resources/META-INF/spring-devtools.properties b/spring-boot-project/spring-boot-devtools/src/main/resources/META-INF/spring-devtools.properties index 9810d8d63e5..88ee28a8f83 100644 --- a/spring-boot-project/spring-boot-devtools/src/main/resources/META-INF/spring-devtools.properties +++ b/spring-boot-project/spring-boot-devtools/src/main/resources/META-INF/spring-devtools.properties @@ -1,6 +1,6 @@ -restart.exclude.spring-boot=/spring-boot/target/classes/ -restart.exclude.spring-boot-devtools=/spring-boot-devtools/target/classes/ -restart.exclude.spring-boot-autoconfigure=/spring-boot-autoconfigure/target/classes/ -restart.exclude.spring-boot-actuator=/spring-boot-actuator/target/classes/ -restart.exclude.spring-boot-starter=/spring-boot-starter/target/classes/ +restart.exclude.spring-boot=/spring-boot/(bin|build|out)/ +restart.exclude.spring-boot-devtools=/spring-boot-devtools/(bin|build|out)/ +restart.exclude.spring-boot-autoconfigure=/spring-boot-autoconfigure/(bin|build|out)/ +restart.exclude.spring-boot-actuator=/spring-boot-actuator/(bin|build|out)/ +restart.exclude.spring-boot-starter=/spring-boot-starter/(bin|build|out)/ restart.exclude.spring-boot-starters=/spring-boot-starter-[\\w-]+/ diff --git a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/filewatch/FileSystemWatcherTests.java b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/filewatch/FileSystemWatcherTests.java index f698822000e..e82daac4777 100644 --- a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/filewatch/FileSystemWatcherTests.java +++ b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/filewatch/FileSystemWatcherTests.java @@ -100,11 +100,12 @@ class FileSystemWatcherTests { } @Test - void sourceFolderMustNotBeAFile() { - File folder = new File("pom.xml"); - assertThat(folder.isFile()).isTrue(); - assertThatIllegalArgumentException().isThrownBy(() -> this.watcher.addSourceFolder(new File("pom.xml"))) - .withMessageContaining("Folder 'pom.xml' must not be a file"); + void sourceFolderMustNotBeAFile() throws IOException { + File file = new File(this.tempDir, "file"); + assertThat(file.createNewFile()).isTrue(); + assertThat(file.isFile()).isTrue(); + assertThatIllegalArgumentException().isThrownBy(() -> this.watcher.addSourceFolder(file)) + .withMessageContaining("Folder '" + file + "' must not be a file"); } @Test diff --git a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/ChangeableUrlsTests.java b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/ChangeableUrlsTests.java index 85567ef2c5d..f51b34b4223 100644 --- a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/ChangeableUrlsTests.java +++ b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/ChangeableUrlsTests.java @@ -104,7 +104,7 @@ class ChangeableUrlsTests { private URL makeUrl(String name) throws IOException { File file = new File(this.tempDir, UUID.randomUUID().toString()); file = new File(file, name); - file = new File(file, "target"); + file = new File(file, "build"); file = new File(file, "classes"); file.mkdirs(); return file.toURI().toURL(); diff --git a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/DefaultRestartInitializerTests.java b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/DefaultRestartInitializerTests.java index 9602bfc0c4b..4b1edbbdac0 100644 --- a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/DefaultRestartInitializerTests.java +++ b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/restart/DefaultRestartInitializerTests.java @@ -16,6 +16,10 @@ package org.springframework.boot.devtools.restart; +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; + import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -82,8 +86,17 @@ class DefaultRestartInitializerTests { } @Test - void urlsCanBeRetrieved() { - assertThat(new DefaultRestartInitializer().getUrls(Thread.currentThread())).isNotEmpty(); + void urlsCanBeRetrieved() throws IOException { + Thread thread = Thread.currentThread(); + ClassLoader classLoader = thread.getContextClassLoader(); + try (URLClassLoader contextClassLoader = new URLClassLoader( + new URL[] { new URL("file:test-app/build/classes/main/") }, classLoader)) { + thread.setContextClassLoader(contextClassLoader); + assertThat(new DefaultRestartInitializer().getUrls(thread)).isNotEmpty(); + } + finally { + thread.setContextClassLoader(classLoader); + } } protected void testSkippedStacks(String s) { diff --git a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/settings/DevToolsSettingsTests.java b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/settings/DevToolsSettingsTests.java index 590536d4c82..5f0ca380945 100644 --- a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/settings/DevToolsSettingsTests.java +++ b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/settings/DevToolsSettingsTests.java @@ -62,7 +62,7 @@ class DevToolsSettingsTests { private URL makeUrl(File file, String name) throws IOException { file = new File(file, name); - file = new File(file, "target"); + file = new File(file, "build"); file = new File(file, "classes"); file.mkdirs(); return file.toURI().toURL(); diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle new file mode 100644 index 00000000000..69fb5da90c5 --- /dev/null +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -0,0 +1,241 @@ +plugins { + id 'java-base' + id 'org.asciidoctor.jvm.convert' + id 'org.asciidoctor.jvm.pdf' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' +} + +configurations { + actuatorApiDocumentation + autoConfiguration + configurationProperties + gradlePluginDocumentation + mavenPluginDocumentation + testSlices +} + +dependencies { + testSlices project(path: ':spring-boot-project:spring-boot-test-autoconfigure', configuration: 'testSliceMetadata') + autoConfiguration project(path: ':spring-boot-project:spring-boot-autoconfigure', configuration: 'autoConfigurationMetadata') + autoConfiguration project(path: ':spring-boot-project:spring-boot-actuator-autoconfigure', configuration: 'autoConfigurationMetadata') + autoConfiguration project(path: ':spring-boot-project:spring-boot-devtools', configuration: 'autoConfigurationMetadata') + configurationProperties project(path: ':spring-boot-project:spring-boot', configuration: 'configurationPropertiesMetadata') + configurationProperties project(path: ':spring-boot-project:spring-boot-actuator', configuration: 'configurationPropertiesMetadata') + configurationProperties project(path: ':spring-boot-project:spring-boot-actuator-autoconfigure', configuration: 'configurationPropertiesMetadata') + configurationProperties project(path: ':spring-boot-project:spring-boot-autoconfigure', configuration: 'configurationPropertiesMetadata') + configurationProperties project(path: ':spring-boot-project:spring-boot-devtools', configuration: 'configurationPropertiesMetadata') + gradlePluginDocumentation project(path: ':spring-boot-project:spring-boot-tools:spring-boot-gradle-plugin', configuration: 'documentation') + actuatorApiDocumentation project(path: ':spring-boot-project:spring-boot-actuator-autoconfigure', configuration: 'documentation') + mavenPluginDocumentation project(path: ':spring-boot-project:spring-boot-tools:spring-boot-maven-plugin', configuration: 'documentation') +} + +task dependencyVersions(type: org.springframework.boot.build.constraints.ExtractVersionConstraints) { + enforcedPlatform(':spring-boot-project:spring-boot-dependencies') +} + +task javadoc(type: Javadoc) { + dependsOn dependencyVersions + project.rootProject.gradle.projectsEvaluated { + Set publishedProjects = rootProject.subprojects.findAll { it != project} + .findAll { it.plugins.hasPlugin(JavaPlugin) && it.plugins.hasPlugin(MavenPublishPlugin) } + .findAll { it.name != 'spring-boot-maven-plugin' && it.name != 'spring-boot-gradle-plugin' } + dependsOn publishedProjects.javadoc + source publishedProjects.javadoc.source + classpath = project.files(publishedProjects.javadoc.classpath) + destinationDir = project.file "$buildDir/docs/javadoc" + options { + author = true + docTitle = "Spring Boot ${project.version} API" + encoding = 'UTF-8' + memberLevel = 'protected' + outputLevel = 'quiet' + source = '1.8' + splitIndex = true + stylesheetFile = file('src/main/javadoc/spring-javadoc.css') + use = true + windowTitle = "Spring Boot ${project.version} API" + } + doFirst { + def versionConstraints = dependencyVersions.versionConstraints + options.links = [ + 'https://docs.oracle.com/javase/8/docs/api/', + 'https://docs.oracle.com/javaee/7/api/', + "https://docs.spring.io/spring-framework/docs/${versionConstraints['org.springframework:spring-core']}/javadoc-api/", + "https://docs.spring.io/spring-security/site/docs/${versionConstraints['org.springframework.security:spring-security-core']}/api/", + 'https://tomcat.apache.org/tomcat-9.0-doc/api/', + "https://www.eclipse.org/jetty/javadoc/${versionConstraints['org.eclipse.jetty:jetty-server']}/", + "https://www.thymeleaf.org/apidocs/thymeleaf/${versionConstraints['org.thymeleaf:thymeleaf']}/" + ] as String[] + } + } +} + +task documentTestSlices(type: org.springframework.boot.build.test.autoconfigure.DocumentTestSlices) { + testSlices = configurations.testSlices + outputFile = file("$buildDir/docs/generated/test-slice-auto-configuration.adoc") +} + +task documentStarters(type: org.springframework.boot.build.starters.DocumentStarters) { + outputDir = file("$buildDir/docs/generated/starters/") +} + +task documentAutoConfigurationClasses(type: org.springframework.boot.build.autoconfigure.DocumentAutoConfigurationClasses) { + autoConfiguration = configurations.autoConfiguration + outputDir = file("$buildDir/docs/generated/auto-configuration-classes/") +} + +task documentDependencyVersions(type: org.springframework.boot.build.constraints.DocumentConstrainedVersions) { + dependsOn dependencyVersions + constrainedVersions.set(providers.provider { dependencyVersions.constrainedVersions }) + outputFile = file("$buildDir/docs/generated/dependency-versions.adoc") +} + +task documentConfigurationProperties(type: org.springframework.boot.build.context.properties.DocumentConfigurationProperties) { + configurationPropertyMetadata = configurations.configurationProperties + outputDir = file("$buildDir/docs/generated/config-docs/") +} + +tasks.withType(org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask) { + dependsOn dependencyVersions + baseDirFollowsSourceDir() + doFirst { + def versionConstraints = dependencyVersions.versionConstraints + attributes 'jetty-version': versionConstraints['org.eclipse.jetty:jetty-server'], + 'jooq-version': versionConstraints['org.jooq:jooq'], + 'spring-amqp-version': versionConstraints['org.springframework.amqp:spring-amqp'], + 'spring-batch-version': versionConstraints['org.springframework.batch:spring-batch-core'], + 'spring-boot-version': project.version, + 'spring-data-commons-version': versionConstraints['org.springframework.data:spring-data-commons'], + 'spring-data-couchbase-version': versionConstraints['org.springframework.data:spring-data-couchbase'], + 'spring-data-jdbc-version': versionConstraints['org.springframework.data:spring-data-jdbc'], + 'spring-data-jpa-version': versionConstraints['org.springframework.data:spring-data-jpa'], + 'spring-data-mongodb-version': versionConstraints['org.springframework.data:spring-data-mongodb'], + 'spring-data-neo4j-version': versionConstraints['org.springframework.data:spring-data-neo4j'], + 'spring-data-rest-version': versionConstraints['org.springframework.data:spring-data-rest-core'], + 'spring-data-solr-version': versionConstraints['org.springframework.data:spring-data-solr'], + 'spring-framework-version': versionConstraints['org.springframework:spring-core'], + 'spring-integration-version': versionConstraints['org.springframework.integration:spring-integration-core'], + 'spring-security-version': versionConstraints['org.springframework.security:spring-security-core'], + 'spring-webservices-version': versionConstraints['org.springframework.ws:spring-ws-core'] + } +} + +asciidoctor { + sources { + include '*.htmlsingleadoc' + } +} + +asciidoctorPdf { + sources { + include '*.pdfadoc' + } +} + +task asciidoctorMultipage(type: org.asciidoctor.gradle.jvm.AsciidoctorTask) { + sources { + include '*.htmladoc' + include '*.adoc' + } +} + +syncDocumentationSourceForAsciidoctor { + dependsOn documentTestSlices + dependsOn documentStarters + dependsOn documentAutoConfigurationClasses + dependsOn documentDependencyVersions + dependsOn documentConfigurationProperties + from("$buildDir/docs/generated") { + into 'asciidoc' + } + from ("src/main/java") { + into 'main/java' + } + from ("src/test/java") { + into 'test/java' + } +} + +syncDocumentationSourceForAsciidoctorMultipage { + dependsOn documentTestSlices + dependsOn documentStarters + dependsOn documentAutoConfigurationClasses + dependsOn documentDependencyVersions + dependsOn documentConfigurationProperties + from("$buildDir/docs/generated") { + into 'asciidoc' + } + from ("src/main/java") { + into 'main/java' + } + from ("src/test/java") { + into 'test/java' + } +} + +syncDocumentationSourceForAsciidoctorPdf { + dependsOn documentTestSlices + dependsOn documentStarters + dependsOn documentAutoConfigurationClasses + dependsOn documentDependencyVersions + dependsOn documentConfigurationProperties + from("$buildDir/docs/generated") { + into 'asciidoc' + } + from ("src/main/java") { + into 'main/java' + } + from ("src/test/java") { + into 'test/java' + } +} + +task zip(type: Zip) { + dependsOn asciidoctor, + asciidoctorMultipage, + asciidoctorPdf, + configurations.gradlePluginDocumentation, + configurations.actuatorApiDocumentation, + configurations.mavenPluginDocumentation + duplicatesStrategy 'fail' + from(asciidoctor.outputDir) { + into 'reference/htmlsingle' + } + from(asciidoctorPdf.outputDir) { + into 'reference/pdf' + } + from(asciidoctorMultipage.outputDir) { + into 'reference/html' + } + from(javadoc) { + into 'api' + } + into('gradle-plugin') { + from { + zipTree(configurations.gradlePluginDocumentation.singleFile) + } + } + into('actuator-api') { + from { + zipTree(configurations.actuatorApiDocumentation.singleFile) + } + } + into('maven-plugin') { + from { + zipTree(configurations.mavenPluginDocumentation.singleFile) + } + } +} + +artifacts { + archives zip +} + +publishing { + publications { + deployment(MavenPublication) { + artifact zip + } + } +} diff --git a/spring-boot-project/spring-boot-docs/pom.xml b/spring-boot-project/spring-boot-docs/pom.xml deleted file mode 100644 index 1ff020f1281..00000000000 --- a/spring-boot-project/spring-boot-docs/pom.xml +++ /dev/null @@ -1,1760 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-docs - Spring Boot Docs - Spring Boot Docs - - ${basedir}/../.. - ${project.build.directory}/refdocs/ - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot - - - org.springframework.boot - spring-boot-actuator - - - org.springframework.boot - spring-boot-actuator-autoconfigure - - - org.springframework.boot - spring-boot-autoconfigure - - - org.springframework.boot - spring-boot-cli - ${revision} - - - org.springframework.boot - spring-boot-starters - ${revision} - pom - - - org.springframework.boot - spring-boot-devtools - - - org.springframework.boot - spring-boot-loader - - - org.springframework.boot - spring-boot-loader-tools - - - org.springframework.boot - spring-boot-configuration-docs - ${revision} - - - org.springframework.boot - spring-boot-test - - - org.springframework.boot - spring-boot-test-autoconfigure - - - jakarta.persistence - jakarta.persistence-api - - - jakarta.ws.rs - jakarta.ws.rs-api - - - io.rest-assured - rest-assured - - - javax.xml.bind - jaxb-api - - - javax.activation - activation - - - org.hamcrest - hamcrest-core - - - org.hamcrest - hamcrest-library - - - - - org.springframework.restdocs - spring-restdocs-restassured - - - - ch.qos.logback - logback-classic - true - - - com.atomikos - transactions-jms - true - - - com.atomikos - transactions-jta - true - - - com.atomikos - transactions-jdbc - true - - - com.couchbase.client - java-client - true - - - com.couchbase.client - couchbase-spring-cache - true - - - com.fasterxml.jackson.core - jackson-databind - true - - - com.fasterxml.jackson.datatype - jackson-datatype-joda - true - - - com.fasterxml.jackson.dataformat - jackson-dataformat-cbor - true - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - true - - - com.fasterxml.jackson.module - jackson-module-parameter-names - true - - - com.github.ben-manes.caffeine - caffeine - true - - - com.google.code.gson - gson - true - - - com.hazelcast - hazelcast - true - - - com.hazelcast - hazelcast-client - true - - - com.hazelcast - hazelcast-spring - true - - - com.h2database - h2 - true - - - com.jayway.jsonpath - json-path - true - - - com.samskivert - jmustache - true - - - com.sendgrid - sendgrid-java - true - - - com.unboundid - unboundid-ldapsdk - true - - - com.zaxxer - HikariCP - true - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - true - - - io.dropwizard.metrics - metrics-core - true - - - io.lettuce - lettuce-core - true - - - io.micrometer - micrometer-core - true - - - io.micrometer - micrometer-jersey2 - true - - - io.micrometer - micrometer-registry-appoptics - true - - - io.micrometer - micrometer-registry-atlas - true - - - io.micrometer - micrometer-registry-datadog - true - - - io.micrometer - micrometer-registry-dynatrace - true - - - io.micrometer - micrometer-registry-elastic - true - - - io.micrometer - micrometer-registry-ganglia - true - - - io.micrometer - micrometer-registry-graphite - true - - - io.micrometer - micrometer-registry-humio - true - - - io.micrometer - micrometer-registry-influx - true - - - io.micrometer - micrometer-registry-jmx - true - - - io.micrometer - micrometer-registry-kairos - true - - - io.micrometer - micrometer-registry-new-relic - true - - - io.micrometer - micrometer-registry-prometheus - true - - - io.micrometer - micrometer-registry-signalfx - true - - - io.micrometer - micrometer-registry-stackdriver - true - - - io.micrometer - micrometer-registry-statsd - true - - - io.micrometer - micrometer-registry-wavefront - true - - - io.projectreactor - reactor-tools - true - - - io.projectreactor.netty - reactor-netty - true - - - io.rsocket - rsocket-core - true - - - io.rsocket - rsocket-transport-netty - true - - - io.prometheus - simpleclient_pushgateway - true - - - io.reactivex - rxjava-reactive-streams - true - - - io.undertow - undertow-servlet - true - - - jboss-servlet-api_3.1_spec - org.jboss.spec.javax.servlet - - - - - io.searchbox - jest - true - - - io.undertow - undertow-websockets-jsr - true - - - undertow-servlet - io.undertow - - - - - jakarta.jms - jakarta.jms-api - true - - - jakarta.json.bind - jakarta.json.bind-api - true - - - jakarta.mail - jakarta.mail-api - true - - - jakarta.servlet - jakarta.servlet-api - true - - - jakarta.validation - jakarta.validation-api - true - - - javax.cache - cache-api - true - - - junit - junit - true - - - org.hamcrest - hamcrest-core - - - - - org.junit.jupiter - junit-jupiter-api - true - - - net.sf.ehcache - ehcache - true - - - net.sourceforge.htmlunit - htmlunit - true - - - nz.net.ultraq.thymeleaf - thymeleaf-layout-dialect - true - - - org.apache.activemq - activemq-client - true - - - geronimo-jms_1.1_spec - org.apache.geronimo.specs - - - - - org.apache.activemq - artemis-jms-client - true - - - geronimo-jms_2.0_spec - org.apache.geronimo.specs - - - - - org.apache.activemq - activemq-jms-pool - true - - - geronimo-jms_1.1_spec - org.apache.geronimo.specs - - - - - org.apache.activemq - artemis-jms-server - true - - - geronimo-jms_2.0_spec - org.apache.geronimo.specs - - - - - org.apache.activemq - activemq-pool - true - - - org.apache.commons - commons-pool2 - true - - - org.apache.commons - commons-dbcp2 - true - - - org.apache.derby - derby - true - - - org.apache.kafka - kafka-streams - true - - - javax.ws.rs - javax.ws.rs-api - - - - - org.apache.logging.log4j - log4j-api - true - - - org.apache.logging.log4j - log4j-core - true - - - org.apache.httpcomponents - httpclient - true - - - org.apache.tomcat.embed - tomcat-embed-core - true - - - org.apache.tomcat.embed - tomcat-embed-jasper - true - - - org.apache.tomcat.embed - tomcat-embed-websocket - true - - - org.apache.tomcat - tomcat-jdbc - true - - - org.aspectj - aspectjweaver - true - - - org.assertj - assertj-core - true - - - org.codehaus.btm - btm - true - - - javax.transaction - jta - - - - - org.codehaus.groovy - groovy - true - - - org.codehaus.groovy - groovy-xml - true - - - org.codehaus.groovy - groovy-templates - true - - - org.eclipse.jetty - jetty-util - true - - - org.eclipse.jetty - jetty-servlets - true - - - org.eclipse.jetty - jetty-webapp - true - - - org.eclipse.jetty.websocket - javax-websocket-server-impl - true - - - javax.annotation - javax.annotation-api - - - javax.servlet - javax.servlet-api - - - javax.websocket - javax.websocket-api - - - javax.websocket - javax.websocket-client-api - - - - - org.eclipse.jetty - jetty-alpn-conscrypt-server - true - - - org.eclipse.jetty - jetty-reactive-httpclient - true - - - org.eclipse.jetty.http2 - http2-server - true - - - javax.servlet - javax.servlet-api - - - - - org.elasticsearch.client - elasticsearch-rest-high-level-client - true - - - org.flywaydb - flyway-core - true - - - org.freemarker - freemarker - true - - - org.glassfish.jersey.containers - jersey-container-servlet-core - true - - - javax.validation - validation-api - - - - - org.glassfish.jersey.ext - jersey-spring5 - true - - - org.glassfish.jersey.media - jersey-media-json-jackson - true - - - org.hamcrest - hamcrest - true - - - org.jboss - jboss-transaction-spi - true - - - org.jboss.logging - jboss-logging - true - - - org.jetbrains.kotlin - kotlin-reflect - true - - - org.jetbrains.kotlin - kotlin-stdlib - true - - - org.jooq - jooq - true - - - javax.activation - javax.activation-api - - - javax.xml.bind - jaxb-api - - - - - org.hibernate - hibernate-core - true - - - javax.activation - javax.activation-api - - - javax.persistence - javax.persistence-api - - - javax.xml.bind - jaxb-api - - - - - org.hibernate - hibernate-jcache - true - - - org.hibernate.validator - hibernate-validator - true - - - javax.validation - validation-api - - - - - org.infinispan - infinispan-jcache - true - - - org.infinispan - infinispan-spring5-embedded - true - - - org.influxdb - influxdb-java - true - - - org.jolokia - jolokia-core - true - - - org.liquibase - liquibase-core - true - - - org.messaginghub - pooled-jms - true - - - org.mockito - mockito-core - true - - - org.mongodb - mongodb-driver-async - true - - - org.mongodb - mongodb-driver-reactivestreams - true - - - org.quartz-scheduler - quartz - true - - - org.skyscreamer - jsonassert - true - - - org.slf4j - slf4j-api - true - - - org.slf4j - jul-to-slf4j - true - - - org.seleniumhq.selenium - selenium-api - true - - - org.seleniumhq.selenium - htmlunit-driver - true - - - org.springframework - spring-context-support - true - - - org.springframework - spring-jms - true - - - org.springframework - spring-messaging - true - - - org.springframework - spring-orm - true - - - org.springframework - spring-test - true - - - org.springframework - spring-web - true - - - org.springframework - spring-webflux - true - - - org.springframework - spring-webmvc - true - - - org.springframework - spring-websocket - true - - - org.springframework.amqp - spring-rabbit - true - - - org.springframework.batch - spring-batch-core - true - - - org.springframework.cloud - spring-cloud-connectors-core - true - - - org.springframework.cloud - spring-cloud-spring-service-connector - true - - - org.springframework.integration - spring-integration-core - true - - - org.springframework.integration - spring-integration-jdbc - true - - - org.springframework.integration - spring-integration-jmx - true - - - org.springframework.kafka - spring-kafka - true - - - org.springframework.security - spring-security-config - true - - - org.springframework.security - spring-security-oauth2-client - true - - - javax.activation - activation - - - com.sun.mail - javax.mail - - - - - org.springframework.security - spring-security-oauth2-jose - true - - - org.springframework.security - spring-security-oauth2-resource-server - true - - - org.springframework.security - spring-security-rsocket - - - org.springframework.security - spring-security-saml2-service-provider - true - - - org.springframework.security - spring-security-test - true - - - org.springframework.session - spring-session-core - true - - - org.springframework.session - spring-session-hazelcast - true - - - javax.annotation - javax.annotation-api - - - - - org.springframework.session - spring-session-jdbc - true - - - org.springframework.session - spring-session-data-mongodb - true - - - org.springframework.session - spring-session-data-redis - true - - - org.springframework.data - spring-data-cassandra - true - - - org.springframework.data - spring-data-commons - true - - - org.springframework.data - spring-data-couchbase - true - - - org.springframework.data - spring-data-elasticsearch - true - - - org.springframework.data - spring-data-jdbc - true - - - org.springframework.data - spring-data-jpa - true - - - org.springframework.data - spring-data-ldap - true - - - org.springframework.data - spring-data-mongodb - true - - - org.springframework.data - spring-data-neo4j - true - - - org.springframework.data - spring-data-redis - true - - - org.springframework.data - spring-data-rest-core - true - - - org.springframework.data - spring-data-rest-webmvc - true - - - org.springframework.data - spring-data-solr - true - - - org.springframework.hateoas - spring-hateoas - true - - - org.springframework.restdocs - spring-restdocs-mockmvc - true - - - javax.servlet - javax.servlet-api - - - - - org.springframework.restdocs - spring-restdocs-webtestclient - true - - - org.springframework.security - spring-security-data - true - - - javax.xml.bind - jaxb-api - - - - - org.springframework.security - spring-security-web - true - - - org.springframework.ws - spring-ws-core - true - - - org.thymeleaf - thymeleaf-spring5 - true - - - com.github.mxab.thymeleaf.extras - thymeleaf-extras-data-attribute - true - - - org.thymeleaf.extras - thymeleaf-extras-java8time - true - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity5 - true - - - org.yaml - snakeyaml - true - - - redis.clients - jedis - true - - - - org.springframework.boot - spring-boot-test-support - test - - - org.springframework.boot - spring-boot-starter-web - test - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - ** - - - - - - - - full - - - full - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - - attach-javadocs - - jar - - prepare-package - - true - - ${project.groupId}:* - - org/springframework/boot/docs/**/*.java - false - true - ${basedir}/src/main/javadoc/spring-javadoc.css - - https://docs.oracle.com/javase/8/docs/api/ - https://docs.oracle.com/javaee/7/api/ - https://docs.spring.io/spring-framework/docs/${spring-framework.version}/javadoc-api/ - https://docs.spring.io/spring-security/site/docs/${spring-security.version}/api/ - https://tomcat.apache.org/tomcat-9.0-doc/api/ - https://www.eclipse.org/jetty/javadoc/${jetty.version}/ - https://www.thymeleaf.org/apidocs/thymeleaf/${thymeleaf.version}/ - - - - - - - com.googlecode.maven-download-plugin - download-maven-plugin - - - unpack-doc-resources - generate-resources - - wget - - - ${spring-doc-resources.url} - true - ${refdocs.build.directory} - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-starters-pom - generate-resources - - copy - - - - - org.springframework.boot - spring-boot-starters - ${revision} - pom - true - ${project.build.directory}/external-resources - starters-effective-pom.xml - - - - - - unpack-maven-plugin - generate-resources - - unpack - - - - - org.springframework.boot - spring-boot-maven-plugin - ${revision} - docs - zip - - ${project.build.directory}/contents/maven-plugin - - META-INF/** - - - org.springframework.boot - spring-boot-gradle-plugin - ${revision} - docs - zip - ${project.build.directory}/contents/gradle-plugin - META-INF/** - - - org.springframework.boot - spring-boot-actuator-autoconfigure - ${revision} - docs - zip - ${project.build.directory}/contents/actuator-api - META-INF/** - - - - - - copy-dependencies-effective-pom - generate-resources - - copy - - - - - org.springframework.boot - spring-boot-dependencies - ${revision} - effective-pom - true - ${project.build.directory}/external-resources - effective-pom.xml - - - - - - unpack-spring-factories - generate-resources - - unpack - - - - - org.springframework.boot - spring-boot-autoconfigure - ${revision} - - ${project.build.directory}/auto-config/spring-boot-autoconfigure - - META-INF/spring.factories - - - org.springframework.boot - spring-boot-actuator-autoconfigure - ${revision} - - ${project.build.directory}/auto-config/spring-boot-actuator-autoconfigure - - META-INF/spring.factories - - - - - - unpack-starter-poms - generate-resources - - unpack - - - - - org.springframework.boot - spring-boot-starters - ${revision} - zip - starter-poms - ${project.build.directory}/external-resources/starter-poms - - - - - - unpack-test-slices - generate-resources - - unpack - - - - - org.springframework.boot - spring-boot-test-autoconfigure - ${revision} - - ${project.build.directory}/test-auto-config - - - - - - - - - org.apache.maven.plugins - maven-resources-plugin - - - copy-asciidoc-resources - generate-resources - - copy-resources - - - ${refdocs.build.directory} - - - src/main/asciidoc - false - - - - - - - - org.codehaus.mojo - xml-maven-plugin - 1.0.1 - - - transform-effective-pom - - transform - - - - - ${project.build.directory}/external-resources - - effective-pom.xml - - src/main/xslt/dependencyVersions.xsl - - - .adoc - - - ${project.build.directory}/generated-resources - - - - - - transform-flattened-pom - process-resources - - transform - - - - - ${project.basedir} - - .flattened-pom.xml - - src/main/xslt/versionProperties.xsl - - - .properties - - - ${project.build.directory}/generated-resources - - - - - - - - org.codehaus.gmavenplus - gmavenplus-plugin - - - - execute - - generate-resources - - - - - - - - - - - - - org.codehaus.groovy - groovy - ${groovy.version} - - - org.codehaus.groovy - groovy-ant - ${groovy.version} - - - org.springframework - spring-core - ${spring-framework.version} - - - - - org.codehaus.mojo - properties-maven-plugin - 1.0.0 - - - read-flattenedpom-versions - prepare-package - - read-project-properties - - false - - - ${project.build.directory}/generated-resources/.flattened-pom.properties - - - - - - - org.asciidoctor - asciidoctor-maven-plugin - - ${refdocs.build.directory} - - - ${refdocs.build.directory} - - **/*.*adoc - - - - - ${spring-boot-artifactory-repo} - ${github-tag} - ${project.basedir}/src - ${project.basedir}/src/main/asciidoc - ${project.basedir}/target/generated-resources - ${jetty.version} - ${jooq.version} - ${revision} - ${spring-amqp.version} - ${spring-batch.version} - ${flattenedpom.version.org.springframework.data.spring-data-couchbase} - ${flattenedpom.version.org.springframework.data.spring-data-commons} - ${flattenedpom.version.org.springframework.data.spring-data-jpa} - ${flattenedpom.version.org.springframework.data.spring-data-jdbc} - ${flattenedpom.version.org.springframework.data.spring-data-mongodb} - ${flattenedpom.version.org.springframework.data.spring-data-neo4j} - ${flattenedpom.version.org.springframework.data.spring-data-rest-core} - ${flattenedpom.version.org.springframework.data.spring-data-solr} - ${spring-framework.version} - ${spring-integration.version} - ${spring-security.version} - ${spring-ws.version} - - - - - io.spring.asciidoctor - spring-asciidoctor-extensions-spring-boot - ${spring-asciidoctor-extensions.version} - - - org.springframework.boot - spring-boot-actuator-autoconfigure - ${revision} - - - org.springframework.boot - spring-boot-autoconfigure - ${revision} - - - org.springframework.boot - spring-boot-devtools - ${revision} - - - - - generate-html-documentation - prepare-package - - process-asciidoc - - - html5 - - .adoc - .htmladoc - - ${project.build.directory}/generated-docs/reference/html - highlight.js - book - - js/highlight - github - true - ./images - font - css/ - spring.css - warn - - - false - - INFO - - - - - - generate-htmlsingle-documentation - prepare-package - - process-asciidoc - - - html5 - - .htmlsingleadoc - - ${project.build.directory}/generated-docs/reference/htmlsingle - highlight.js - book - - js/highlight - github - true - ./images - font - css/ - spring.css - - - false - - INFO - - - - - - generate-pdf-documentation - prepare-package - - process-asciidoc - - - pdf - - pdfadoc - - ${project.build.directory}/generated-docs/reference/pdf - - - ${refdocs.build.directory} - - **/* - - - - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - ant-contrib - ant-contrib - 1.0b3 - - - ant - ant - - - - - org.apache.ant - ant-nodeps - 1.8.1 - - - org.tigris.antelope - antelopetasks - 3.2.10 - - - - - package-and-attach-docs-zip - package - - run - - - - - - - - - - - - - setup-maven-properties - validate - - run - - - true - - - - - - - - - - - - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-zip - - attach-artifact - - - - - ${project.build.directory}/${project.artifactId}-${project.version}.zip - zip - - - - - - - - - - - diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-application-properties.adoc similarity index 51% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-application-properties.adoc index 1afb9c5e927..723b3f609e0 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-application-properties.adoc @@ -2,7 +2,7 @@ [appendix] [[common-application-properties]] = Common Application properties -include::{asciidoc-sources-root}/attributes.adoc[] +include::attributes.adoc[] Various properties can be specified inside your `application.properties` file, inside your `application.yml` file, or as command line switches. This appendix provides a list of common Spring Boot properties and references to the underlying classes that consume them. @@ -15,64 +15,64 @@ Also, you can define your own properties. == Core properties -include::{generated-resources-root}/config-docs/core.adoc[] +include::config-docs/core.adoc[] == Cache properties -include::{generated-resources-root}/config-docs/cache.adoc[] +include::config-docs/cache.adoc[] == Mail properties -include::{generated-resources-root}/config-docs/mail.adoc[] +include::config-docs/mail.adoc[] == JSON properties -include::{generated-resources-root}/config-docs/json.adoc[] +include::config-docs/json.adoc[] == Data properties -include::{generated-resources-root}/config-docs/data.adoc[] +include::config-docs/data.adoc[] == Transaction properties -include::{generated-resources-root}/config-docs/transaction.adoc[] +include::config-docs/transaction.adoc[] == Data migration properties -include::{generated-resources-root}/config-docs/data-migration.adoc[] +include::config-docs/data-migration.adoc[] == Integration properties -include::{generated-resources-root}/config-docs/integration.adoc[] +include::config-docs/integration.adoc[] == Web properties -include::{generated-resources-root}/config-docs/web.adoc[] +include::config-docs/web.adoc[] == Templating properties -include::{generated-resources-root}/config-docs/templating.adoc[] +include::config-docs/templating.adoc[] == Server properties -include::{generated-resources-root}/config-docs/server.adoc[] +include::config-docs/server.adoc[] == Security properties -include::{generated-resources-root}/config-docs/security.adoc[] +include::config-docs/security.adoc[] == RSocket properties -include::{generated-resources-root}/config-docs/rsocket.adoc[] +include::config-docs/rsocket.adoc[] == Actuator properties -include::{generated-resources-root}/config-docs/actuator.adoc[] +include::config-docs/actuator.adoc[] == Devtools properties -include::{generated-resources-root}/config-docs/devtools.adoc[] +include::config-docs/devtools.adoc[] == Testing properties -include::{generated-resources-root}/config-docs/testing.adoc[] +include::config-docs/testing.adoc[] diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-auto-configuration-classes.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-auto-configuration-classes.adoc similarity index 76% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-auto-configuration-classes.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-auto-configuration-classes.adoc index bfcbcf21012..a098131beab 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-auto-configuration-classes.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-auto-configuration-classes.adoc @@ -1,7 +1,7 @@ [appendix] [[auto-configuration-classes]] = Auto-configuration Classes -include::{asciidoc-sources-root}/attributes.adoc[] +include::attributes.adoc[] This appendix contains details of all of the auto-configuration classes provided by Spring Boot, with links to documentation and source code. Remember to also look at the conditions report in your application for more details of which features are switched on. @@ -13,7 +13,7 @@ Remember to also look at the conditions report in your application for more deta == `spring-boot-autoconfigure` The following auto-configuration classes are from the `spring-boot-autoconfigure` module: -include::{generated-resources-root}/auto-configuration-classes-spring-boot-autoconfigure.adoc[] +include::auto-configuration-classes/spring-boot-autoconfigure.adoc[] @@ -21,4 +21,4 @@ include::{generated-resources-root}/auto-configuration-classes-spring-boot-autoc == `spring-boot-actuator-autoconfigure` The following auto-configuration classes are from the `spring-boot-actuator-autoconfigure` module: -include::{generated-resources-root}/auto-configuration-classes-spring-boot-actuator-autoconfigure.adoc[] +include::auto-configuration-classes/spring-boot-actuator-autoconfigure.adoc[] diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-configuration-metadata.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-configuration-metadata.adoc similarity index 99% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-configuration-metadata.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-configuration-metadata.adoc index 83c266bb29d..899c323cc71 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-configuration-metadata.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-configuration-metadata.adoc @@ -1,7 +1,7 @@ [appendix] [[configuration-metadata]] = Configuration Metadata -include::{asciidoc-sources-root}/attributes.adoc[] +include::attributes.adoc[] Spring Boot jars include metadata files that provide details of all supported configuration properties. The files are designed to let IDE developers offer contextual help and "`code completion`" as users are working with `application.properties` or `application.yml` files. diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-dependency-versions.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-dependency-versions.adoc similarity index 83% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-dependency-versions.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-dependency-versions.adoc index 32653b9dfab..e5049c86dc1 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-dependency-versions.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-dependency-versions.adoc @@ -1,7 +1,7 @@ [appendix] [[dependency-versions]] = Dependency versions -include::{asciidoc-sources-root}/attributes.adoc[] +include::attributes.adoc[] This appendix provides details of the dependencies that are managed by Spring Boot. @@ -11,4 +11,4 @@ This appendix provides details of the dependencies that are managed by Spring Bo The following table provides details of all of the dependency versions that are provided by Spring Boot in its CLI (Command Line Interface), Maven dependency management, and Gradle plugin. When you declare a dependency on one of these artifacts without declaring a version, the version listed in the table is used. -include::{generated-resources-root}/effective-pom.adoc[] +include::dependency-versions.adoc[] diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-executable-jar-format.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-executable-jar-format.adoc similarity index 99% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-executable-jar-format.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-executable-jar-format.adoc index 048aaee57c6..dda383d71e7 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-executable-jar-format.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-executable-jar-format.adoc @@ -1,7 +1,7 @@ [appendix] [[executable-jar]] = The Executable Jar Format -include::{asciidoc-sources-root}/attributes.adoc[] +include::attributes.adoc[] The `spring-boot-loader` modules lets Spring Boot support executable jar and war files. If you use the Maven plugin or the Gradle plugin, executable jars are automatically generated, and you generally do not need to know the details of how they work. diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-test-auto-configuration.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-test-auto-configuration.adoc similarity index 77% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-test-auto-configuration.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-test-auto-configuration.adoc index a354ff5081f..dc33154eae1 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-test-auto-configuration.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/appendix-test-auto-configuration.adoc @@ -1,7 +1,7 @@ [appendix] [[test-auto-configuration]] = Test Auto-configuration Annotations -include::{asciidoc-sources-root}/attributes.adoc[] +include::attributes.adoc[] This appendix describes the `@…Test` auto-configuration annotations that Spring Boot provides to test slices of your application. @@ -10,4 +10,4 @@ This appendix describes the `@…Test` auto-configuration annotations that Sprin The following table lists the various `@…Test` annotations that can be used to test slices of your application and the auto-configuration that they import by default: -include::{generated-resources-root}/test-slice-auto-configuration.adoc[] +include::test-slice-auto-configuration.adoc[] diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/attributes.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/attributes.adoc similarity index 98% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/attributes.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/attributes.adoc index a7ba0149874..fb0f1f30ef9 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/attributes.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/attributes.adoc @@ -20,8 +20,8 @@ :github-issues: https://github.com/{github-repo}/issues/ :github-wiki: https://github.com/{github-repo}/wiki -:code-examples: {sources-root}/main/java/org/springframework/boot/docs -:test-examples: {sources-root}/test/java/org/springframework/boot/docs +:code-examples: ../main/java/org/springframework/boot/docs +:test-examples: ../test/java/org/springframework/boot/docs :spring-boot-code: https://github.com/{github-repo}/tree/{github-tag} :spring-boot-api: https://docs.spring.io/spring-boot/docs/{spring-boot-version}/api/ diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/build-tool-plugins.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/build-tool-plugins.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/build-tool-plugins.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/build-tool-plugins.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/deployment.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/deployment.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/deployment.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/deployment.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/documentation-overview.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/documentation-overview.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/documentation-overview.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/documentation-overview.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/getting-started.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/getting-started.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/getting-started.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/getting-started.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/howto.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/howto.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/howto.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/index-docinfo.xml b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/index-docinfo.xml similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/index-docinfo.xml rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/index-docinfo.xml diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/index.htmladoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/index.htmladoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/index.htmladoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/index.htmladoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/index.htmlsingleadoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/index.htmlsingleadoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/index.htmlsingleadoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/index.htmlsingleadoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/legal.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/legal.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/legal.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/legal.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/production-ready-features.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/production-ready-features.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-cli.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-cli.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-cli.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-cli.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-features.adoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-features.adoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-reference.pdfadoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-reference.pdfadoc similarity index 100% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-reference.pdfadoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-reference.pdfadoc diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/using-spring-boot.adoc similarity index 99% rename from spring-boot-project/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc rename to spring-boot-project/spring-boot-docs/src/docs/asciidoc/using-spring-boot.adoc index b9977e9a317..04a6b817a9c 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/using-spring-boot.adoc @@ -258,17 +258,17 @@ For example, a third-party starter project called `thirdpartyproject` would typi The following application starters are provided by Spring Boot under the `org.springframework.boot` group: .Spring Boot application starters -include::{generated-resources-root}/application-starters.adoc[] +include::starters/application-starters.adoc[] In addition to the application starters, the following starters can be used to add _<>_ features: .Spring Boot production starters -include::{generated-resources-root}/production-starters.adoc[] +include::starters/production-starters.adoc[] Finally, Spring Boot also includes the following starters that can be used if you want to exclude or swap specific technical facets: .Spring Boot technical starters -include::{generated-resources-root}/technical-starters.adoc[] +include::starters/technical-starters.adoc[] TIP: For a list of additional community contributed starters, see the {spring-boot-master-code}/spring-boot-project/spring-boot-starters/README.adoc[README file] in the `spring-boot-starters` module on GitHub. diff --git a/spring-boot-project/spring-boot-parent/build.gradle b/spring-boot-project/spring-boot-parent/build.gradle new file mode 100644 index 00000000000..a01df3f0252 --- /dev/null +++ b/spring-boot-project/spring-boot-parent/build.gradle @@ -0,0 +1,41 @@ +plugins { + id 'java-platform' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' +} + +description = 'Spring Boot Parent' + +javaPlatform { + allowDependencies() +} + +dependencies { + api enforcedPlatform(project(":spring-boot-project:spring-boot-dependencies")) + api enforcedPlatform('org.testcontainers:testcontainers-bom:1.12.4') + constraints { + api 'com.vaadin.external.google:android-json:0.0.20131108.vaadin1' + api 'commons-fileupload:commons-fileupload:1.4' + api 'io.mockk:mockk:1.9.3' + api 'jline:jline:2.11' + api 'net.sf.jopt-simple:jopt-simple:5.0.4' + api 'org.apache.maven:maven-plugin-api:3.6.3' + api 'org.apache.maven:maven-resolver-provider:3.6.3' + api 'org.apache.maven:maven-settings-builder:3.6.3' + api 'org.apache.maven.resolver:maven-resolver-connector-basic:1.4.1' + api 'org.apache.maven.resolver:maven-resolver-impl:1.4.1' + api 'org.apache.maven.resolver:maven-resolver-transport-file:1.4.1' + api 'org.apache.maven.resolver:maven-resolver-transport-http:1.4.1' + api 'org.apache.maven.plugin-tools:maven-plugin-annotations:3.6.0' + api 'org.apache.maven.plugins:maven-shade-plugin:3.2.1' + api 'org.apache.maven.shared:maven-common-artifact-filters:3.1.0' + api 'org.apache.maven.shared:maven-invoker:3.0.1' + api 'org.sonatype.plexus:plexus-build-api:0.0.7' + api 'org.sonatype.plexus:plexus-sec-dispatcher:1.4' + api 'org.sonatype.sisu:sisu-inject-plexus:2.6.0' + api 'org.spockframework:spock-core:1.3-groovy-2.5' + api 'org.spockframework:spock-spring:1.3-groovy-2.5' + api 'org.testng:testng:6.14.3' + + } +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-parent/pom.xml b/spring-boot-project/spring-boot-parent/pom.xml deleted file mode 100644 index b9076dc95a1..00000000000 --- a/spring-boot-project/spring-boot-parent/pom.xml +++ /dev/null @@ -1,559 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-dependencies - ${revision} - ../spring-boot-dependencies - - spring-boot-parent - pom - Spring Boot Parent - Spring Boot Parent - - Pivotal Software, Inc. - https://spring.io - - - ${basedir}/../.. - false - https://github.com/spring-projects/spring-boot - scm:git:git://github.com/spring-projects/spring-boot.git - scm:git:ssh://git@github.com/spring-projects/spring-boot.git - 1.8 - UTF-8 - UTF-8 - 3.5.4 - 1.1.1 - 1.3-groovy-2.5 - 0.3.0.RELEASE - 0.1.4.BUILD-20191119.185717-2 - https://repo.spring.io/snapshot/io/spring/docresources/spring-doc-resources/0.1.4.BUILD-SNAPSHOT/spring-doc-resources-${spring-doc-resources.version}.zip - 1.12.4 - 6.14.3 - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - Github - https://github.com/spring-projects/spring-boot/issues - - - - - - org.springframework.boot - spring-boot-test-support - ${revision} - - - - - log4j - log4j - 1.2.17 - - - commons-fileupload - commons-fileupload - 1.4 - - - io.mockk - mockk - 1.9.3 - - - org.sonatype.plexus - plexus-sec-dispatcher - 1.4 - - - org.sonatype.sisu - sisu-inject-plexus - 2.6.0 - - - com.vaadin.external.google - android-json - 0.0.20131108.vaadin1 - - - jline - jline - 2.11 - - - net.sf.jopt-simple - jopt-simple - 5.0.4 - - - org.apache.commons - commons-compress - 1.19 - - - org.apache.ivy - ivy - 2.4.0 - - - org.apache.maven - maven-archiver - 3.4.0 - - - org.apache.maven - maven-artifact - ${maven.version} - - - org.apache.maven - maven-core - ${maven.version} - - - org.apache.maven - maven-model - ${maven.version} - - - org.apache.maven - maven-plugin-api - ${maven.version} - - - org.apache.maven - maven-settings - ${maven.version} - - - org.apache.maven - maven-settings-builder - ${maven.version} - - - org.apache.maven - maven-model-builder - ${maven.version} - - - org.apache.maven - maven-resolver-provider - ${maven.version} - - - org.apache.maven.resolver - maven-resolver-connector-basic - ${maven-resolver.version} - - - org.apache.maven.resolver - maven-resolver-transport-file - ${maven-resolver.version} - - - org.apache.maven.resolver - maven-resolver-transport-http - ${maven-resolver.version} - - - org.apache.maven.resolver - maven-resolver-impl - ${maven-resolver.version} - - - org.apache.maven.shared - maven-common-artifact-filters - 3.1.0 - - - org.apache.maven.plugins - maven-shade-plugin - ${maven-shade-plugin.version} - - - org.apache.maven.plugin-tools - maven-plugin-annotations - 3.6.0 - - - org.codehaus.plexus - plexus-archiver - 3.7.0 - - - org.codehaus.plexus - plexus-utils - 3.1.0 - - - org.sonatype.plexus - plexus-build-api - 0.0.7 - - - org.spockframework - spock-core - ${spock.version} - - - org.spockframework - spock-spring - ${spock.version} - - - org.testcontainers - testcontainers-bom - ${testcontainers.version} - import - pom - - - org.testng - testng - ${testng.version} - - - org.zeroturnaround - zt-zip - 1.13 - - - - - - - org.junit.jupiter - junit-jupiter - test - - - org.junit.vintage - junit-vintage-engine - test - - - org.hamcrest - hamcrest-core - - - - - org.mockito - mockito-junit-jupiter - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - org.hamcrest - hamcrest - test - - - org.springframework - spring-test - test - - - - - - - com.googlecode.maven-download-plugin - download-maven-plugin - 1.4.2 - - - org.jetbrains.kotlin - kotlin-maven-plugin - ${kotlin.version} - - ${java.version} - true - - - - org.asciidoctor - asciidoctor-maven-plugin - 1.6.0 - - - org.asciidoctor - asciidoctorj-pdf - 1.5.0-alpha.18 - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - - integration-test - verify - - - - - - org.apache.maven.plugins - maven-plugin-plugin - 3.6.0 - - - org.basepom.maven - duplicate-finder-maven-plugin - 1.3.0 - - - org.codehaus.cargo - cargo-maven2-plugin - 1.7.7 - - - org.codehaus.gmavenplus - gmavenplus-plugin - 1.8.0 - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - regex-property - - regex-property - - - modulename - ${project.artifactId} - - - . - true - - - - - - org.codehaus.mojo - flatten-maven-plugin - true - - - - flatten - process-resources - - flatten - - - true - oss - - expand - remove - remove - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - ${java.version} - ${java.version} - true - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - enforce-rules - - enforce - - - - - - com.zaxxer:HikariCP-* - org.hamcrest:hamcrest-* - javax.*:*:* - - - javax.batch:*:* - javax.cache:*:* - javax.inject:*:* - javax.money:*:* - - true - - - [1.8,) - - - [3.5.0,) - - - main.basedir - - - project.name - - - project.description - - - true - - - true - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - false - - false - false - - - ${project.name} - ${modulename} - ${project.version} - Spring - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*Tests.java - - - **/Abstract*.java - - - file:/dev/./urandom - true - - -Xmx1024m - false - true - alphabetical - - - - org.apache.maven.plugins - maven-war-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar-no-fork - - - - - - - - - fast - - - fast - - - - true - - - - full - - - full - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - ${java.version} - - - - attach-javadocs - - jar - - true - - - - - org.apache.commons - commons-lang3 - 3.7 - - - - - - - - eclipse.profile - - - m2e.version - - - - false - false - false - false - - - - diff --git a/spring-boot-project/spring-boot-properties-migrator/build.gradle b/spring-boot-project/spring-boot-properties-migrator/build.gradle new file mode 100644 index 00000000000..5ef68ecb103 --- /dev/null +++ b/spring-boot-project/spring-boot-properties-migrator/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'java-library' + id 'maven-publish' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Properties Migrator' + +dependencies { + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation project(':spring-boot-project:spring-boot') + implementation project(':spring-boot-project:spring-boot-tools:spring-boot-configuration-metadata') + + testImplementation project(':spring-boot-project:spring-boot-test') + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.springframework:spring-test' +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-properties-migrator/pom.xml b/spring-boot-project/spring-boot-properties-migrator/pom.xml deleted file mode 100644 index da34e62b70e..00000000000 --- a/spring-boot-project/spring-boot-properties-migrator/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-properties-migrator - Spring Boot Properties Migrator - Spring Boot Properties Migrator - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot - - - org.springframework.boot - spring-boot-configuration-metadata - - - - org.springframework.boot - spring-boot-test - test - - - diff --git a/spring-boot-project/spring-boot-starters/pom.xml b/spring-boot-project/spring-boot-starters/pom.xml deleted file mode 100644 index 6bffde0ba0f..00000000000 --- a/spring-boot-project/spring-boot-starters/pom.xml +++ /dev/null @@ -1,174 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-starters - pom - Spring Boot Starters - Spring Boot Starters - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - spring-boot-starter - spring-boot-starter-activemq - spring-boot-starter-amqp - spring-boot-starter-aop - spring-boot-starter-artemis - spring-boot-starter-batch - spring-boot-starter-cache - spring-boot-starter-cloud-connectors - spring-boot-starter-data-cassandra - spring-boot-starter-data-cassandra-reactive - spring-boot-starter-data-couchbase - spring-boot-starter-data-couchbase-reactive - spring-boot-starter-data-elasticsearch - spring-boot-starter-data-jdbc - spring-boot-starter-data-jpa - spring-boot-starter-data-ldap - spring-boot-starter-data-mongodb - spring-boot-starter-data-mongodb-reactive - spring-boot-starter-data-neo4j - spring-boot-starter-data-redis - spring-boot-starter-data-redis-reactive - spring-boot-starter-data-rest - spring-boot-starter-data-solr - spring-boot-starter-freemarker - spring-boot-starter-groovy-templates - spring-boot-starter-hateoas - spring-boot-starter-integration - spring-boot-starter-jdbc - spring-boot-starter-jersey - spring-boot-starter-jetty - spring-boot-starter-jooq - spring-boot-starter-json - spring-boot-starter-jta-atomikos - spring-boot-starter-jta-bitronix - spring-boot-starter-logging - spring-boot-starter-log4j2 - spring-boot-starter-mail - spring-boot-starter-mustache - spring-boot-starter-actuator - spring-boot-starter-oauth2-client - spring-boot-starter-oauth2-resource-server - spring-boot-starter-parent - spring-boot-starter-quartz - spring-boot-starter-reactor-netty - spring-boot-starter-rsocket - spring-boot-starter-security - spring-boot-starter-test - spring-boot-starter-thymeleaf - spring-boot-starter-tomcat - spring-boot-starter-undertow - spring-boot-starter-validation - spring-boot-starter-web - spring-boot-starter-webflux - spring-boot-starter-websocket - spring-boot-starter-web-services - - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - enforce-rules - - enforce - - - - - - commons-logging:*:* - org.hibernate:hibernate-validator:* - - true - - - - true - - - - - - maven-assembly-plugin - false - - - assemble-starter-poms - generate-resources - - single - - - - src/main/assembly/starter-poms-assembly.xml - - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - checkstyle-validation - validate - - check - - - true - - - - - - org.apache.maven.plugins - maven-source-plugin - - true - - - - org.basepom.maven - duplicate-finder-maven-plugin - - - duplicate-dependencies - validate - - check - - - true - - .*module-info - - - changelog.txt - about.html - - - - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-activemq/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-activemq/build.gradle new file mode 100644 index 00000000000..aac1103f14a --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-activemq/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for JMS messaging using Apache ActiveMQ" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-jms' + api ('org.apache.activemq:activemq-broker') { + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jms_1.1_spec' + } + api 'jakarta.jms:jakarta.jms-api' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-activemq/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-activemq/pom.xml deleted file mode 100644 index 11bfe14e5be..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-activemq/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-activemq - Spring Boot ActiveMQ Starter - Starter for JMS messaging using Apache ActiveMQ - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-jms - - - org.apache.activemq - activemq-broker - - - geronimo-jms_1.1_spec - org.apache.geronimo.specs - - - - - jakarta.jms - jakarta.jms-api - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-actuator/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-actuator/build.gradle new file mode 100644 index 00000000000..96a273b712e --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-actuator/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Boot's Actuator which provides production ready features to help you monitor and manage your application" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api project(':spring-boot-project:spring-boot-actuator-autoconfigure') + api 'io.micrometer:micrometer-core' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-actuator/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-actuator/pom.xml deleted file mode 100644 index c381b6c5df3..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-actuator/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-actuator - Spring Boot Actuator Starter - Starter for using Spring Boot's Actuator which provides production - ready features to help you monitor and manage your application - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-actuator-autoconfigure - - - io.micrometer - micrometer-core - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-amqp/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-amqp/build.gradle new file mode 100644 index 00000000000..83197a3b188 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-amqp/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring AMQP and Rabbit MQ" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-messaging' + api 'org.springframework.amqp:spring-rabbit' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-amqp/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-amqp/pom.xml deleted file mode 100644 index d3d470ad709..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-amqp/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-amqp - Spring Boot AMQP Starter - Starter for using Spring AMQP and Rabbit MQ - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-messaging - - - org.springframework.amqp - spring-rabbit - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-aop/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-aop/build.gradle new file mode 100644 index 00000000000..c5959cadb6c --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-aop/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for aspect-oriented programming with Spring AOP and AspectJ" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-aop' + api 'org.aspectj:aspectjweaver' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-aop/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-aop/pom.xml deleted file mode 100644 index bb697fb54fb..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-aop/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-aop - Spring Boot AOP Starter - Starter for aspect-oriented programming with Spring AOP and AspectJ - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-aop - - - org.aspectj - aspectjweaver - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-artemis/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-artemis/build.gradle new file mode 100644 index 00000000000..033a409c930 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-artemis/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for JMS messaging using Apache Artemis" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'jakarta.jms:jakarta.jms-api' + api 'jakarta.json:jakarta.json-api' + api 'org.springframework:spring-jms' + api ('org.apache.activemq:artemis-jms-client') { + exclude group: 'commons-logging', module: 'commons-logging' + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jms_2.0_spec' + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-json_1.0_spec' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-artemis/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-artemis/pom.xml deleted file mode 100644 index e9d8dffdddd..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-artemis/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-artemis - Spring Boot Artemis Starter - Starter for JMS messaging using Apache Artemis - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-jms - - - org.apache.activemq - artemis-jms-client - - - geronimo-jms_2.0_spec - org.apache.geronimo.specs - - - - - jakarta.jms - jakarta.jms-api - - - jakarta.json - jakarta.json-api - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-batch/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-batch/build.gradle new file mode 100644 index 00000000000..36eeadbba9c --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-batch/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Batch" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc') + api 'org.springframework.batch:spring-batch-core' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-batch/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-batch/pom.xml deleted file mode 100644 index 24d24994959..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-batch/pom.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-batch - Spring Boot Batch Starter - Starter for using Spring Batch - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.batch - spring-batch-core - - - - - - org.basepom.maven - duplicate-finder-maven-plugin - - - duplicate-dependencies - validate - - check - - - - - - - xpp3 - xpp3_min - - - xmlpull - xmlpull - - - - - - - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-cache/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-cache/build.gradle new file mode 100644 index 00000000000..14614a195d2 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-cache/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Framework's caching support" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-context-support' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-cache/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-cache/pom.xml deleted file mode 100644 index 45c6796929d..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-cache/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-cache - Spring Boot Cache Starter - Starter for using Spring Framework's caching support - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-context-support - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-cloud-connectors/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-cloud-connectors/build.gradle new file mode 100644 index 00000000000..50400b15660 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-cloud-connectors/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Cloud Connectors which simplifies connecting to services in cloud platforms like Cloud Foundry and Heroku" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework.cloud:spring-cloud-spring-service-connector' + api 'org.springframework.cloud:spring-cloud-cloudfoundry-connector' + api 'org.springframework.cloud:spring-cloud-heroku-connector' + api 'org.springframework.cloud:spring-cloud-localconfig-connector' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-cloud-connectors/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-cloud-connectors/pom.xml deleted file mode 100644 index 012ad175670..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-cloud-connectors/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-cloud-connectors - Spring Boot Spring Cloud Connectors Starter - Starter for using Spring Cloud Connectors which simplifies connecting - to services in cloud platforms like Cloud Foundry and Heroku. Deprecated in - favor of Java CFEnv - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.cloud - spring-cloud-spring-service-connector - - - org.springframework.cloud - spring-cloud-cloudfoundry-connector - - - org.springframework.cloud - spring-cloud-heroku-connector - - - org.springframework.cloud - spring-cloud-localconfig-connector - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra-reactive/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra-reactive/build.gradle new file mode 100644 index 00000000000..0f870c33e62 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra-reactive/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Cassandra distributed database and Spring Data Cassandra Reactive" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-tx' + api 'org.springframework.data:spring-data-cassandra' + api 'io.projectreactor:reactor-core' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra-reactive/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra-reactive/pom.xml deleted file mode 100644 index 8202656b75e..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra-reactive/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-cassandra-reactive - Spring Boot Data Cassandra Reactive Starter - Starter for using Cassandra distributed database and Spring Data - Cassandra Reactive - - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-tx - - - org.springframework.data - spring-data-cassandra - - - org.slf4j - jcl-over-slf4j - - - - - io.projectreactor - reactor-core - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra/build.gradle new file mode 100644 index 00000000000..06219aed300 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Cassandra distributed database and Spring Data Cassandra" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-tx' + api 'org.springframework.data:spring-data-cassandra' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra/pom.xml deleted file mode 100644 index 12524d9c2d1..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-cassandra/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-cassandra - Spring Boot Data Cassandra Starter - Starter for using Cassandra distributed database and Spring Data - Cassandra - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-tx - - - org.springframework.data - spring-data-cassandra - - - org.slf4j - jcl-over-slf4j - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase-reactive/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase-reactive/build.gradle new file mode 100644 index 00000000000..b2969f80c3b --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase-reactive/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Couchbase document-oriented database and Spring Data Couchbase Reactive" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'io.projectreactor:reactor-core' + api 'io.reactivex:rxjava-reactive-streams' + api ('org.springframework.data:spring-data-couchbase') { + exclude group: 'com.couchbase.client', module: 'encryption' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase-reactive/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase-reactive/pom.xml deleted file mode 100644 index 6e159e0447a..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase-reactive/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-couchbase-reactive - Spring Boot Data Couchbase Reactive Starter - Starter for using Couchbase document-oriented database and Spring Data - Couchbase Reactive - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.data - spring-data-couchbase - - - org.slf4j - jcl-over-slf4j - - - com.couchbase.mock - CouchbaseMock - - - com.couchbase.client - encryption - - - - - io.projectreactor - reactor-core - - - io.reactivex - rxjava-reactive-streams - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase/build.gradle new file mode 100644 index 00000000000..b551d588803 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Couchbase document-oriented database and Spring Data Couchbase" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api ('org.springframework.data:spring-data-couchbase') { + exclude group: 'com.couchbase.client', module: 'encryption' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase/pom.xml deleted file mode 100644 index 62f40f704ac..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-couchbase/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - spring-boot-starters - org.springframework.boot - ${revision} - - spring-boot-starter-data-couchbase - Spring Boot Data Couchbase Starter - Starter for using Couchbase document-oriented database and Spring Data - Couchbase - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.data - spring-data-couchbase - - - org.slf4j - jcl-over-slf4j - - - com.couchbase.mock - CouchbaseMock - - - com.couchbase.client - encryption - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-elasticsearch/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-elasticsearch/build.gradle new file mode 100644 index 00000000000..bc78b8ba508 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-elasticsearch/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework.data:spring-data-elasticsearch' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-elasticsearch/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-elasticsearch/pom.xml deleted file mode 100644 index 18e4b779b79..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-elasticsearch/pom.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-elasticsearch - Spring Boot Data Elasticsearch Starter - Starter for using Elasticsearch search and analytics engine and Spring - Data Elasticsearch - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.data - spring-data-elasticsearch - - - org.slf4j - jcl-over-slf4j - - - org.apache.logging.log4j - log4j-core - - - - - - - - org.basepom.maven - duplicate-finder-maven-plugin - - - duplicate-dependencies - validate - - check - - - - org.joda.time.base.BaseDateTime - .*module-info - - - changelog.txt - - - - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jdbc/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jdbc/build.gradle new file mode 100644 index 00000000000..010e9a905ef --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jdbc/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Data JDBC" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc') + api 'org.springframework.data:spring-data-jdbc' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jdbc/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jdbc/pom.xml deleted file mode 100644 index 0e6e909c8c1..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jdbc/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-jdbc - Spring Boot Data JDBC Starter - Starter for using Spring Data JDBC - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.data - spring-data-jdbc - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/build.gradle new file mode 100644 index 00000000000..0b74593c60e --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Data JPA with Hibernate" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-aop') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc') + api 'jakarta.transaction:jakarta.transaction-api' + api 'jakarta.persistence:jakarta.persistence-api' + api ('org.hibernate:hibernate-core') { + exclude group: 'javax.activation', module: 'javax.activation-api' + exclude group: 'javax.persistence', module: 'javax.persistence-api' + exclude group: 'javax.xml.bind', module: 'jaxb-api' + exclude group: 'org.jboss.spec.javax.transaction', module: 'jboss-transaction-api_1.2_spec' + } + api ('org.springframework.data:spring-data-jpa') { + exclude group: 'org.aspectj', module: 'aspectjrt' + } + api 'org.springframework:spring-aspects' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/pom.xml deleted file mode 100644 index 1a4c0ba8fcb..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/pom.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-jpa - Spring Boot Data JPA Starter - Starter for using Spring Data JPA with Hibernate - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-aop - - - org.springframework.boot - spring-boot-starter-jdbc - - - jakarta.activation - jakarta.activation-api - - - jakarta.persistence - jakarta.persistence-api - - - jakarta.transaction - jakarta.transaction-api - - - org.hibernate - hibernate-core - - - org.jboss.spec.javax.transaction - jboss-transaction-api_1.2_spec - - - javax.activation - javax.activation-api - - - javax.persistence - javax.persistence-api - - - javax.xml.bind - jaxb-api - - - - - org.springframework.data - spring-data-jpa - - - org.aspectj - aspectjrt - - - org.slf4j - jcl-over-slf4j - - - - - org.springframework - spring-aspects - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-ldap/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-ldap/build.gradle new file mode 100644 index 00000000000..397e51d579c --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-ldap/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Data LDAP" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework.data:spring-data-ldap' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-ldap/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-ldap/pom.xml deleted file mode 100644 index fbdda52b11a..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-ldap/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - spring-boot-starters - org.springframework.boot - ${revision} - - spring-boot-starter-data-ldap - Spring Boot Data LDAP Starter - Starter for using Spring Data LDAP - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.data - spring-data-ldap - - - org.slf4j - jcl-over-slf4j - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb-reactive/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb-reactive/build.gradle new file mode 100644 index 00000000000..e32f7f97a34 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb-reactive/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using MongoDB document-oriented database and Spring Data MongoDB Reactive" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'io.projectreactor:reactor-core' + api 'org.mongodb:mongodb-driver' + api 'org.mongodb:mongodb-driver-async' + api 'org.mongodb:mongodb-driver-reactivestreams' + api ('org.springframework.data:spring-data-mongodb') { + exclude group: 'org.mongodb', module: 'mongo-java-driver' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb-reactive/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb-reactive/pom.xml deleted file mode 100644 index 54162c3f1a6..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb-reactive/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-mongodb-reactive - Spring Boot Data MongoDB Reactive Starter - Starter for using MongoDB document-oriented database and Spring Data - MongoDB Reactive - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.data - spring-data-mongodb - - - org.mongodb - mongo-java-driver - - - org.slf4j - jcl-over-slf4j - - - - - org.mongodb - mongodb-driver - - - org.mongodb - mongodb-driver-async - - - org.mongodb - mongodb-driver-reactivestreams - - - io.projectreactor - reactor-core - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb/build.gradle new file mode 100644 index 00000000000..b6b001fc845 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using MongoDB document-oriented database and Spring Data MongoDB" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.mongodb:mongodb-driver' + api ('org.springframework.data:spring-data-mongodb') { + exclude group: 'org.mongodb', module: 'mongo-java-driver' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb/pom.xml deleted file mode 100644 index 0c6824c04d4..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-mongodb/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-mongodb - Spring Boot Data MongoDB Starter - Starter for using MongoDB document-oriented database and Spring Data - MongoDB - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.mongodb - mongodb-driver - - - org.springframework.data - spring-data-mongodb - - - org.mongodb - mongo-java-driver - - - org.slf4j - jcl-over-slf4j - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-neo4j/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-neo4j/build.gradle new file mode 100644 index 00000000000..b4fabd9c661 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-neo4j/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Neo4j graph database and Spring Data Neo4j" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework.data:spring-data-neo4j' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-neo4j/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-neo4j/pom.xml deleted file mode 100644 index 5beaa0a2714..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-neo4j/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-neo4j - Spring Boot Data Neo4j Starter - Starter for using Neo4j graph database and Spring Data Neo4j - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.data - spring-data-neo4j - - - org.slf4j - jcl-over-slf4j - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis-reactive/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis-reactive/build.gradle new file mode 100644 index 00000000000..6c1219bd4d9 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis-reactive/build.gradle @@ -0,0 +1,10 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Redis key-value data store with Spring Data Redis reactive and the Lettuce client" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-redis') +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis-reactive/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis-reactive/pom.xml deleted file mode 100644 index adef6cad1ba..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis-reactive/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-redis-reactive - Spring Boot Data Redis Reactive Starter - Starter for using Redis key-value data store with Spring Data Redis - reactive and the Lettuce client - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-data-redis - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis/build.gradle new file mode 100644 index 00000000000..34dd4d4a10e --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Redis key-value data store with Spring Data Redis and the Lettuce client" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework.data:spring-data-redis' + api 'io.lettuce:lettuce-core' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis/pom.xml deleted file mode 100644 index 84b5b9e3610..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-redis/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-redis - Spring Boot Data Redis Starter - Starter for using Redis key-value data store with Spring Data Redis and - the Lettuce client - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.data - spring-data-redis - - - org.slf4j - jcl-over-slf4j - - - - - io.lettuce - lettuce-core - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-rest/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-rest/build.gradle new file mode 100644 index 00000000000..6258a7bb8df --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-rest/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for exposing Spring Data repositories over REST using Spring Data REST" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + api 'org.springframework.data:spring-data-rest-webmvc' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-rest/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-rest/pom.xml deleted file mode 100644 index fb21cd4b301..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-rest/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-rest - Spring Boot Data REST Starter - Starter for exposing Spring Data repositories over REST using Spring - Data REST - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.data - spring-data-rest-webmvc - - - org.slf4j - jcl-over-slf4j - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-solr/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-solr/build.gradle new file mode 100644 index 00000000000..287a62e3b62 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-solr/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using the Apache Solr search platform with Spring Data Solr" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api ('org.apache.solr:solr-solrj') { + exclude group: 'org.slf4j', module: 'jcl-over-slf4j' + } + api 'org.springframework.data:spring-data-solr' + api ('org.apache.httpcomponents:httpmime') { + exclude group: 'commons-logging', module: 'commons-logging' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-solr/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-data-solr/pom.xml deleted file mode 100644 index 87c474c8ad3..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-data-solr/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-data-solr - Spring Boot Data Solr Starter - Starter for using the Apache Solr search platform with Spring Data - Solr - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.apache.solr - solr-solrj - - - org.springframework.data - spring-data-solr - - - org.slf4j - jcl-over-slf4j - - - - - org.apache.httpcomponents - httpmime - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-freemarker/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-freemarker/build.gradle new file mode 100644 index 00000000000..e6151b55d3b --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-freemarker/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building MVC web applications using FreeMarker views" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.freemarker:freemarker' + api 'org.springframework:spring-context-support' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-freemarker/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-freemarker/pom.xml deleted file mode 100644 index f480476e442..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-freemarker/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-freemarker - Spring Boot FreeMarker Starter - Starter for building MVC web applications using FreeMarker views - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.freemarker - freemarker - - - org.springframework - spring-context-support - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-groovy-templates/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-groovy-templates/build.gradle new file mode 100644 index 00000000000..640b44e5f65 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-groovy-templates/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building MVC web applications using Groovy Templates views" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + api 'org.codehaus.groovy:groovy-templates' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-groovy-templates/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-groovy-templates/pom.xml deleted file mode 100644 index 0ab1b3459e5..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-groovy-templates/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-groovy-templates - Spring Boot Groovy Templates Starter - Starter for building MVC web applications using Groovy Templates views - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-web - - - org.codehaus.groovy - groovy-templates - - - - - - org.basepom.maven - duplicate-finder-maven-plugin - - - duplicate-dependencies - validate - - check - - - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-hateoas/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-hateoas/build.gradle new file mode 100644 index 00000000000..ca4129e0f09 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-hateoas/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + api 'org.springframework.hateoas:spring-hateoas' + api 'org.springframework.plugin:spring-plugin-core' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-hateoas/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-hateoas/pom.xml deleted file mode 100644 index d23fa1563ad..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-hateoas/pom.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-hateoas - Spring Boot HATEOAS Starter - Starter for building hypermedia-based RESTful web application with - Spring MVC and Spring HATEOAS - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.hateoas - spring-hateoas - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-integration/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-integration/build.gradle new file mode 100644 index 00000000000..7141809230f --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-integration/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Integration" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-aop') + api 'org.springframework.integration:spring-integration-core' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-integration/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-integration/pom.xml deleted file mode 100644 index 6918380b3f4..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-integration/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-integration - Spring Boot Integration Starter - Starter for using Spring Integration - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-aop - - - org.springframework.integration - spring-integration-core - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jdbc/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-jdbc/build.gradle new file mode 100644 index 00000000000..71132155c6a --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-jdbc/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using JDBC with the HikariCP connection pool" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'com.zaxxer:HikariCP' + api 'org.springframework:spring-jdbc' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jdbc/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-jdbc/pom.xml deleted file mode 100644 index 5c1a9978583..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-jdbc/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-jdbc - Spring Boot JDBC Starter - Starter for using JDBC with the HikariCP connection pool - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - com.zaxxer - HikariCP - - - org.springframework - spring-jdbc - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jersey/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-jersey/build.gradle new file mode 100644 index 00000000000..dc8b36a02e4 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-jersey/build.gradle @@ -0,0 +1,27 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to spring-boot-starter-web" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-validation') + api 'org.springframework:spring-web' + api 'org.glassfish.jersey.core:jersey-server' + api 'org.glassfish.jersey.containers:jersey-container-servlet-core' + api 'org.glassfish.jersey.containers:jersey-container-servlet' + api ('org.glassfish.jersey.ext:jersey-bean-validation') { + exclude group: 'jakarta.el', module: 'jakarta.el-api' + exclude group: 'org.glassfish', module: 'jakarta.el' + } + api 'org.glassfish.jersey.ext:jersey-spring4' + api 'org.glassfish.jersey.media:jersey-media-json-jackson' +} + +checkRuntimeClasspathForConflicts { + ignore { name -> name.startsWith('org/aopalliance/intercept/') } + ignore { name -> name.startsWith('org/aopalliance/aop/') } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jersey/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-jersey/pom.xml deleted file mode 100644 index ee33ee1264e..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-jersey/pom.xml +++ /dev/null @@ -1,176 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-jersey - Spring Boot Jersey Starter - Starter for building RESTful web applications using JAX-RS and Jersey. - An alternative to spring-boot-starter-web - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-json - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-validation - - - jakarta.annotation - jakarta.annotation-api - - - jakarta.ws.rs - jakarta.ws.rs-api - - - org.springframework - spring-web - - - org.glassfish.jersey.core - jersey-server - - - javax.validation - validation-api - - - - - org.glassfish.jersey.containers - jersey-container-servlet-core - - - org.glassfish.hk2.external - jakarta.inject - - - - - org.glassfish.jersey.containers - jersey-container-servlet - - - javax.ws.rs - javax.ws.rs-api - - - - - org.glassfish.jersey.ext - jersey-bean-validation - - - javax.validation - validation-api - - - org.glassfish - jakarta.el - - - org.hibernate - hibernate-validator - - - jakarta.el - jakarta.el-api - - - - - org.glassfish.jersey.ext - jersey-spring5 - - - org.jvnet - tiger-types - - - org.glassfish.hk2.external - bean-validator - - - org.hibernate - hibernate-validator - - - - - org.glassfish.jersey.media - jersey-media-json-jackson - - - jakarta.activation - jakarta.activation-api - - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - - org.basepom.maven - duplicate-finder-maven-plugin - - - duplicate-dependencies - validate - - check - - - - org.aopalliance.* - javax.annotation.* - .*module-info - - - - - - - - - - jdk11+ - - [11,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - jakarta.activation - jakarta.activation-api - - - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jetty/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-jetty/build.gradle new file mode 100644 index 00000000000..c44bae26787 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-jetty/build.gradle @@ -0,0 +1,25 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Jetty as the embedded servlet container. An alternative to spring-boot-starter-tomcat" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api 'jakarta.servlet:jakarta.servlet-api' + api 'jakarta.websocket:jakarta.websocket-api' + api 'org.eclipse.jetty:jetty-servlets' + api ('org.eclipse.jetty:jetty-webapp') { + exclude group: 'javax.servlet', module: 'javax.servlet-api' + } + api ('org.eclipse.jetty.websocket:websocket-server') { + exclude group: 'javax.servlet', module: 'javax.servlet-api' + } + api ('org.eclipse.jetty.websocket:javax-websocket-server-impl') { + exclude group: 'javax.annotation', module: 'javax.annotation-api' + exclude group: 'javax.servlet', module: 'javax.servlet-api' + exclude group: 'javax.websocket', module: 'javax.websocket-api' + exclude group: 'javax.websocket', module: 'javax.websocket-client-api' + } + api 'org.mortbay.jasper:apache-el' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jetty/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-jetty/pom.xml deleted file mode 100644 index f9bf5d3a863..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-jetty/pom.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-jetty - Spring Boot Jetty Starter - Starter for using Jetty as the embedded servlet container. An - alternative to spring-boot-starter-tomcat - - ${basedir}/../../.. - 3.1.0 - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - jakarta.servlet - jakarta.servlet-api - - - jakarta.websocket - jakarta.websocket-api - - - org.eclipse.jetty - jetty-servlets - - - org.eclipse.jetty - jetty-webapp - - - javax.servlet - javax.servlet-api - - - - - org.eclipse.jetty.websocket - websocket-server - - - javax.servlet - javax.servlet-api - - - - - org.eclipse.jetty.websocket - javax-websocket-server-impl - - - javax.annotation - javax.annotation-api - - - javax.websocket - javax.websocket-client-api - - - javax.websocket - javax.websocket-api - - - org.eclipse.jetty - jetty-jndi - - - - - org.mortbay.jasper - apache-el - - - - - - org.basepom.maven - duplicate-finder-maven-plugin - - - duplicate-dependencies - validate - - check - - - - .*module-info - - - about.html - - - - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jooq/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-jooq/build.gradle new file mode 100644 index 00000000000..244f4391f70 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-jooq/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using jOOQ to access SQL databases. An alternative to spring-boot-starter-data-jpa or spring-boot-starter-jdbc" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc') + api 'jakarta.activation:jakarta.activation-api' + api 'jakarta.xml.bind:jakarta.xml.bind-api' + api 'org.springframework:spring-tx' + api ('org.jooq:jooq') { + exclude group: 'javax.activation', module: 'javax.activation-api' + exclude group: 'javax.xml.bind', module: 'jaxb-api' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jooq/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-jooq/pom.xml deleted file mode 100644 index 0d938f17ddc..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-jooq/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-jooq - Spring Boot JOOQ Starter - Starter for using jOOQ to access SQL databases. An alternative to - spring-boot-starter-data-jpa or spring-boot-starter-jdbc - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-jdbc - - - jakarta.activation - jakarta.activation-api - - - jakarta.xml.bind - jakarta.xml.bind-api - - - org.springframework - spring-tx - - - org.jooq - jooq - - - javax.activation - javax.activation-api - - - javax.xml.bind - jaxb-api - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-json/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-json/build.gradle new file mode 100644 index 00000000000..3d2633702bd --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-json/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for reading and writing json" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-web' + api 'com.fasterxml.jackson.core:jackson-databind' + api 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8' + api 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' + api 'com.fasterxml.jackson.module:jackson-module-parameter-names' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-json/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-json/pom.xml deleted file mode 100644 index ba198fc5f17..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-json/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-json - Spring Boot Json Starter - Starter for reading and writing json - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-web - - - com.fasterxml.jackson.core - jackson-databind - - - com.fasterxml.jackson.datatype - jackson-datatype-jdk8 - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - com.fasterxml.jackson.module - jackson-module-parameter-names - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-atomikos/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-atomikos/build.gradle new file mode 100644 index 00000000000..9dbb5822169 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-atomikos/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for JTA transactions using Atomikos" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'com.atomikos:transactions-jms' + api 'com.atomikos:transactions-jta' + api 'com.atomikos:transactions-jdbc' + api 'jakarta.transaction:jakarta.transaction-api' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-atomikos/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-atomikos/pom.xml deleted file mode 100644 index 952efd70e16..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-atomikos/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-jta-atomikos - Spring Boot Atomikos JTA Starter - Starter for JTA transactions using Atomikos - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - com.atomikos - transactions-jms - - - com.atomikos - transactions-jta - - - org.apache.geronimo.specs - geronimo-jta_1.0.1B_spec - - - - - com.atomikos - transactions-jdbc - - - jakarta.transaction - jakarta.transaction-api - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-bitronix/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-bitronix/build.gradle new file mode 100644 index 00000000000..81967090902 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-bitronix/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for JTA transactions using Bitronix" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'jakarta.jms:jakarta.jms-api' + api 'jakarta.transaction:jakarta.transaction-api' + api ('org.codehaus.btm:btm') { + exclude group: 'javax.transaction', module: 'jta' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-bitronix/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-bitronix/pom.xml deleted file mode 100644 index 374205006a1..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-jta-bitronix/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-jta-bitronix - Spring Boot Bitronix JTA Starter - Starter for JTA transactions using Bitronix - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - jakarta.jms - jakarta.jms-api - - - jakarta.transaction - jakarta.transaction-api - - - org.codehaus.btm - btm - - - javax.transaction - jta - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-log4j2/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-log4j2/build.gradle new file mode 100644 index 00000000000..5490015749d --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-log4j2/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Log4j2 for logging. An alternative to spring-boot-starter-logging" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api 'org.apache.logging.log4j:log4j-slf4j-impl' + api 'org.apache.logging.log4j:log4j-core' + api 'org.apache.logging.log4j:log4j-jul' + api 'org.slf4j:jul-to-slf4j' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-log4j2/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-log4j2/pom.xml deleted file mode 100644 index 3f6bb33c49f..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-log4j2/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-log4j2 - Spring Boot Log4j 2 Starter - Starter for using Log4j2 for logging. An alternative to - spring-boot-starter-logging - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.apache.logging.log4j - log4j-slf4j-impl - - - org.apache.logging.log4j - log4j-core - - - org.apache.logging.log4j - log4j-jul - - - org.slf4j - jul-to-slf4j - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-logging/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-logging/build.gradle new file mode 100644 index 00000000000..a38b29fd62e --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-logging/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for logging using Logback. Default logging starter" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api 'ch.qos.logback:logback-classic' + api 'org.apache.logging.log4j:log4j-to-slf4j' + api 'org.slf4j:jul-to-slf4j' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-logging/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-logging/pom.xml deleted file mode 100644 index 80dc82f26f8..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-logging/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-logging - Spring Boot Logging Starter - Starter for logging using Logback. Default logging starter - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - ch.qos.logback - logback-classic - - - org.apache.logging.log4j - log4j-to-slf4j - - - org.slf4j - jul-to-slf4j - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/build.gradle new file mode 100644 index 00000000000..641440d7be7 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Java Mail and Spring Framework's email sending support" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-context-support' + api 'com.sun.mail:jakarta.mail' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/pom.xml deleted file mode 100644 index 2378dfa5515..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-mail - Spring Boot Mail Starter - Starter for using Java Mail and Spring Framework's email sending - support - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-context-support - - - com.sun.mail - jakarta.mail - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-mustache/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-mustache/build.gradle new file mode 100644 index 00000000000..83a4f7c7ed3 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-mustache/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building web applications using Mustache views" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'com.samskivert:jmustache' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-mustache/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-mustache/pom.xml deleted file mode 100644 index c71dcaa464e..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-mustache/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-mustache - Spring Boot Mustache Starter - Starter for building web applications using Mustache views - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - com.samskivert - jmustache - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-client/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-client/build.gradle new file mode 100644 index 00000000000..d31b8573ae3 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-client/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Security's OAuth2/OpenID Connect client features" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'com.sun.mail:jakarta.mail' + api 'org.springframework.security:spring-security-config' + api 'org.springframework.security:spring-security-core' + api ('org.springframework.security:spring-security-oauth2-client') { + exclude group: 'com.sun.mail', module: 'javax.mail' + } + api 'org.springframework.security:spring-security-oauth2-jose' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-client/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-client/pom.xml deleted file mode 100644 index 63ecdd1d49e..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-client/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-oauth2-client - Spring Boot OAuth2/OpenID Connect Client Starter - Starter for using Spring Security's OAuth2/OpenID Connect client features - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - com.sun.mail - jakarta.mail - - - org.springframework.security - spring-security-config - - - org.springframework.security - spring-security-core - - - org.springframework.security - spring-security-oauth2-client - - - com.sun.mail - javax.mail - - - - - org.springframework.security - spring-security-oauth2-jose - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-resource-server/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-resource-server/build.gradle new file mode 100644 index 00000000000..39685e87b0f --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-resource-server/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Security's OAuth2 resource server features" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework.security:spring-security-config' + api 'org.springframework.security:spring-security-core' + api 'org.springframework.security:spring-security-oauth2-resource-server' + api 'org.springframework.security:spring-security-oauth2-jose' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-resource-server/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-resource-server/pom.xml deleted file mode 100644 index 0a4f791f0f8..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-oauth2-resource-server/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-oauth2-resource-server - Spring Boot OAuth2 Resource Server Starter - Starter for using Spring Security's OAuth2 resource server features - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.security - spring-security-config - - - org.springframework.security - spring-security-core - - - org.springframework.security - spring-security-oauth2-resource-server - - - org.springframework.security - spring-security-oauth2-jose - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/build.gradle new file mode 100644 index 00000000000..00a9bf070f6 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/build.gradle @@ -0,0 +1,226 @@ +plugins { + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' + id 'org.springframework.boot.maven-repository' +} + +description = "Parent pom providing dependency and plugin management for applications built with Maven" + +publishing.publications.withType(MavenPublication) { + pom.withXml { xml -> + def root = xml.asNode() + root.groupId.replaceNode { + parent { + delegate.groupId("${project.group}") + delegate.artifactId("spring-boot-dependencies") + delegate.version("${project.version}") + } + } + root.remove(root.version) + root.description.plus { + properties { + delegate.'java.version'('1.8') + delegate.'resource.delimiter'('@') + delegate.'maven.compiler.source'('${java.version}') + delegate.'maven.compiler.target'('${java.version}') + } + } + root.issueManagement.plus { + build { + resources { + resource { + delegate.directory('${basedir}/src/main/resources') + delegate.filtering('true') + includes { + delegate.include('**/application*.yml') + delegate.include('**/application*.yaml') + delegate.include('**/application*.properties') + } + } + resource { + delegate.directory('${basedir}/src/main/resources') + excludes { + delegate.exclude('**/application*.yml') + delegate.exclude('**/application*.yaml') + delegate.exclude('**/application*.properties') + } + } + } + pluginManagement { + plugins { + plugin { + delegate.groupId('org.jetbrains.kotlin') + delegate.artifactId('kotlin-maven-plugin') + delegate.version('${kotlin.version}') + configuration { + delegate.jvmTarget('${java.version}') + delegate.javaParameters('true') + } + executions { + execution { + delegate.id('compile') + delegate.phase('compile') + goals { + delegate.goal('compile') + } + } + execution { + delegate.id('test-compile') + delegate.phase('test-compile') + goals { + delegate.goal('test-compile') + } + } + } + } + plugin { + delegate.groupId('org.apache.maven.plugins') + delegate.artifactId('maven-compiler-plugin') + configuration { + delegate.parameters('true') + } + } + plugin { + delegate.groupId('org.apache.maven.plugins') + delegate.artifactId('maven-failsafe-plugin') + executions { + execution { + goals { + delegate.goal('integration-test') + delegate.goal('verify') + } + } + } + configuration { + delegate.classesDirectory('${project.build.outputDirectory}') + } + } + plugin { + delegate.groupId('org.apache.maven.plugins') + delegate.artifactId('maven-jar-plugin') + configuration { + archive { + manifest { + delegate.mainClass('${start-class}') + delegate.addDefaultImplementationEntries('true') + } + } + } + } + plugin { + delegate.groupId('org.apache.maven.plugins') + delegate.artifactId('maven-war-plugin') + configuration { + archive { + manifest { + delegate.mainClass('${start-class}') + delegate.addDefaultImplementationEntries('true') + } + } + } + } + plugin { + delegate.groupId('org.codehaus.mojo') + delegate.artifactId('exec-maven-plugin') + configuration { + delegate.mainClass('${start-class}') + } + } + plugin { + delegate.groupId('org.apache.maven.plugins') + delegate.artifactId('maven-resources-plugin') + configuration { + delimiters { + delegate.delimiter('${resource.delimiter}') + } + delegate.useDefaultDelimiters('false') + } + } + plugin { + delegate.groupId('pl.project13.maven') + delegate.artifactId('git-commit-id-plugin') + executions { + execution { + goals { + delegate.goal('revision') + } + } + } + configuration { + delegate.verbose('true') + delegate.dateFormat("yyyy-MM-dd'T'HH:mm:ssZ") + delegate.generateGitPropertiesFile('true') + delegate.generateGitPropertiesFilename('${project.build.outputDirectory}/git.properties') + } + } + plugin { + delegate.groupId('org.springframework.boot') + delegate.artifactId('spring-boot-maven-plugin') + executions { + execution { + delegate.id('repackage') + goals { + delegate.goal('repackage') + } + } + } + configuration { + delegate.mainClass('${start-class}') + } + } + plugin { + delegate.groupId('org.apache.maven.plugins') + delegate.artifactId('maven-shade-plugin') + configuration { + delegate.keepDependenciesWithProvidedScope('true') + delegate.createDependencyReducedPom('true') + filters { + filter { + delegate.artifact('*:*') + excludes { + delegate.exclude('META-INF/*.SF') + delegate.exclude('META-INF/*.DSA') + delegate.exclude('META-INF/*.RSA') + } + } + } + } + delegate.dependencies { + dependency { + delegate.groupId('org.springframework.boot') + delegate.artifactId('spring-boot-maven-plugin') + delegate.version('${revision}') + } + } + executions { + execution { + delegate.phase('package') + goals { + delegate.goal('shade') + } + configuration { + transformers { + transformer { + delegate.resource('META-INF/spring.handlers') + } + transformer { + delegate.resource('META-INF/spring.factories') + } + transformer { + delegate.resource('META-INF/spring.schemas') + } + delegate.transformer('') + transformer { + delegate.mainClass('${start-class}') + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml deleted file mode 100644 index 23b32d80e75..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml +++ /dev/null @@ -1,297 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-dependencies - ${revision} - ../../spring-boot-dependencies - - spring-boot-starter-parent - pom - Spring Boot Starter Parent - Parent pom providing dependency and plugin management for applications - built with Maven - - ${basedir}/../../.. - 1.8 - @ - UTF-8 - UTF-8 - ${java.version} - ${java.version} - - - - - - ${basedir}/src/main/resources - true - - **/application*.yml - **/application*.yaml - **/application*.properties - - - - ${basedir}/src/main/resources - - **/application*.yml - **/application*.yaml - **/application*.properties - - - - - - - - org.jetbrains.kotlin - kotlin-maven-plugin - ${kotlin.version} - - ${java.version} - true - - - - compile - compile - - compile - - - - test-compile - test-compile - - test-compile - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - true - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - - integration-test - verify - - - - - ${project.build.outputDirectory} - - - - org.apache.maven.plugins - maven-jar-plugin - - - - ${start-class} - true - - - - - - org.apache.maven.plugins - maven-war-plugin - - - - ${start-class} - true - - - - - - org.codehaus.mojo - exec-maven-plugin - - ${start-class} - - - - org.apache.maven.plugins - maven-resources-plugin - - - ${resource.delimiter} - - false - - - - pl.project13.maven - git-commit-id-plugin - - - - revision - - - - - true - yyyy-MM-dd'T'HH:mm:ssZ - true - ${project.build.outputDirectory}/git.properties - - - - - org.springframework.boot - spring-boot-maven-plugin - - - repackage - - repackage - - - - - ${start-class} - - - - - org.apache.maven.plugins - maven-shade-plugin - - true - true - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - org.springframework.boot - spring-boot-maven-plugin - ${revision} - - - - - package - - shade - - - - - META-INF/spring.handlers - - - META-INF/spring.factories - - - META-INF/spring.schemas - - - - ${start-class} - - - - - - - - - - - org.codehaus.mojo - flatten-maven-plugin - false - - - - flatten - process-resources - - flatten - - - true - - expand - keep - keep - expand - keep - keep - keep - keep - - - - - flatten-clean - clean - - clean - - - - - - org.codehaus.mojo - xml-maven-plugin - false - - - - post-process-flattened-pom - process-resources - - transform - - - - - ${project.basedir} - ${project.basedir} - .flattened-pom.xml - src/main/xslt/post-process-flattened-pom.xsl - - - indent - yes - - - - - - - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-quartz/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-quartz/build.gradle new file mode 100644 index 00000000000..c00a3a01669 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-quartz/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using the Quartz scheduler" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-context-support' + api 'org.springframework:spring-tx' + api 'org.quartz-scheduler:quartz' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-quartz/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-quartz/pom.xml deleted file mode 100644 index 7edae6ae0d4..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-quartz/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-quartz - Spring Boot Quartz Starter - Starter for using the Quartz scheduler - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-context-support - - - org.springframework - spring-tx - - - org.quartz-scheduler - quartz - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-reactor-netty/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-reactor-netty/build.gradle new file mode 100644 index 00000000000..b3c8171ac44 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-reactor-netty/build.gradle @@ -0,0 +1,10 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Reactor Netty as the embedded reactive HTTP server." + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api 'io.projectreactor.netty:reactor-netty' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-reactor-netty/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-reactor-netty/pom.xml deleted file mode 100644 index fa72cb97ddb..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-reactor-netty/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-reactor-netty - Spring Boot Reactor Netty Starter - Starter for using Reactor Netty as the embedded reactive HTTP server. - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - io.projectreactor.netty - reactor-netty - - - org.glassfish - jakarta.el - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-rsocket/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-rsocket/build.gradle new file mode 100644 index 00000000000..abc5ee6b579 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-rsocket/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building RSocket clients and servers" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-reactor-netty') + api 'com.fasterxml.jackson.dataformat:jackson-dataformat-cbor' + api 'io.rsocket:rsocket-core' + api 'io.rsocket:rsocket-transport-netty' + api 'org.springframework:spring-messaging' + api 'org.springframework.security:spring-security-config' + api 'org.springframework.security:spring-security-web' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-rsocket/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-rsocket/pom.xml deleted file mode 100644 index b83a43efcec..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-rsocket/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-rsocket - Spring Boot RSocket Starter - Starter for building RSocket clients and servers. - - ${basedir}/../../.. - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-messaging - - - io.rsocket - rsocket-core - - - io.rsocket - rsocket-transport-netty - - - org.springframework.boot - spring-boot-starter-reactor-netty - - - org.springframework.boot - spring-boot-starter-json - - - com.fasterxml.jackson.dataformat - jackson-dataformat-cbor - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-security/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-security/build.gradle new file mode 100644 index 00000000000..598adca0657 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-security/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Security" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.springframework:spring-aop' + api 'org.springframework.security:spring-security-config' + api 'org.springframework.security:spring-security-web' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-security/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-security/pom.xml deleted file mode 100644 index 7b3112de86a..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-security/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-security - Spring Boot Security Starter - Starter for using Spring Security - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-aop - - - org.springframework.security - spring-security-config - - - org.springframework.security - spring-security-web - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-test/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-test/build.gradle new file mode 100644 index 00000000000..88129876742 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-test/build.gradle @@ -0,0 +1,30 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for testing Spring Boot applications with libraries including JUnit, Hamcrest and Mockito" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api project(':spring-boot-project:spring-boot-test') + api project(':spring-boot-project:spring-boot-test-autoconfigure') + + api 'com.jayway.jsonpath:json-path' + api 'jakarta.xml.bind:jakarta.xml.bind-api' + api 'org.assertj:assertj-core' + api 'org.hamcrest:hamcrest' + api 'org.junit.jupiter:junit-jupiter' + api('org.junit.vintage:junit-vintage-engine') { + exclude group: 'org.hamcrest', module: 'hamcrest-core' + } + api 'org.mockito:mockito-core' + api 'org.mockito:mockito-junit-jupiter' + api 'org.skyscreamer:jsonassert' + api 'org.springframework:spring-core' + api 'org.springframework:spring-test' + api('org.xmlunit:xmlunit-core') { + exclude group: 'javax.xml.bind', module: 'jaxb-api' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-test/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-test/pom.xml deleted file mode 100644 index 03f9a83d7b5..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-test/pom.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-test - Spring Boot Test Starter - Starter for testing Spring Boot applications with libraries including - JUnit, Hamcrest and Mockito - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-test - - - org.springframework.boot - spring-boot-test-autoconfigure - - - com.jayway.jsonpath - json-path - - - jakarta.xml.bind - jakarta.xml.bind-api - - - org.junit.jupiter - junit-jupiter - - - org.junit.vintage - junit-vintage-engine - - - org.hamcrest - hamcrest-core - - - - - org.mockito - mockito-junit-jupiter - - - org.assertj - assertj-core - - - org.hamcrest - hamcrest - - - org.mockito - mockito-core - - - org.skyscreamer - jsonassert - - - org.springframework - spring-core - - - org.springframework - spring-test - - - org.xmlunit - xmlunit-core - - - javax.xml.bind - jaxb-api - - - - - - - - org.basepom.maven - duplicate-finder-maven-plugin - - - duplicate-dependencies - validate - - check - - - - - - - org.ow2.asm - asm - - - net.minidev - accessors-smart - - - - - - - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/build.gradle new file mode 100644 index 00000000000..eefd35fbf18 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building MVC web applications using Thymeleaf views" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.thymeleaf:thymeleaf-spring5' + api 'org.thymeleaf.extras:thymeleaf-extras-java8time' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/pom.xml deleted file mode 100644 index 303066ffb24..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-thymeleaf - Spring Boot Thymeleaf Starter - Starter for building MVC web applications using Thymeleaf views - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.thymeleaf - thymeleaf-spring5 - - - org.thymeleaf.extras - thymeleaf-extras-java8time - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-tomcat/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-tomcat/build.gradle new file mode 100644 index 00000000000..5454e244cf9 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-tomcat/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Tomcat as the embedded servlet container. Default servlet container starter used by spring-boot-starter-web" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api 'jakarta.annotation:jakarta.annotation-api' + api ('org.apache.tomcat.embed:tomcat-embed-core') { + exclude group: 'org.apache.tomcat', module: 'tomcat-annotations-api' + } + api 'org.apache.tomcat.embed:tomcat-embed-el' + api ('org.apache.tomcat.embed:tomcat-embed-websocket') { + exclude group: 'org.apache.tomcat', module: 'tomcat-annotations-api' + } +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-tomcat/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-tomcat/pom.xml deleted file mode 100644 index 67936764846..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-tomcat/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-tomcat - Spring Boot Tomcat Starter - Starter for using Tomcat as the embedded servlet container. Default - servlet container starter used by spring-boot-starter-web - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - jakarta.annotation - jakarta.annotation-api - - - org.apache.tomcat.embed - tomcat-embed-core - - - org.apache.tomcat - tomcat-annotations-api - - - - - org.apache.tomcat.embed - tomcat-embed-el - - - org.apache.tomcat.embed - tomcat-embed-websocket - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-undertow/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-undertow/build.gradle new file mode 100644 index 00000000000..9c0f4b05b7e --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-undertow/build.gradle @@ -0,0 +1,20 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Undertow as the embedded servlet container. An alternative to spring-boot-starter-tomcat" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api 'io.undertow:undertow-core' + api ('io.undertow:undertow-servlet') { + exclude group: 'org.jboss.spec.javax.annotation', module: 'jboss-annotations-api_1.2_spec' + exclude group: 'org.jboss.spec.javax.servlet', module: 'jboss-servlet-api_4.0_spec' + } + api ('io.undertow:undertow-websockets-jsr') { + exclude group: 'org.jboss.spec.javax.annotation', module: 'jboss-annotations-api_1.2_spec' + exclude group: 'org.jboss.spec.javax.servlet', module: 'jboss-servlet-api_4.0_spec' + } + api 'jakarta.servlet:jakarta.servlet-api' + api 'org.glassfish:jakarta.el' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-undertow/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-undertow/pom.xml deleted file mode 100644 index 83d5a29bdc7..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-undertow/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-undertow - Spring Boot Undertow Starter - Starter for using Undertow as the embedded servlet container. An - alternative to spring-boot-starter-tomcat - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - io.undertow - undertow-core - - - io.undertow - undertow-servlet - - - org.jboss.spec.javax.servlet - jboss-servlet-api_4.0_spec - - - - - io.undertow - undertow-websockets-jsr - - - jakarta.servlet - jakarta.servlet-api - - - org.glassfish - jakarta.el - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-validation/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-validation/build.gradle new file mode 100644 index 00000000000..c8f959aca51 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-validation/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Java Bean Validation with Hibernate Validator" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api 'org.apache.tomcat.embed:tomcat-embed-el' + api 'org.hibernate.validator:hibernate-validator' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-validation/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-validation/pom.xml deleted file mode 100644 index 542f96b0670..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-validation/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-validation - Spring Boot Validation Starter - Starter for using Java Bean Validation with Hibernate - Validator - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - jakarta.validation - jakarta.validation-api - - - org.apache.tomcat.embed - tomcat-embed-el - - - org.hibernate.validator - hibernate-validator - - - javax.validation - validation-api - - - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-web-services/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-web-services/build.gradle new file mode 100644 index 00000000000..5cf4d06251c --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-web-services/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for using Spring Web Services" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + api 'com.sun.xml.messaging.saaj:saaj-impl' + api 'jakarta.xml.ws:jakarta.xml.ws-api' + api 'org.springframework:spring-oxm' + api 'org.springframework.ws:spring-ws-core' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-web-services/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-web-services/pom.xml deleted file mode 100644 index 8e191dae28e..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-web-services/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-web-services - Spring Boot Web Services Starter - Starter for using Spring Web Services - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-web - - - com.sun.xml.messaging.saaj - saaj-impl - - - javax.activation - activation - - - - - jakarta.xml.ws - jakarta.xml.ws-api - - - org.springframework - spring-oxm - - - org.springframework.ws - spring-ws-core - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-web/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-web/build.gradle new file mode 100644 index 00000000000..85adc9003da --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-web/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-validation') + api 'org.hibernate.validator:hibernate-validator' + api 'org.springframework:spring-web' + api 'org.springframework:spring-webmvc' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-web/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-web/pom.xml deleted file mode 100644 index 94a0b6d4da0..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-web/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-web - Spring Boot Web Starter - Starter for building web, including RESTful, applications using Spring - MVC. Uses Tomcat as the default embedded container - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-json - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-validation - - - org.apache.tomcat.embed - tomcat-embed-el - - - - - org.springframework - spring-web - - - org.springframework - spring-webmvc - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/build.gradle new file mode 100644 index 00000000000..dbfa136c506 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building WebFlux applications using Spring Framework's Reactive Web support" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-reactor-netty') + api 'org.hibernate.validator:hibernate-validator' + api 'org.springframework:spring-web' + api 'org.springframework:spring-webflux' + api 'org.synchronoss.cloud:nio-multipart-parser' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/pom.xml deleted file mode 100644 index b159eec6cb6..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-webflux - Spring Boot WebFlux Starter - Starter for building WebFlux applications using Spring Framework's - Reactive Web support - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-json - - - org.springframework.boot - spring-boot-starter-reactor-netty - - - org.springframework.boot - spring-boot-starter-validation - - - org.apache.tomcat.embed - tomcat-embed-el - - - - - org.springframework - spring-web - - - org.springframework - spring-webflux - - - org.synchronoss.cloud - nio-multipart-parser - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-websocket/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-websocket/build.gradle new file mode 100644 index 00000000000..5b78056e502 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-websocket/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Starter for building WebSocket applications using Spring Framework's WebSocket support" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + api 'org.springframework:spring-messaging' + api 'org.springframework:spring-websocket' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-websocket/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-websocket/pom.xml deleted file mode 100644 index 6e6755ce7d6..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-websocket/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter-websocket - Spring Boot WebSocket Starter - Starter for building WebSocket applications using Spring Framework's - WebSocket support - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework - spring-messaging - - - org.springframework - spring-websocket - - - diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter/build.gradle new file mode 100644 index 00000000000..5629d533d52 --- /dev/null +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'org.springframework.boot.starter' +} + +description = "Core starter, including auto-configuration support, logging and YAML" + +dependencies { + api enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + + api project(':spring-boot-project:spring-boot') + api project(':spring-boot-project:spring-boot-autoconfigure') + api project(':spring-boot-project:spring-boot-starters:spring-boot-starter-logging') + + api 'jakarta.annotation:jakarta.annotation-api' + api 'org.springframework:spring-core' + api 'org.yaml:snakeyaml' +} diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter/pom.xml deleted file mode 100644 index a4029e66556..00000000000 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starters - ${revision} - - spring-boot-starter - Spring Boot Starter - Core starter, including auto-configuration support, logging and YAML - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot - - - org.springframework.boot - spring-boot-autoconfigure - - - org.springframework.boot - spring-boot-starter-logging - - - jakarta.annotation - jakarta.annotation-api - - - org.springframework - spring-core - - - org.yaml - snakeyaml - runtime - - - diff --git a/spring-boot-project/spring-boot-test-autoconfigure/build.gradle b/spring-boot-project/spring-boot-test-autoconfigure/build.gradle new file mode 100644 index 00000000000..e6e7364e86b --- /dev/null +++ b/spring-boot-project/spring-boot-test-autoconfigure/build.gradle @@ -0,0 +1,96 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' + id 'org.springframework.boot.optional-dependencies' +} + +description = 'Spring Boot Test AutoConfigure' + +dependencies { + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation project(':spring-boot-project:spring-boot') + implementation project(':spring-boot-project:spring-boot-test') + implementation project(':spring-boot-project:spring-boot-autoconfigure') + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + optional 'javax.json.bind:javax.json.bind-api' + optional 'javax.servlet:javax.servlet-api' + optional 'javax.transaction:javax.transaction-api' + optional 'com.fasterxml.jackson.core:jackson-databind' + optional 'com.google.code.gson:gson' + optional 'com.jayway.jsonpath:json-path' + optional 'io.rest-assured:rest-assured' + optional 'net.sourceforge.htmlunit:htmlunit' + optional 'org.hibernate:hibernate-core' + optional 'org.junit.jupiter:junit-jupiter-api' + optional 'org.seleniumhq.selenium:htmlunit-driver' + optional 'org.seleniumhq.selenium:selenium-api' + optional 'org.springframework:spring-orm' + optional 'org.springframework:spring-test' + optional 'org.springframework:spring-web' + optional 'org.springframework:spring-webmvc' + optional 'org.springframework:spring-webflux' + optional 'org.springframework.data:spring-data-jdbc' + optional 'org.springframework.data:spring-data-jpa' + optional 'org.springframework.data:spring-data-ldap' + optional 'org.springframework.data:spring-data-mongodb' + optional 'org.springframework.data:spring-data-neo4j' + optional 'org.springframework.data:spring-data-redis' + optional 'org.springframework.restdocs:spring-restdocs-mockmvc' + optional 'org.springframework.restdocs:spring-restdocs-restassured' + optional 'org.springframework.restdocs:spring-restdocs-webtestclient' + optional 'org.springframework.security:spring-security-config' + optional 'org.springframework.security:spring-security-test' + optional 'org.apache.tomcat.embed:tomcat-embed-core' + optional 'org.mongodb:mongodb-driver-async' + optional 'org.mongodb:mongodb-driver-reactivestreams' + + testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation 'ch.qos.logback:logback-classic' + testImplementation 'com.fasterxml.jackson.module:jackson-module-parameter-names' + testImplementation 'com.h2database:h2' + testImplementation 'com.unboundid:unboundid-ldapsdk' + testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo' + testImplementation 'io.lettuce:lettuce-core' + testImplementation 'io.projectreactor:reactor-core' + testImplementation 'javax.json:javax.json-api' + testImplementation 'org.apache.commons:commons-pool2' + testImplementation 'org.apache.johnzon:johnzon-jsonb' + testImplementation 'org.apache.tomcat.embed:tomcat-embed-el' + testImplementation 'org.aspectj:aspectjrt' + testImplementation 'org.aspectj:aspectjweaver' + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.hibernate.validator:hibernate-validator' + testImplementation 'org.hsqldb:hsqldb' + testImplementation 'org.jooq:jooq' + testImplementation 'org.junit.platform:junit-platform-engine' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.mockito:mockito-core' + testImplementation 'org.skyscreamer:jsonassert' + testImplementation 'org.springframework.hateoas:spring-hateoas' + testImplementation 'org.springframework.plugin:spring-plugin-core' + testImplementation 'org.testcontainers:junit-jupiter' + testImplementation 'org.testcontainers:neo4j' + testImplementation 'org.testcontainers:testcontainers' + + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +compileJava { + options.compilerArgs << '-parameters' +} + +compileTestJava { + options.compilerArgs << '-parameters' +} + +test { + include '**/*Tests.class' +} + +task testSliceMetadata(type: org.springframework.boot.build.test.autoconfigure.TestSliceMetadata) { + sourceSet = sourceSets.main + outputFile = file("$buildDir/test-slice-metadata.properties") +} diff --git a/spring-boot-project/spring-boot-test-autoconfigure/pom.xml b/spring-boot-project/spring-boot-test-autoconfigure/pom.xml deleted file mode 100644 index 1af6f9b2996..00000000000 --- a/spring-boot-project/spring-boot-test-autoconfigure/pom.xml +++ /dev/null @@ -1,384 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-test-autoconfigure - Spring Boot Test Auto-Configure - Spring Boot Test Auto-Configure - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot-test - - - org.springframework.boot - spring-boot-autoconfigure - - - - com.fasterxml.jackson.core - jackson-databind - true - - - com.google.code.gson - gson - true - - - com.jayway.jsonpath - json-path - true - - - io.rest-assured - rest-assured - true - - - javax.xml.bind - jaxb-api - - - javax.activation - activation - - - org.hamcrest - hamcrest-core - - - org.hamcrest - hamcrest-library - - - - - jakarta.json.bind - jakarta.json.bind-api - true - - - jakarta.persistence - jakarta.persistence-api - true - - - jakarta.servlet - jakarta.servlet-api - true - - - jakarta.transaction - jakarta.transaction-api - true - - - net.sourceforge.htmlunit - htmlunit - true - - - org.hibernate - hibernate-core - - - org.jboss.spec.javax.transaction - jboss-transaction-api_1.2_spec - - - javax.activation - javax.activation-api - - - javax.persistence - javax.persistence-api - - - javax.xml.bind - jaxb-api - - - true - - - org.junit.jupiter - junit-jupiter-api - true - - - org.seleniumhq.selenium - htmlunit-driver - true - - - org.seleniumhq.selenium - selenium-api - true - - - org.springframework - spring-orm - true - - - org.springframework - spring-test - true - - - org.springframework - spring-web - true - - - org.springframework - spring-webmvc - true - - - org.springframework - spring-webflux - true - - - org.springframework.data - spring-data-jdbc - true - - - org.springframework.data - spring-data-jpa - - - org.aspectj - aspectjrt - - - true - - - org.springframework.data - spring-data-ldap - true - - - org.springframework.data - spring-data-mongodb - true - - - org.springframework.data - spring-data-neo4j - true - - - org.springframework.data - spring-data-redis - true - - - org.springframework.restdocs - spring-restdocs-mockmvc - true - - - javax.servlet - javax.servlet-api - - - - - org.springframework.restdocs - spring-restdocs-restassured - true - - - org.springframework.restdocs - spring-restdocs-webtestclient - true - - - org.springframework.security - spring-security-config - true - - - org.springframework.security - spring-security-test - true - - - - org.springframework.boot - spring-boot-test-support - test - - - ch.qos.logback - logback-classic - test - - - com.fasterxml.jackson.module - jackson-module-parameter-names - test - - - com.h2database - h2 - test - - - com.unboundid - unboundid-ldapsdk - test - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - test - - - io.lettuce - lettuce-core - test - - - io.projectreactor - reactor-core - test - - - jakarta.json - jakarta.json-api - test - - - jakarta.validation - jakarta.validation-api - test - - - org.apache.commons - commons-pool2 - test - - - org.apache.johnzon - johnzon-jsonb - test - - - org.apache.tomcat.embed - tomcat-embed-core - true - - - org.apache.tomcat.embed - tomcat-embed-el - test - - - org.aspectj - aspectjrt - test - - - org.aspectj - aspectjweaver - test - - - org.hibernate.validator - hibernate-validator - test - - - javax.validation - validation-api - - - - - org.hsqldb - hsqldb - test - - - org.jooq - jooq - test - - - javax.xml.bind - jaxb-api - - - - - org.mongodb - mongodb-driver-async - true - - - org.mongodb - mongodb-driver-reactivestreams - true - - - org.skyscreamer - jsonassert - test - - - org.springframework.hateoas - spring-hateoas - test - - - org.testcontainers - junit-jupiter - test - - - org.testcontainers - neo4j - test - - - org.testcontainers - testcontainers - test - - - javax.annotation - javax.annotation-api - - - javax.xml.bind - jaxb-api - - - org.hamcrest - hamcrest-core - - - - - diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestIntegrationTests.java b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestIntegrationTests.java index eba313f1ab7..c8588423756 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestIntegrationTests.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestIntegrationTests.java @@ -16,6 +16,8 @@ package org.springframework.boot.test.autoconfigure.data.neo4j; +import java.time.Duration; + import org.junit.jupiter.api.Test; import org.neo4j.ogm.session.Session; import org.testcontainers.containers.Neo4jContainer; @@ -46,7 +48,8 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; class DataNeo4jTestIntegrationTests { @Container - static final Neo4jContainer neo4j = new Neo4jContainer<>().withoutAuthentication(); + static final Neo4jContainer neo4j = new Neo4jContainer<>().withoutAuthentication() + .withStartupTimeout(Duration.ofMinutes(10)); @Autowired private Session session; diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestPropertiesIntegrationTests.java b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestPropertiesIntegrationTests.java index 642c536f136..5b46d62339e 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestPropertiesIntegrationTests.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestPropertiesIntegrationTests.java @@ -16,6 +16,8 @@ package org.springframework.boot.test.autoconfigure.data.neo4j; +import java.time.Duration; + import org.junit.jupiter.api.Test; import org.testcontainers.containers.Neo4jContainer; import org.testcontainers.junit.jupiter.Container; @@ -42,7 +44,8 @@ import static org.assertj.core.api.Assertions.assertThat; class DataNeo4jTestPropertiesIntegrationTests { @Container - static final Neo4jContainer neo4j = new Neo4jContainer<>().withoutAuthentication(); + static final Neo4jContainer neo4j = new Neo4jContainer<>().withoutAuthentication() + .withStartupTimeout(Duration.ofMinutes(10)); @Autowired private Environment environment; diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestWithIncludeFilterIntegrationTests.java b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestWithIncludeFilterIntegrationTests.java index e82fba702cc..4a12980b10c 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestWithIncludeFilterIntegrationTests.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/neo4j/DataNeo4jTestWithIncludeFilterIntegrationTests.java @@ -16,6 +16,8 @@ package org.springframework.boot.test.autoconfigure.data.neo4j; +import java.time.Duration; + import org.junit.jupiter.api.Test; import org.testcontainers.containers.Neo4jContainer; import org.testcontainers.junit.jupiter.Container; @@ -43,7 +45,8 @@ import static org.assertj.core.api.Assertions.assertThat; class DataNeo4jTestWithIncludeFilterIntegrationTests { @Container - static final Neo4jContainer neo4j = new Neo4jContainer<>().withoutAuthentication(); + static final Neo4jContainer neo4j = new Neo4jContainer<>().withoutAuthentication() + .withStartupTimeout(Duration.ofMinutes(10)); @Autowired private ExampleService service; diff --git a/spring-boot-project/spring-boot-test/build.gradle b/spring-boot-project/spring-boot-test/build.gradle new file mode 100644 index 00000000000..f8033155f18 --- /dev/null +++ b/spring-boot-project/spring-boot-test/build.gradle @@ -0,0 +1,55 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' + id 'org.springframework.boot.optional-dependencies' +} + +description = 'Spring Boot Test' + +dependencies { + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation project(':spring-boot-project:spring-boot') + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + optional 'com.fasterxml.jackson.core:jackson-databind' + optional 'com.google.code.gson:gson' + optional 'com.jayway.jsonpath:json-path' + optional 'io.projectreactor.netty:reactor-netty' + optional 'javax.json.bind:javax.json.bind-api' + optional 'javax.servlet:javax.servlet-api' + optional 'junit:junit' + optional 'org.apache.httpcomponents:httpclient' + optional 'org.assertj:assertj-core' + optional 'org.hamcrest:hamcrest-core' + optional 'org.hamcrest:hamcrest-library' + optional 'org.jetbrains.kotlin:kotlin-stdlib' + optional 'org.jetbrains.kotlin:kotlin-reflect' + optional 'org.junit.jupiter:junit-jupiter-api' + optional 'org.mockito:mockito-core' + optional 'org.skyscreamer:jsonassert' + optional 'org.seleniumhq.selenium:htmlunit-driver' + optional 'org.seleniumhq.selenium:selenium-api' + optional 'org.springframework:spring-test' + optional 'org.springframework:spring-web' + optional 'org.springframework:spring-webflux' + optional 'net.sourceforge.htmlunit:htmlunit' + + testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation 'io.mockk:mockk' + testImplementation 'javax.json:javax.json-api' + testImplementation 'ch.qos.logback:logback-classic' + testImplementation 'org.apache.tomcat.embed:tomcat-embed-core' + testImplementation 'org.codehaus.groovy:groovy' + testImplementation 'org.codehaus.groovy:groovy-xml' + testImplementation 'org.apache.johnzon:johnzon-jsonb' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.slf4j:slf4j-api' + testImplementation 'org.spockframework:spock-core' + testImplementation 'org.springframework:spring-webmvc' + testImplementation 'org.testng:testng' + + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-test/pom.xml b/spring-boot-project/spring-boot-test/pom.xml deleted file mode 100644 index 2e59fa5bdeb..00000000000 --- a/spring-boot-project/spring-boot-test/pom.xml +++ /dev/null @@ -1,288 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-test - Spring Boot Test - Spring Boot Test - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot - - - - com.fasterxml.jackson.core - jackson-databind - true - - - com.google.code.gson - gson - true - - - com.jayway.jsonpath - json-path - true - - - io.projectreactor.netty - reactor-netty - true - - - jakarta.json.bind - jakarta.json.bind-api - true - - - jakarta.servlet - jakarta.servlet-api - true - - - junit - junit - true - - - org.hamcrest - hamcrest-core - - - - - org.apache.httpcomponents - httpclient - true - - - org.assertj - assertj-core - true - - - org.hamcrest - hamcrest - true - - - org.jetbrains.kotlin - kotlin-stdlib - true - - - org.jetbrains.kotlin - kotlin-reflect - true - - - org.junit.jupiter - junit-jupiter-api - true - - - org.mockito - mockito-core - true - - - org.skyscreamer - jsonassert - true - - - org.seleniumhq.selenium - htmlunit-driver - true - - - org.seleniumhq.selenium - selenium-api - true - - - org.springframework - spring-test - true - - - org.springframework - spring-web - true - - - org.springframework - spring-webflux - true - - - net.sourceforge.htmlunit - htmlunit - true - - - - org.springframework.boot - spring-boot-test-support - test - - - ch.qos.logback - logback-classic - test - - - io.mockk - mockk - test - - - jakarta.json - jakarta.json-api - test - - - org.apache.tomcat.embed - tomcat-embed-core - test - - - org.codehaus.groovy - groovy - test - - - org.codehaus.groovy - groovy-xml - true - test - - - org.apache.johnzon - johnzon-jsonb - test - - - org.slf4j - slf4j-api - test - - - org.spockframework - spock-core - test - - - org.springframework - spring-webmvc - test - - - org.testng - testng - test - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.surefire - surefire-junit-platform - ${maven-surefire-plugin.version} - - - - - org.jetbrains.kotlin - kotlin-maven-plugin - - - compile - compile - - compile - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/main/java - - - - - test-compile - test-compile - - test-compile - - - - ${project.basedir}/src/test/kotlin - ${project.basedir}/src/test/java - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - default-compile - none - - - default-testCompile - none - - - java-compile - compile - - compile - - - - java-test-compile - test-compile - - testCompile - - - - - - - diff --git a/spring-boot-project/spring-boot-tools/org.springframework.boot.gradle.plugin/pom.xml b/spring-boot-project/spring-boot-tools/org.springframework.boot.gradle.plugin/pom.xml deleted file mode 100644 index 754672d7467..00000000000 --- a/spring-boot-project/spring-boot-tools/org.springframework.boot.gradle.plugin/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - org.springframework.boot.gradle.plugin - pom - Spring Boot Gradle Plugin Marker Artifact - Spring Boot Gradle Plugin Marker Artifact - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-gradle-plugin - ${project.version} - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - regex-property - - regex-property - - - false - - - - - - - diff --git a/spring-boot-project/spring-boot-tools/pom.xml b/spring-boot-project/spring-boot-tools/pom.xml deleted file mode 100644 index 1dd0d293d63..00000000000 --- a/spring-boot-project/spring-boot-tools/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot-tools - pom - Spring Boot Tools - Spring Boot Tools - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - org.springframework.boot.gradle.plugin - spring-boot-antlib - spring-boot-autoconfigure-processor - spring-boot-configuration-docs - spring-boot-configuration-metadata - spring-boot-configuration-processor - spring-boot-gradle-plugin - spring-boot-loader - spring-boot-loader-tools - spring-boot-maven-plugin - spring-boot-test-support - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-antlib/build.gradle new file mode 100644 index 00000000000..db29b70576c --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-antlib/build.gradle @@ -0,0 +1,75 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' +} + +description = 'Spring Boot Antlib' + +ext { + antVersion = "1.9.3" +} + +configurations { + antUnit + antIvy +} + +dependencies { + antUnit "org.apache.ant:ant-antunit:1.3" + antIvy "org.apache.ivy:ivy:2.4.0" + + compileOnly project(":spring-boot-project:spring-boot-tools:spring-boot-loader") + compileOnly "org.apache.ant:ant:${antVersion}" + + implementation enforcedPlatform(project(":spring-boot-project:spring-boot-dependencies")) + implementation project(":spring-boot-project:spring-boot-tools:spring-boot-loader-tools") + implementation "org.springframework:spring-core" +} + +task copyIntegrationTestSources(type: Copy) { + from file("src/it") + into "${buildDir}/it" +} + +processResources { + eachFile { + filter { it.replace('${spring-boot.version}', project.version) } + } +} + +task integrationTest { + dependsOn copyIntegrationTestSources, jar + def resultsDir = file("${buildDir}/test-results/integrationTest") + inputs.dir file("src/it") + inputs.files sourceSets.main.runtimeClasspath + 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() + file("${buildDir}/test-results/integrationTest").mkdirs() + xmllistener(toDir: resultsDir) + fileset(dir: "${buildDir}/it", includes: "**/build.xml") + } + } + } +} + +check { + dependsOn integrationTest +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-antlib/pom.xml deleted file mode 100644 index d40a79a8ead..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-antlib/pom.xml +++ /dev/null @@ -1,155 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-antlib - Spring Boot Antlib - Spring Boot Antlib - - ${basedir}/../../.. - 1.9.3 - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot-loader-tools - compile - - - - org.springframework.boot - spring-boot-loader - provided - - - org.apache.ant - ant - ${ant.version} - provided - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - - org.springframework.boot:spring-boot-loader-tools - org.springframework:spring-core - - - true - false - true - false - - - - shade-runtime-dependencies - package - - shade - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - antunit - integration-test - - - - - - - - - - - - - - - - - - - - - ${skipTests} - - - run - - - - - - org.apache.ant - ant - ${ant.version} - - - org.apache.ant - ant-launcher - ${ant.version} - - - org.apache.ant - ant-antunit - 1.3 - - - org.apache.ivy - ivy - 2.4.0 - - - org.eclipse.jdt.core.compiler - ecj - 4.6.1 - - - - - - - - java-8 - - [1.8,1.9) - - - org.eclipse.jdt.core.JDTCompilerAdapter - - - - java-9 - - [1.9,) - - - modern - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/build.xml b/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/build.xml index c6992bb33ec..1ea131312e5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/build.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/build.xml @@ -6,11 +6,16 @@ + + + - + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/build.gradle new file mode 100644 index 00000000000..40eafac68b6 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' +} + +description = 'Spring Boot AutoConfigure Annotation Processor' + +dependencies { + testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.springframework:spring-core' + testImplementation 'org.junit.jupiter:junit-jupiter' + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/pom.xml deleted file mode 100644 index 6e9fd42e10c..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-autoconfigure-processor - Spring Boot Auto-Configure Annotation Processor - Spring Auto-Configure Annotation Processor - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot-test-support - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - none - - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/pom.xml deleted file mode 100644 index a2af1b413cc..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-configuration-docs - Spring Boot Configuration Docs - Spring Boot Configuration Docs - - ${basedir}/../../.. - - - - org.springframework.boot - spring-boot-configuration-metadata - - - org.springframework.boot - spring-boot-test-support - test - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/package-info.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/package-info.java deleted file mode 100644 index 1c9c21ac81f..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-docs/src/main/java/org/springframework/boot/configurationdocs/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2019 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 generating documentation of configuration properties. - */ -package org.springframework.boot.configurationdocs; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata/build.gradle new file mode 100644 index 00000000000..6e651c7df65 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java-library' + id 'maven-publish' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Configuration Metadata' + +dependencies { + implementation enforcedPlatform(project(path: ":spring-boot-project:spring-boot-parent")) + implementation "com.vaadin.external.google:android-json" + + testImplementation "org.junit.jupiter:junit-jupiter" + testImplementation "org.assertj:assertj-core" + testImplementation "org.springframework:spring-core" +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata/pom.xml deleted file mode 100644 index 68862f4c88b..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-configuration-metadata - Spring Boot Configuration Metadata - Spring Boot Configuration Metadata - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - com.vaadin.external.google - android-json - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/build.gradle new file mode 100644 index 00000000000..c358dab7113 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/build.gradle @@ -0,0 +1,27 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' +} + +description = 'Spring Boot Configuration Annotation Processor' + +sourceSets { + main { + java { + srcDir file("src/json-shade/java") + } + } +} + +dependencies { + testImplementation enforcedPlatform(project(":spring-boot-project:spring-boot-dependencies")) + testImplementation project(":spring-boot-project:spring-boot-tools:spring-boot-test-support") + testImplementation "javax.validation:validation-api" + testImplementation "org.assertj:assertj-core" + testImplementation "org.hamcrest:hamcrest-library" + testImplementation "org.junit.jupiter:junit-jupiter" + testImplementation "org.mockito:mockito-core" + testImplementation "org.projectlombok:lombok" + testImplementation "org.springframework:spring-core" +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/pom.xml deleted file mode 100644 index 09c2e751120..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-configuration-processor - Spring Boot Configuration Processor - Spring Boot Configuration Processor - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.projectlombok - lombok - test - - - jakarta.validation - jakarta.validation-api - test - - - org.springframework.boot - spring-boot-test-support - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - none - - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-json-shade-source - generate-sources - - add-source - - - - ${basedir}/src/json-shade/java - - - - - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSON.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSON.java index f8876a599d5..f207c3912d1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSON.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSON.java @@ -102,24 +102,21 @@ class JSON { return null; } - public static JSONException typeMismatch(Object indexOrName, Object actual, - String requiredType) throws JSONException { + public static JSONException typeMismatch(Object indexOrName, Object actual, String requiredType) + throws JSONException { if (actual == null) { throw new JSONException("Value at " + indexOrName + " is null."); } - throw new JSONException("Value " + actual + " at " + indexOrName + " of type " - + actual.getClass().getName() + " cannot be converted to " - + requiredType); + throw new JSONException("Value " + actual + " at " + indexOrName + " of type " + actual.getClass().getName() + + " cannot be converted to " + requiredType); } - public static JSONException typeMismatch(Object actual, String requiredType) - throws JSONException { + public static JSONException typeMismatch(Object actual, String requiredType) throws JSONException { if (actual == null) { throw new JSONException("Value is null."); } - throw new JSONException( - "Value " + actual + " of type " + actual.getClass().getName() - + " cannot be converted to " + requiredType); + throw new JSONException("Value " + actual + " of type " + actual.getClass().getName() + + " cannot be converted to " + requiredType); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONArray.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONArray.java index 06d3a2c4b7d..ebd63c4be02 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONArray.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONArray.java @@ -127,7 +127,6 @@ public class JSONArray { /** * Appends {@code value} to the end of this array. - * * @param value the value * @return this array. */ @@ -138,7 +137,6 @@ public class JSONArray { /** * Appends {@code value} to the end of this array. - * * @param value a finite value. May not be {@link Double#isNaN() NaNs} or * {@link Double#isInfinite() infinities}. * @return this array. @@ -171,7 +169,6 @@ public class JSONArray { /** * Appends {@code value} to the end of this array. - * * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, * Long, Double, {@link JSONObject#NULL}, or {@code null}. May not be * {@link Double#isNaN() NaNs} or {@link Double#isInfinite() infinities}. Unsupported @@ -288,8 +285,7 @@ public class JSONArray { return value; } catch (IndexOutOfBoundsException e) { - throw new JSONException( - "Index " + index + " out of range [0.." + this.values.size() + ")"); + throw new JSONException("Index " + index + " out of range [0.." + this.values.size() + ")"); } } @@ -444,7 +440,6 @@ public class JSONArray { * a long. * @param index the index to get the value from * @return the {@code value} - * * @throws JSONException if the value at {@code index} doesn't exist or cannot be * coerced to a long. */ @@ -642,7 +637,6 @@ public class JSONArray { * 94043, * 90210 * ] - * * @param indentSpaces the number of spaces to indent for each level of nesting. * @return a human readable JSON string of this array * @throws JSONException if processing of json failed diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONObject.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONObject.java index e2377bec6d7..b7a34606bb6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONObject.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONObject.java @@ -41,11 +41,11 @@ import java.util.Map; *
  • When the requested type is an int, other {@link Number} types will be coerced using * {@link Number#intValue() intValue}. Strings that can be coerced using * {@link Double#valueOf(String)} will be, and then cast to int. - *
  • When the requested type is a long, other {@link Number} types will - * be coerced using {@link Number#longValue() longValue}. Strings that can be coerced - * using {@link Double#valueOf(String)} will be, and then cast to long. This two-step - * conversion is lossy for very large values. For example, the string - * "9223372036854775806" yields the long 9223372036854775807. + *
  • When the requested type is a long, other {@link Number} types will be + * coerced using {@link Number#longValue() longValue}. Strings that can be coerced using + * {@link Double#valueOf(String)} will be, and then cast to long. This two-step conversion + * is lossy for very large values. For example, the string "9223372036854775806" yields + * the long 9223372036854775807. *
  • When the requested type is a String, other non-null values will be coerced using * {@link String#valueOf(Object)}. Although null cannot be coerced, the sentinel value * {@link JSONObject#NULL} is coerced to the string "null". @@ -117,7 +117,6 @@ public class JSONObject { /** * Creates a new {@code JSONObject} by copying all name/value mappings from the given * map. - * * @param copyFrom a map whose keys are of type {@link String} and whose values are of * supported types. * @throws NullPointerException if any of the map's keys are null. @@ -334,7 +333,6 @@ public class JSONObject { /** * Removes the named mapping if it exists; does nothing otherwise. - * * @param name the name of the property * @return the value previously mapped by {@code name}, or null if there was no such * mapping. @@ -430,7 +428,6 @@ public class JSONObject { /** * Returns the value mapped by {@code name} if it exists and is a double or can be * coerced to a double. - * * @param name the name of the property * @return the value * @throws JSONException if the mapping doesn't exist or cannot be coerced to a @@ -690,8 +687,7 @@ public class JSONObject { * @return the array */ public JSONArray names() { - return this.nameValuePairs.isEmpty() ? null - : new JSONArray(new ArrayList<>(this.nameValuePairs.keySet())); + return this.nameValuePairs.isEmpty() ? null : new JSONArray(new ArrayList<>(this.nameValuePairs.keySet())); } /** @@ -823,9 +819,9 @@ public class JSONObject { if (o instanceof Map) { return new JSONObject((Map) o); } - if (o instanceof Boolean || o instanceof Byte || o instanceof Character - || o instanceof Double || o instanceof Float || o instanceof Integer - || o instanceof Long || o instanceof Short || o instanceof String) { + if (o instanceof Boolean || o instanceof Byte || o instanceof Character || o instanceof Double + || o instanceof Float || o instanceof Integer || o instanceof Long || o instanceof Short + || o instanceof String) { return o; } if (o.getClass().getPackage().getName().startsWith("java.")) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java index df2c8d7ec49..c3d73a970ac 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONStringer.java @@ -191,8 +191,7 @@ public class JSONStringer { * @return the JSON stringer * @throws JSONException if processing of json failed */ - JSONStringer close(Scope empty, Scope nonempty, String closeBracket) - throws JSONException { + JSONStringer close(Scope empty, Scope nonempty, String closeBracket) throws JSONException { Scope context = peek(); if (context != nonempty && context != empty) { throw new JSONException("Nesting problem"); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java index 6bc692e71ef..2a47e73e94a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/json-shade/java/org/springframework/boot/configurationprocessor/json/JSONTokener.java @@ -375,8 +375,8 @@ public class JSONTokener { throw syntaxError("Names cannot be null"); } else { - throw syntaxError("Names must be strings, but " + name - + " is of type " + name.getClass().getName()); + throw syntaxError( + "Names must be strings, but " + name + " is of type " + name.getClass().getName()); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle index 85454c1f9db..b5ca902545f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle @@ -1,71 +1,112 @@ -buildscript { - repositories { - mavenLocal() - mavenCentral() - } - dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.15") - } -} - plugins { - id 'java' - id 'eclipse' + id 'java-gradle-plugin' + id 'maven-publish' + id 'org.asciidoctor.jvm.convert' + id 'org.asciidoctor.jvm.pdf' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.maven-repository' + id 'org.springframework.boot.optional-dependencies' } -apply plugin: 'io.spring.javaformat' +description = 'Spring Boot Gradle Plugin' + +configurations { + asciidoctorExtensions + documentation +} repositories { - mavenLocal() - mavenCentral() + maven { + url 'https://repo.spring.io/release' + mavenContent { + includeGroup 'io.spring.asciidoctor' + } + } } dependencies { - implementation localGroovy() - implementation gradleApi() - implementation fileTree(dir: 'target/dependencies/compile', include: '*.jar') - testImplementation gradleTestKit() - testImplementation 'org.apache.commons:commons-compress:1.13' - testImplementation fileTree(dir: 'target/dependencies/test', include: '*.jar') + asciidoctorExtensions 'io.spring.asciidoctor:spring-asciidoctor-extensions-block-switch:0.3.0.RELEASE' + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools') + implementation 'io.spring.gradle:dependency-management-plugin' + implementation 'org.apache.commons:commons-compress' + implementation 'org.springframework:spring-core' + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + optional 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50' + + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.mockito:mockito-core' +} + +gradlePlugin { + plugins { + springBootPlugin { + id = 'org.springframework.boot' + implementationClass = 'org.springframework.boot.gradle.plugin.SpringBootPlugin' + } + } } jar { manifest { - attributes 'Implementation-Version': (version ? version : 'unknown') + attributes 'Implementation-Version': project.version } } -test { - useJUnitPlatform() - testLogging { - events "passed", "skipped", "failed" +task dependencyVersions(type: org.springframework.boot.build.constraints.ExtractVersionConstraints) { + enforcedPlatform(':spring-boot-project:spring-boot-dependencies') +} + +tasks.withType(org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask) { + dependsOn dependencyVersions + doFirst { + attributes 'dependency-management-plugin-version': dependencyVersions.versionConstraints['io.spring.gradle:dependency-management-plugin'] + } +} + +asciidoctor { + configurations 'asciidoctorExtensions' + sources { + include 'index.adoc' + } + attributes 'stylesheet': 'css/style.css' +} + +asciidoctorPdf { + sources { + include 'index.adoc' } } javadoc { options { - author() - stylesheetFile = file('src/main/javadoc/spring-javadoc.css') - links = [ - 'https://docs.oracle.com/javase/8/docs/api/', - 'https://docs.gradle.org/current/javadoc/' - ] - source = '8' + 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" } - title = "${project.description} $version API" } -task sourcesJar(type: Jar) { - classifier = 'sources' - from sourceSets.main.allSource -} - -task javadocJar(type: Jar) { - classifier = "javadoc" - from javadoc +task zip(type: Zip) { + dependsOn asciidoctor, asciidoctorPdf + duplicatesStrategy 'fail' + from(asciidoctorPdf.outputDir) { + into 'reference/pdf' + } + from(asciidoctor.outputDir) { + into 'reference/html' + } + from(javadoc) { + into 'api' + } } artifacts { - archives sourcesJar - archives javadocJar + 'documentation' zip } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle.properties b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle.properties deleted file mode 100644 index 6b1823d86a6..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -org.gradle.daemon=false diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle/wrapper/gradle-wrapper.jar b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 13536770052936a92b204cc34e72284a03a6903c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56177 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 i;x|p)^~-yfPOPa3(|vBayXKz - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-gradle-plugin - pom - Spring Boot Gradle Plugin - Spring Boot Gradle Plugin - - ${basedir}/../../.. - ./gradlew - build - ${project.build.directory}/refdocs/ - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - org.springframework.boot - spring-boot-loader-tools - - - io.spring.gradle - dependency-management-plugin - - - org.apache.commons - commons-compress - - - org.jetbrains.kotlin - kotlin-gradle-plugin - ${kotlin.version} - true - - - - - - com.googlecode.maven-download-plugin - download-maven-plugin - - - unpack-doc-resources - generate-resources - - wget - - - ${spring-doc-resources.url} - true - ${refdocs.build.directory}/asciidoc - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-compile-dependencies - generate-resources - - copy-dependencies - - false - - compile - ${project.build.directory}/dependencies/compile - - - - copy-test-dependencies - generate-resources - - copy-dependencies - - false - - test - ${project.build.directory}/dependencies/test - - - - - - org.apache.maven.plugins - maven-resources-plugin - - - copy-asciidoc-resources - generate-resources - - copy-resources - - - ${refdocs.build.directory}/asciidoc - - - src/main/asciidoc - false - - - - - - copy-gradle-resources - generate-resources - - copy-resources - - - ${refdocs.build.directory}/gradle - - - src/main/gradle - false - - - - - - - - org.codehaus.mojo - exec-maven-plugin - - - gradle - prepare-package - - ${gradle.executable} - - clean - ${gradle.task} - -Pversion=${project.version} - -Pdescription=${project.description} - -S - - - - exec - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-artifacts - package - - attach-artifact - - - - - build/libs/${project.artifactId}-${project.version}.jar - jar - - - build/libs/${project.artifactId}-${project.version}-javadoc.jar - jar - javadoc - - - build/libs/${project.artifactId}-${project.version}-sources.jar - jar - sources - - - - - - - - - - - windows - - - windows - - - - gradlew.bat - - - - skipTests - - - skipTests - true - - - - assemble - - - - full - - - full - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - ant-contrib - ant-contrib - 1.0b3 - - - ant - ant - - - - - org.apache.ant - ant-nodeps - 1.8.1 - - - org.tigris.antelope - antelopetasks - 3.2.10 - - - - - set-up-maven-properties - prepare-package - - run - - - true - - - - - - - - - - - - - - - package-docs-zip - package - - run - - - - - - - - - - - - - - - - - - org.asciidoctor - asciidoctor-maven-plugin - - - generate-html-documentation - prepare-package - - process-asciidoc - - - html5 - ${project.build.directory}/generated-docs/reference/html - highlight.js - book - - js/highlight - github - true - ./images - font - css/ - style.css - warn - - - true - - DEBUG - - - - - - generate-pdf-documentation - prepare-package - - process-asciidoc - - - pdf - ${project.build.directory}/generated-docs/reference/pdf - - - - - ${refdocs.build.directory}/asciidoc - index.adoc - - ${github-tag} - ${version-type} - ${project.version} - ${dependency-management-plugin.version} - - - - - io.spring.asciidoctor - spring-asciidoctor-extensions-block-switch - ${spring-asciidoctor-extensions.version} - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-zip - - attach-artifact - - - - - ${project.build.directory}/${project.artifactId}-${project.version}-docs.zip - zip - docs - - - - - - - - - - - java13 - - 13 - - - assemble - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/css/style.css b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/css/style.css similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/css/style.css rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/css/style.css diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/getting-started.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/getting-started.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/getting-started.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/getting-started.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/index.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/index.adoc similarity index 96% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/index.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/index.adoc index c13bb7fdc08..efe4d2e371e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/index.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/index.adoc @@ -22,7 +22,7 @@ Andy Wilkinson :maven-publish-plugin: {gradle-userguide}/maven_publish_plugin.html :software-component: {gradle-userguide}/software_model_extend.html :kotlin-plugin: https://kotlinlang.org/docs/reference/using-gradle.html -:spring-boot-docs: https://docs.spring.io/spring-boot/docs/{version} +:spring-boot-docs: https://docs.spring.io/spring-boot/docs/{gradle-project-version} :api-documentation: {spring-boot-docs}/gradle-plugin/api :spring-boot-reference: {spring-boot-docs}/reference/htmlsingle :build-info-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.html diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/integrating-with-actuator.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/integrating-with-actuator.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/integrating-with-actuator.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/integrating-with-actuator.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/managing-dependencies.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/managing-dependencies.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/managing-dependencies.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/managing-dependencies.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/packaging.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/packaging.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/packaging.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/packaging.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/publishing.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/publishing.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/publishing.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/publishing.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/reacting.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/reacting.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/running.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/running.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/running.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/asciidoc/running.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/apply-plugin-release.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/apply-plugin-release.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/apply-plugin-release.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/apply-plugin-release.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/apply-plugin-release.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/apply-plugin-release.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/apply-plugin-release.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/apply-plugin-release.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/apply-plugin-snapshot.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/apply-plugin-snapshot.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/apply-plugin-snapshot.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/apply-plugin-snapshot.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/milestone-settings.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/milestone-settings.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/milestone-settings.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/milestone-settings.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/milestone-settings.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/milestone-settings.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/milestone-settings.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/milestone-settings.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/snapshot-settings.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/snapshot-settings.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/snapshot-settings.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/snapshot-settings.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/snapshot-settings.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/snapshot-settings.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/snapshot-settings.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/snapshot-settings.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/typical-plugins.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/typical-plugins.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/typical-plugins.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/typical-plugins.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/typical-plugins.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/typical-plugins.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/getting-started/typical-plugins.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/getting-started/typical-plugins.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-additional.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-additional.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-additional.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-additional.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-additional.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-additional.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-additional.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-additional.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-basic.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-basic.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-basic.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-basic.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-basic.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-basic.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-basic.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-basic.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-custom-values.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-custom-values.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-custom-values.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-custom-values.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/integrating-with-actuator/build-info-custom-values.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/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/main/gradle/integrating-with-actuator/build-info-custom-values.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/integrating-with-actuator/build-info-custom-values.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/configure-bom-with-plugins.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/configure-bom-with-plugins.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/configure-bom-with-plugins.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/configure-bom-with-plugins.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/configure-bom.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/configure-bom.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/configure-bom.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/configure-bom.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/configure-bom.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/configure-bom.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/configure-bom.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/configure-bom.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/custom-version.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/custom-version.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/custom-version.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/custom-version.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/custom-version.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/custom-version.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/custom-version.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/custom-version.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/depend-on-plugin-milestone.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/depend-on-plugin-milestone.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/depend-on-plugin-milestone.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/depend-on-plugin-milestone.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/depend-on-plugin-release.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/depend-on-plugin-release.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/depend-on-plugin-release.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/depend-on-plugin-release.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/depend-on-plugin-release.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/depend-on-plugin-release.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/depend-on-plugin-release.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/depend-on-plugin-release.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/depend-on-plugin-snapshot.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/depend-on-plugin-snapshot.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/depend-on-plugin-snapshot.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/depend-on-plugin-snapshot.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/dependencies.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/dependencies.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/dependencies.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/dependencies.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/dependencies.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/dependencies.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/managing-dependencies/dependencies.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/managing-dependencies/dependencies.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/application-plugin-main-class.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/application-plugin-main-class.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/application-plugin-main-class.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/application-plugin-main-class.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/application-plugin-main-class.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/application-plugin-main-class.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/application-plugin-main-class.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/application-plugin-main-class.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-and-jar.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-and-jar.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-and-jar.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-and-jar.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-and-jar.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-and-jar.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-and-jar.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-and-jar.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-custom-launch-script.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-custom-launch-script.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-custom-launch-script.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-custom-launch-script.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-custom-launch-script.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-custom-launch-script.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-custom-launch-script.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-custom-launch-script.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-include-launch-script.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-include-launch-script.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-include-launch-script.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-include-launch-script.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-include-launch-script.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-include-launch-script.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-include-launch-script.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-include-launch-script.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-launch-script-properties.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-launch-script-properties.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-launch-script-properties.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-launch-script-properties.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-launch-script-properties.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-launch-script-properties.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-launch-script-properties.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-launch-script-properties.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-main-class.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-main-class.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-main-class.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-main-class.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-main-class.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-main-class.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-main-class.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-main-class.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-manifest-main-class.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-manifest-main-class.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-manifest-main-class.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-manifest-main-class.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-manifest-main-class.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-manifest-main-class.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-manifest-main-class.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-manifest-main-class.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-requires-unpack.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-requires-unpack.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-requires-unpack.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-requires-unpack.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-requires-unpack.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-requires-unpack.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-jar-requires-unpack.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-jar-requires-unpack.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-war-include-devtools.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-war-include-devtools.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-war-include-devtools.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-war-include-devtools.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-war-include-devtools.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-war-include-devtools.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-war-include-devtools.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-war-include-devtools.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-war-properties-launcher.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-war-properties-launcher.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-war-properties-launcher.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-war-properties-launcher.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-war-properties-launcher.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-war-properties-launcher.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/boot-war-properties-launcher.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/boot-war-properties-launcher.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/spring-boot-dsl-main-class.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/spring-boot-dsl-main-class.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/spring-boot-dsl-main-class.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/spring-boot-dsl-main-class.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/spring-boot-dsl-main-class.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/spring-boot-dsl-main-class.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/spring-boot-dsl-main-class.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/spring-boot-dsl-main-class.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/war-container-dependency.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/war-container-dependency.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/war-container-dependency.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/war-container-dependency.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/war-container-dependency.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/war-container-dependency.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/packaging/war-container-dependency.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/packaging/war-container-dependency.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/publishing/maven-publish.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/publishing/maven-publish.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/publishing/maven-publish.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/publishing/maven-publish.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/publishing/maven-publish.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/publishing/maven-publish.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/publishing/maven-publish.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/publishing/maven-publish.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/publishing/maven.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/publishing/maven.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/publishing/maven.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/publishing/maven.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/publishing/maven.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/publishing/maven.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/publishing/maven.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/publishing/maven.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/application-plugin-main-class-name.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/application-plugin-main-class-name.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/application-plugin-main-class-name.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/application-plugin-main-class-name.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/application-plugin-main-class-name.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/application-plugin-main-class-name.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/application-plugin-main-class-name.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/application-plugin-main-class-name.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-disable-optimized-launch.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-disable-optimized-launch.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-disable-optimized-launch.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-disable-optimized-launch.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-disable-optimized-launch.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-disable-optimized-launch.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-disable-optimized-launch.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-disable-optimized-launch.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-main.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-main.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-main.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-main.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-main.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-main.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-main.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-main.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-source-resources.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-source-resources.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-source-resources.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-source-resources.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-source-resources.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-source-resources.gradle.kts similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/boot-run-source-resources.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/boot-run-source-resources.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/spring-boot-dsl-main-class-name.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/spring-boot-dsl-main-class-name.gradle similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/spring-boot-dsl-main-class-name.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/spring-boot-dsl-main-class-name.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/gradle/running/spring-boot-dsl-main-class-name.gradle.kts b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/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/main/gradle/running/spring-boot-dsl-main-class-name.gradle.kts rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/docs/gradle/running/spring-boot-dsl-main-class-name.gradle.kts diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.springframework.boot.properties b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.springframework.boot.properties deleted file mode 100644 index 730938f5c3b..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.springframework.boot.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-class=org.springframework.boot.gradle.plugin.SpringBootPlugin diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/GettingStartedDocumentationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/GettingStartedDocumentationTests.java index 1d52c421af3..2176bc64f3e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/GettingStartedDocumentationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/GettingStartedDocumentationTests.java @@ -38,7 +38,7 @@ class GettingStartedDocumentationTests { @TestTemplate void typicalPluginsAppliesExceptedPlugins() { - this.gradleBuild.script("src/main/gradle/getting-started/typical-plugins").build("verify"); + this.gradleBuild.script("src/docs/gradle/getting-started/typical-plugins").build("verify"); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/IntegratingWithActuatorDocumentationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/IntegratingWithActuatorDocumentationTests.java index 02579592db2..a11e84eb071 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/IntegratingWithActuatorDocumentationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/IntegratingWithActuatorDocumentationTests.java @@ -42,14 +42,14 @@ class IntegratingWithActuatorDocumentationTests { @TestTemplate void basicBuildInfo() throws IOException { - this.gradleBuild.script("src/main/gradle/integrating-with-actuator/build-info-basic").build("bootBuildInfo"); + this.gradleBuild.script("src/docs/gradle/integrating-with-actuator/build-info-basic").build("bootBuildInfo"); assertThat(new File(this.gradleBuild.getProjectDir(), "build/resources/main/META-INF/build-info.properties")) .isFile(); } @TestTemplate void buildInfoCustomValues() throws IOException { - this.gradleBuild.script("src/main/gradle/integrating-with-actuator/build-info-custom-values") + this.gradleBuild.script("src/docs/gradle/integrating-with-actuator/build-info-custom-values") .build("bootBuildInfo"); File file = new File(this.gradleBuild.getProjectDir(), "build/resources/main/META-INF/build-info.properties"); assertThat(file).isFile(); @@ -62,7 +62,7 @@ class IntegratingWithActuatorDocumentationTests { @TestTemplate void buildInfoAdditional() throws IOException { - this.gradleBuild.script("src/main/gradle/integrating-with-actuator/build-info-additional") + this.gradleBuild.script("src/docs/gradle/integrating-with-actuator/build-info-additional") .build("bootBuildInfo"); File file = new File(this.gradleBuild.getProjectDir(), "build/resources/main/META-INF/build-info.properties"); assertThat(file).isFile(); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/ManagingDependenciesDocumentationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/ManagingDependenciesDocumentationTests.java index 91d43545c57..1b75a2ac625 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/ManagingDependenciesDocumentationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/ManagingDependenciesDocumentationTests.java @@ -39,18 +39,18 @@ class ManagingDependenciesDocumentationTests { @TestTemplate void dependenciesExampleEvaluatesSuccessfully() { - this.gradleBuild.script("src/main/gradle/managing-dependencies/dependencies").build(); + this.gradleBuild.script("src/docs/gradle/managing-dependencies/dependencies").build(); } @TestTemplate void customManagedVersions() { - assertThat(this.gradleBuild.script("src/main/gradle/managing-dependencies/custom-version").build("slf4jVersion") + assertThat(this.gradleBuild.script("src/docs/gradle/managing-dependencies/custom-version").build("slf4jVersion") .getOutput()).contains("1.7.20"); } @TestTemplate void dependencyManagementInIsolation() { - assertThat(this.gradleBuild.script("src/main/gradle/managing-dependencies/configure-bom") + assertThat(this.gradleBuild.script("src/docs/gradle/managing-dependencies/configure-bom") .build("dependencyManagement").getOutput()).contains("org.springframework.boot:spring-boot-starter "); } @@ -58,7 +58,7 @@ class ManagingDependenciesDocumentationTests { void dependencyManagementInIsolationWithPluginsBlock() { assumingThat(this.gradleBuild.getDsl() == Dsl.KOTLIN, () -> assertThat( - this.gradleBuild.script("src/main/gradle/managing-dependencies/configure-bom-with-plugins") + this.gradleBuild.script("src/docs/gradle/managing-dependencies/configure-bom-with-plugins") .build("dependencyManagement").getOutput()) .contains("org.springframework.boot:spring-boot-starter TEST-SNAPSHOT")); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java index badd5127456..5f06a97597f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PackagingDocumentationTests.java @@ -49,12 +49,12 @@ class PackagingDocumentationTests { @TestTemplate void warContainerDependencyEvaluatesSuccessfully() { - this.gradleBuild.script("src/main/gradle/packaging/war-container-dependency").build(); + this.gradleBuild.script("src/docs/gradle/packaging/war-container-dependency").build(); } @TestTemplate void bootJarMainClass() throws IOException { - this.gradleBuild.script("src/main/gradle/packaging/boot-jar-main-class").build("bootJar"); + this.gradleBuild.script("src/docs/gradle/packaging/boot-jar-main-class").build("bootJar"); File file = new File(this.gradleBuild.getProjectDir(), "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); assertThat(file).isFile(); @@ -66,7 +66,7 @@ class PackagingDocumentationTests { @TestTemplate void bootJarManifestMainClass() throws IOException { - this.gradleBuild.script("src/main/gradle/packaging/boot-jar-manifest-main-class").build("bootJar"); + this.gradleBuild.script("src/docs/gradle/packaging/boot-jar-manifest-main-class").build("bootJar"); File file = new File(this.gradleBuild.getProjectDir(), "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); assertThat(file).isFile(); @@ -78,7 +78,7 @@ class PackagingDocumentationTests { @TestTemplate void applicationPluginMainClass() throws IOException { - this.gradleBuild.script("src/main/gradle/packaging/application-plugin-main-class").build("bootJar"); + this.gradleBuild.script("src/docs/gradle/packaging/application-plugin-main-class").build("bootJar"); File file = new File(this.gradleBuild.getProjectDir(), "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); assertThat(file).isFile(); @@ -90,7 +90,7 @@ class PackagingDocumentationTests { @TestTemplate void springBootDslMainClass() throws IOException { - this.gradleBuild.script("src/main/gradle/packaging/spring-boot-dsl-main-class").build("bootJar"); + this.gradleBuild.script("src/docs/gradle/packaging/spring-boot-dsl-main-class").build("bootJar"); File file = new File(this.gradleBuild.getProjectDir(), "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); assertThat(file).isFile(); @@ -103,7 +103,7 @@ class PackagingDocumentationTests { @TestTemplate void bootWarIncludeDevtools() throws IOException { jarFile(new File(this.gradleBuild.getProjectDir(), "spring-boot-devtools-1.2.3.RELEASE.jar")); - this.gradleBuild.script("src/main/gradle/packaging/boot-war-include-devtools").build("bootWar"); + this.gradleBuild.script("src/docs/gradle/packaging/boot-war-include-devtools").build("bootWar"); File file = new File(this.gradleBuild.getProjectDir(), "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".war"); assertThat(file).isFile(); @@ -114,7 +114,7 @@ class PackagingDocumentationTests { @TestTemplate void bootJarRequiresUnpack() throws IOException { - this.gradleBuild.script("src/main/gradle/packaging/boot-jar-requires-unpack").build("bootJar"); + this.gradleBuild.script("src/docs/gradle/packaging/boot-jar-requires-unpack").build("bootJar"); File file = new File(this.gradleBuild.getProjectDir(), "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); assertThat(file).isFile(); @@ -127,7 +127,7 @@ class PackagingDocumentationTests { @TestTemplate void bootJarIncludeLaunchScript() throws IOException { - this.gradleBuild.script("src/main/gradle/packaging/boot-jar-include-launch-script").build("bootJar"); + this.gradleBuild.script("src/docs/gradle/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(); @@ -136,7 +136,7 @@ class PackagingDocumentationTests { @TestTemplate void bootJarLaunchScriptProperties() throws IOException { - this.gradleBuild.script("src/main/gradle/packaging/boot-jar-launch-script-properties").build("bootJar"); + this.gradleBuild.script("src/docs/gradle/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(); @@ -148,7 +148,7 @@ class PackagingDocumentationTests { File customScriptFile = new File(this.gradleBuild.getProjectDir(), "src/custom.script"); customScriptFile.getParentFile().mkdirs(); FileCopyUtils.copy("custom", new FileWriter(customScriptFile)); - this.gradleBuild.script("src/main/gradle/packaging/boot-jar-custom-launch-script").build("bootJar"); + this.gradleBuild.script("src/docs/gradle/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(); @@ -157,7 +157,7 @@ class PackagingDocumentationTests { @TestTemplate void bootWarPropertiesLauncher() throws IOException { - this.gradleBuild.script("src/main/gradle/packaging/boot-war-properties-launcher").build("bootWar"); + this.gradleBuild.script("src/docs/gradle/packaging/boot-war-properties-launcher").build("bootWar"); File file = new File(this.gradleBuild.getProjectDir(), "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".war"); assertThat(file).isFile(); @@ -169,7 +169,7 @@ class PackagingDocumentationTests { @TestTemplate void bootJarAndJar() { - this.gradleBuild.script("src/main/gradle/packaging/boot-jar-and-jar").build("assemble"); + this.gradleBuild.script("src/docs/gradle/packaging/boot-jar-and-jar").build("assemble"); File jar = new File(this.gradleBuild.getProjectDir(), "build/libs/" + this.gradleBuild.getProjectDir().getName() + ".jar"); assertThat(jar).isFile(); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PublishingDocumentationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PublishingDocumentationTests.java index 0e3fd00c291..f1d4bb2014a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PublishingDocumentationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/PublishingDocumentationTests.java @@ -39,13 +39,13 @@ class PublishingDocumentationTests { @TestTemplate void mavenUpload() throws IOException { - assertThat(this.gradleBuild.script("src/main/gradle/publishing/maven").build("deployerRepository").getOutput()) + assertThat(this.gradleBuild.script("src/docs/gradle/publishing/maven").build("deployerRepository").getOutput()) .contains("https://repo.example.com"); } @TestTemplate void mavenPublish() throws IOException { - assertThat(this.gradleBuild.script("src/main/gradle/publishing/maven-publish").build("publishingConfiguration") + assertThat(this.gradleBuild.script("src/docs/gradle/publishing/maven-publish").build("publishingConfiguration") .getOutput()).contains("MavenPublication").contains("https://repo.example.com"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/RunningDocumentationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/RunningDocumentationTests.java index cad05fca05f..cf666000e73 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/RunningDocumentationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/RunningDocumentationTests.java @@ -20,6 +20,8 @@ import java.io.File; import java.io.IOException; import org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.condition.DisabledOnJre; +import org.junit.jupiter.api.condition.JRE; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.gradle.junit.GradleMultiDslExtension; @@ -39,32 +41,35 @@ class RunningDocumentationTests { GradleBuild gradleBuild; @TestTemplate + @DisabledOnJre(JRE.JAVA_13) void bootRunMain() throws IOException { - assertThat(this.gradleBuild.script("src/main/gradle/running/boot-run-main").build("configuredMainClass") - .getOutput()).contains("com.example.ExampleApplication"); + // TODO Testing of convention mappings is flakey in 5.2+ + // https://github.com/gradle/gradle/issues/11323 + assertThat(this.gradleBuild.gradleVersion("5.1.1").script("src/docs/gradle/running/boot-run-main") + .build("configuredMainClass").getOutput()).contains("com.example.ExampleApplication"); } @TestTemplate void applicationPluginMainClassName() { - assertThat(this.gradleBuild.script("src/main/gradle/running/application-plugin-main-class-name") + assertThat(this.gradleBuild.script("src/docs/gradle/running/application-plugin-main-class-name") .build("configuredMainClass").getOutput()).contains("com.example.ExampleApplication"); } @TestTemplate void springBootDslMainClassName() throws IOException { - assertThat(this.gradleBuild.script("src/main/gradle/running/spring-boot-dsl-main-class-name") + assertThat(this.gradleBuild.script("src/docs/gradle/running/spring-boot-dsl-main-class-name") .build("configuredMainClass").getOutput()).contains("com.example.ExampleApplication"); } @TestTemplate void bootRunSourceResources() throws IOException { - assertThat(this.gradleBuild.script("src/main/gradle/running/boot-run-source-resources") + assertThat(this.gradleBuild.script("src/docs/gradle/running/boot-run-source-resources") .build("configuredClasspath").getOutput()).contains(new File("src/main/resources").getPath()); } @TestTemplate void bootRunDisableOptimizedLaunch() throws IOException { - assertThat(this.gradleBuild.script("src/main/gradle/running/boot-run-disable-optimized-launch") + assertThat(this.gradleBuild.script("src/docs/gradle/running/boot-run-disable-optimized-launch") .build("optimizedLaunch").getOutput()).contains("false"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java index 3ad999ec128..8d84f1dc6fa 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java @@ -17,9 +17,11 @@ package org.springframework.boot.gradle.junit; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Stream; +import org.gradle.api.JavaVersion; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.extension.Extension; import org.junit.jupiter.api.extension.ExtensionContext; @@ -38,8 +40,17 @@ import org.springframework.boot.gradle.testkit.GradleBuildExtension; */ public final class GradleCompatibilityExtension implements TestTemplateInvocationContextProvider { - private static final List GRADLE_VERSIONS = Arrays.asList("default", "5.0", "5.1.1", "5.2.1", "5.3.1", - "5.4.1", "5.5.1", "5.6.4", "6.0.1"); + private static final List GRADLE_VERSIONS; + + static { + if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_13)) { + GRADLE_VERSIONS = Collections.singletonList("default"); + } + else { + GRADLE_VERSIONS = Arrays.asList("4.10.3", "5.0", "5.1.1", "5.2.1", "5.3.1", "5.4.1", "5.5.1", "5.6.4", + "default"); + } + } @Override public Stream provideTestTemplateInvocationContexts(ExtensionContext context) { 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/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java index 9b2ecd048cc..0735d55ded5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveTests.java @@ -99,8 +99,7 @@ abstract class AbstractBootArchiveTests { void basicArchiveCreation() throws IOException { this.task.setMainClassName("com.example.Main"); executeTask(); - assertThat(this.task.getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getManifest().getMainAttributes().getValue("Main-Class")).isEqualTo(this.launcherClass); assertThat(jarFile.getManifest().getMainAttributes().getValue("Start-Class")).isEqualTo("com.example.Main"); assertThat(jarFile.getManifest().getMainAttributes().getValue("Spring-Boot-Classes")) @@ -115,7 +114,7 @@ abstract class AbstractBootArchiveTests { this.task.setMainClassName("com.example.Main"); this.task.classpath(jarFile("one.jar"), jarFile("two.jar")); executeTask(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry(this.libPath + "one.jar")).isNotNull(); assertThat(jarFile.getEntry(this.libPath + "two.jar")).isNotNull(); } @@ -130,7 +129,7 @@ abstract class AbstractBootArchiveTests { applicationClass.createNewFile(); this.task.classpath(classpathFolder); executeTask(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry(this.classesPath + "com/example/Application.class")).isNotNull(); } } @@ -146,8 +145,8 @@ abstract class AbstractBootArchiveTests { applicationClass.getParentFile().mkdirs(); applicationClass.createNewFile(); this.task.classpath(classpathFolder); - this.task.execute(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + executeTask(); + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry(this.classesPath + "com/example/Application.class")).isNotNull(); assertThat(jarFile.getEntry("com/example/Application.class")).isNull(); assertThat(jarFile.getEntry("module-info.class")).isNotNull(); @@ -161,7 +160,7 @@ abstract class AbstractBootArchiveTests { this.task.classpath(jarFile("one.jar")); this.task.setClasspath(this.task.getProject().files(jarFile("two.jar"))); executeTask(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry(this.libPath + "one.jar")).isNull(); assertThat(jarFile.getEntry(this.libPath + "two.jar")).isNotNull(); } @@ -173,7 +172,7 @@ abstract class AbstractBootArchiveTests { this.task.classpath(jarFile("one.jar")); this.task.setClasspath(jarFile("two.jar")); executeTask(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry(this.libPath + "one.jar")).isNull(); assertThat(jarFile.getEntry(this.libPath + "two.jar")).isNotNull(); } @@ -183,8 +182,8 @@ abstract class AbstractBootArchiveTests { void filesOnTheClasspathThatAreNotZipFilesAreSkipped() throws IOException { this.task.setMainClassName("com.example.Main"); this.task.classpath(new File("test.pom")); - this.task.execute(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + executeTask(); + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry(this.libPath + "/test.pom")).isNull(); } } @@ -193,12 +192,13 @@ abstract class AbstractBootArchiveTests { void loaderIsWrittenToTheRootOfTheJarAfterManifest() throws IOException { this.task.setMainClassName("com.example.Main"); executeTask(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + 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(); } // gh-16698 - try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(this.task.getArchivePath()))) { + try (ZipInputStream zipInputStream = new ZipInputStream( + new FileInputStream(this.task.getArchiveFile().get().getAsFile()))) { assertThat(zipInputStream.getNextEntry().getName()).isEqualTo("META-INF/"); assertThat(zipInputStream.getNextEntry().getName()).isEqualTo("META-INF/MANIFEST.MF"); } @@ -209,7 +209,7 @@ abstract class AbstractBootArchiveTests { this.task.setMainClassName("com.example.Main"); executeTask(); this.task.getManifest().getAttributes().put("Main-Class", "org.springframework.boot.loader.PropertiesLauncher"); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + 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(); } @@ -221,7 +221,7 @@ abstract class AbstractBootArchiveTests { this.task.classpath(jarFile("one.jar"), jarFile("two.jar")); this.task.requiresUnpack("**/one.jar"); executeTask(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + 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 + "two.jar").getComment()).isNull(); } @@ -233,7 +233,7 @@ abstract class AbstractBootArchiveTests { this.task.classpath(jarFile("one.jar"), jarFile("two.jar")); this.task.requiresUnpack((element) -> element.getName().endsWith("two.jar")); executeTask(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + 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 + "one.jar").getComment()).isNull(); } @@ -245,13 +245,14 @@ abstract class AbstractBootArchiveTests { this.task.launchScript(); executeTask(); Map properties = new HashMap<>(); - properties.put("initInfoProvides", this.task.getBaseName()); + properties.put("initInfoProvides", this.task.getArchiveBaseName().get()); properties.put("initInfoShortDescription", this.project.getDescription()); properties.put("initInfoDescription", this.project.getDescription()); - assertThat(Files.readAllBytes(this.task.getArchivePath().toPath())) + assertThat(Files.readAllBytes(this.task.getArchiveFile().get().getAsFile().toPath())) .startsWith(new DefaultLaunchScript(null, properties).toByteArray()); try { - Set permissions = Files.getPosixFilePermissions(this.task.getArchivePath().toPath()); + Set permissions = Files + .getPosixFilePermissions(this.task.getArchiveFile().get().getAsFile().toPath()); assertThat(permissions).contains(PosixFilePermission.OWNER_EXECUTE); } catch (UnsupportedOperationException ex) { @@ -266,7 +267,8 @@ abstract class AbstractBootArchiveTests { Files.write(customScript.toPath(), Arrays.asList("custom script"), StandardOpenOption.CREATE); this.task.launchScript((configuration) -> configuration.setScript(customScript)); executeTask(); - assertThat(Files.readAllBytes(this.task.getArchivePath().toPath())).startsWith("custom script".getBytes()); + assertThat(Files.readAllBytes(this.task.getArchiveFile().get().getAsFile().toPath())) + .startsWith("custom script".getBytes()); } @Test @@ -278,7 +280,7 @@ abstract class AbstractBootArchiveTests { configuration.getProperties().put("initInfoDescription", "description"); }); executeTask(); - byte[] bytes = Files.readAllBytes(this.task.getArchivePath().toPath()); + byte[] bytes = Files.readAllBytes(this.task.getArchiveFile().get().getAsFile().toPath()); assertThat(bytes).containsSequence("Provides: provides".getBytes()); assertThat(bytes).containsSequence("Short-Description: short description".getBytes()); assertThat(bytes).containsSequence("Description: description".getBytes()); @@ -289,8 +291,8 @@ abstract class AbstractBootArchiveTests { this.task.setMainClassName("com.example.Main"); this.task.getManifest().getAttributes().put("Main-Class", "com.example.CustomLauncher"); executeTask(); - assertThat(this.task.getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + assertThat(this.task.getArchiveFile().get().getAsFile()).exists(); + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getManifest().getMainAttributes().getValue("Main-Class")) .isEqualTo("com.example.CustomLauncher"); assertThat(jarFile.getManifest().getMainAttributes().getValue("Start-Class")).isEqualTo("com.example.Main"); @@ -303,8 +305,8 @@ abstract class AbstractBootArchiveTests { this.task.setMainClassName("com.example.Main"); this.task.getManifest().getAttributes().put("Start-Class", "com.example.CustomMain"); executeTask(); - assertThat(this.task.getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + assertThat(this.task.getArchiveFile().get().getAsFile()).exists(); + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getManifest().getMainAttributes().getValue("Main-Class")).isEqualTo(this.launcherClass); assertThat(jarFile.getManifest().getMainAttributes().getValue("Start-Class")) .isEqualTo("com.example.CustomMain"); @@ -316,8 +318,8 @@ abstract class AbstractBootArchiveTests { this.task.setMainClassName("com.example.Main"); this.task.setPreserveFileTimestamps(false); executeTask(); - assertThat(this.task.getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + 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(); @@ -332,9 +334,9 @@ abstract class AbstractBootArchiveTests { this.task.from(newFile("bravo.txt"), newFile("alpha.txt"), newFile("charlie.txt")); this.task.setReproducibleFileOrder(true); executeTask(); - assertThat(this.task.getArchivePath()).exists(); + assertThat(this.task.getArchiveFile().get().getAsFile()).exists(); List textFiles = new ArrayList<>(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { Enumeration entries = jarFile.entries(); while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); @@ -351,8 +353,8 @@ abstract class AbstractBootArchiveTests { this.task.setMainClassName("com.example.Main"); this.task.classpath(newFile("spring-boot-devtools-0.1.2.jar")); executeTask(); - assertThat(this.task.getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + assertThat(this.task.getArchiveFile().get().getAsFile()).exists(); + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry(this.libPath + "spring-boot-devtools-0.1.2.jar")).isNull(); } } @@ -363,8 +365,8 @@ abstract class AbstractBootArchiveTests { this.task.classpath(jarFile("spring-boot-devtools-0.1.2.jar")); this.task.setExcludeDevtools(false); executeTask(); - assertThat(this.task.getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(this.task.getArchivePath())) { + assertThat(this.task.getArchiveFile().get().getAsFile()).exists(); + try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry(this.libPath + "spring-boot-devtools-0.1.2.jar")).isNotNull(); } } @@ -379,7 +381,7 @@ abstract class AbstractBootArchiveTests { resource.createNewFile(); this.task.classpath(classpathFolder); executeTask(); - File archivePath = this.task.getArchivePath(); + File archivePath = this.task.getArchiveFile().get().getAsFile(); try (ZipFile zip = new ZipFile(archivePath)) { Enumeration entries = zip.getEntries(); while (entries.hasMoreElements()) { @@ -401,9 +403,10 @@ abstract class AbstractBootArchiveTests { jarFile("third-library.jar")); this.task.requiresUnpack("second-library.jar"); executeTask(); - assertThat(getEntryNames(this.task.getArchivePath())).containsSubsequence("org/springframework/boot/loader/", - this.classesPath + "com/example/Application.class", this.libPath + "first-library.jar", - this.libPath + "second-library.jar", this.libPath + "third-library.jar"); + assertThat(getEntryNames(this.task.getArchiveFile().get().getAsFile())).containsSubsequence( + "org/springframework/boot/loader/", this.classesPath + "com/example/Application.class", + this.libPath + "first-library.jar", this.libPath + "second-library.jar", + this.libPath + "third-library.jar"); } protected File jarFile(String name) throws IOException { @@ -418,10 +421,10 @@ abstract class AbstractBootArchiveTests { private T configure(T task) throws IOException { AbstractArchiveTask archiveTask = task; - archiveTask.setBaseName("test"); + archiveTask.getArchiveBaseName().set("test"); File destination = new File(this.temp, "destination"); destination.mkdirs(); - archiveTask.setDestinationDir(destination); + archiveTask.getDestinationDirectory().set(destination); return task; } 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/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarTests.java index 5fae9e8d133..141c992dca2 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarTests.java @@ -41,7 +41,7 @@ class BootJarTests extends AbstractBootArchiveTests { bootJar.setMainClassName("com.example.Application"); bootJar.getBootInf().into("test").from(new File("build.gradle").getAbsolutePath()); bootJar.copy(); - try (JarFile jarFile = new JarFile(bootJar.getArchivePath())) { + try (JarFile jarFile = new JarFile(bootJar.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getJarEntry("BOOT-INF/test/build.gradle")).isNotNull(); } } @@ -52,7 +52,7 @@ class BootJarTests extends AbstractBootArchiveTests { bootJar.setMainClassName("com.example.Application"); bootJar.bootInf((copySpec) -> copySpec.into("test").from(new File("build.gradle").getAbsolutePath())); bootJar.copy(); - try (JarFile jarFile = new JarFile(bootJar.getArchivePath())) { + try (JarFile jarFile = new JarFile(bootJar.getArchiveFile().get().getAsFile())) { assertThat(jarFile.getJarEntry("BOOT-INF/test/build.gradle")).isNotNull(); } } 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/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarTests.java index 107a8272837..e29ca6a0a3a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootWarTests.java @@ -40,7 +40,7 @@ class BootWarTests extends AbstractBootArchiveTests { getTask().setMainClassName("com.example.Main"); getTask().providedClasspath(jarFile("one.jar"), jarFile("two.jar")); executeTask(); - try (JarFile jarFile = new JarFile(getTask().getArchivePath())) { + try (JarFile jarFile = new JarFile(getTask().getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry("WEB-INF/lib-provided/one.jar")).isNotNull(); assertThat(jarFile.getEntry("WEB-INF/lib-provided/two.jar")).isNotNull(); } @@ -52,7 +52,7 @@ class BootWarTests extends AbstractBootArchiveTests { getTask().providedClasspath(jarFile("one.jar")); getTask().setProvidedClasspath(getTask().getProject().files(jarFile("two.jar"))); executeTask(); - try (JarFile jarFile = new JarFile(getTask().getArchivePath())) { + try (JarFile jarFile = new JarFile(getTask().getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry("WEB-INF/lib-provided/one.jar")).isNull(); assertThat(jarFile.getEntry("WEB-INF/lib-provided/two.jar")).isNotNull(); } @@ -64,7 +64,7 @@ class BootWarTests extends AbstractBootArchiveTests { getTask().providedClasspath(jarFile("one.jar")); getTask().setProvidedClasspath(jarFile("two.jar")); executeTask(); - try (JarFile jarFile = new JarFile(getTask().getArchivePath())) { + try (JarFile jarFile = new JarFile(getTask().getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry("WEB-INF/lib-provided/one.jar")).isNull(); assertThat(jarFile.getEntry("WEB-INF/lib-provided/two.jar")).isNotNull(); } @@ -75,8 +75,7 @@ class BootWarTests extends AbstractBootArchiveTests { getTask().setMainClassName("com.example.Main"); getTask().providedClasspath(newFile("spring-boot-devtools-0.1.2.jar")); executeTask(); - assertThat(getTask().getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(getTask().getArchivePath())) { + try (JarFile jarFile = new JarFile(getTask().getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry("WEB-INF/lib-provided/spring-boot-devtools-0.1.2.jar")).isNull(); } } @@ -87,8 +86,7 @@ class BootWarTests extends AbstractBootArchiveTests { getTask().providedClasspath(jarFile("spring-boot-devtools-0.1.2.jar")); getTask().setExcludeDevtools(false); executeTask(); - assertThat(getTask().getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(getTask().getArchivePath())) { + try (JarFile jarFile = new JarFile(getTask().getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry("WEB-INF/lib-provided/spring-boot-devtools-0.1.2.jar")).isNotNull(); } } @@ -103,8 +101,7 @@ class BootWarTests extends AbstractBootArchiveTests { getTask().from(webappFolder); getTask().setMainClassName("com.example.Main"); executeTask(); - assertThat(getTask().getArchivePath()).exists(); - try (JarFile jarFile = new JarFile(getTask().getArchivePath())) { + try (JarFile jarFile = new JarFile(getTask().getArchiveFile().get().getAsFile())) { assertThat(jarFile.getEntry("org/")).isNotNull(); assertThat(jarFile.getEntry("org/foo.txt")).isNotNull(); } @@ -116,8 +113,8 @@ class BootWarTests extends AbstractBootArchiveTests { getTask().classpath(jarFile("library.jar")); getTask().providedClasspath(jarFile("provided-library.jar")); executeTask(); - assertThat(getEntryNames(getTask().getArchivePath())).containsSubsequence("WEB-INF/lib/library.jar", - "WEB-INF/lib-provided/provided-library.jar"); + assertThat(getEntryNames(getTask().getArchiveFile().get().getAsFile())) + .containsSubsequence("WEB-INF/lib/library.jar", "WEB-INF/lib-provided/provided-library.jar"); } @Override diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/LaunchScriptConfigurationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/LaunchScriptConfigurationTests.java index bbff7099e92..895cde6b3dd 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/LaunchScriptConfigurationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/LaunchScriptConfigurationTests.java @@ -17,6 +17,7 @@ package org.springframework.boot.gradle.tasks.bundling; import org.gradle.api.Project; +import org.gradle.api.provider.Property; import org.gradle.api.tasks.bundling.AbstractArchiveTask; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -43,7 +44,8 @@ class LaunchScriptConfigurationTests { @Test void initInfoProvidesUsesArchiveBaseNameByDefault() { - given(this.task.getBaseName()).willReturn("base-name"); + Property baseName = stringProperty("base-name"); + given(this.task.getArchiveBaseName()).willReturn(baseName); assertThat(new LaunchScriptConfiguration(this.task).getProperties()).containsEntry("initInfoProvides", "base-name"); } @@ -57,7 +59,8 @@ class LaunchScriptConfigurationTests { @Test void initInfoShortDescriptionUsesArchiveBaseNameWhenDescriptionIsNull() { - given(this.task.getBaseName()).willReturn("base-name"); + Property baseName = stringProperty("base-name"); + given(this.task.getArchiveBaseName()).willReturn(baseName); assertThat(new LaunchScriptConfiguration(this.task).getProperties()).containsEntry("initInfoShortDescription", "base-name"); } @@ -71,7 +74,8 @@ class LaunchScriptConfigurationTests { @Test void initInfoDescriptionUsesArchiveBaseNameWhenDescriptionIsNull() { - given(this.task.getBaseName()).willReturn("base-name"); + Property baseName = stringProperty("base-name"); + given(this.task.getArchiveBaseName()).willReturn(baseName); assertThat(new LaunchScriptConfiguration(this.task).getProperties()).containsEntry("initInfoDescription", "base-name"); } @@ -90,4 +94,11 @@ class LaunchScriptConfigurationTests { "The\n# project\n# description"); } + @SuppressWarnings("unchecked") + private Property stringProperty(String value) { + Property property = mock(Property.class); + given(property.get()).willReturn(value); + return property; + } + } 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/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java index b4cccc4276f..0b56478f6b9 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java @@ -19,6 +19,7 @@ package org.springframework.boot.gradle.tasks.run; import java.io.File; import java.io.IOException; +import org.gradle.api.JavaVersion; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.TestTemplate; @@ -88,7 +89,12 @@ class BootRunIntegrationTests { copyJvmArgsApplication(); BuildResult result = this.gradleBuild.build("bootRun"); assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(result.getOutput()).contains("1. -Xverify:none").contains("2. -XX:TieredStopAtLevel=1"); + if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_13)) { + assertThat(result.getOutput()).contains("1. -XX:TieredStopAtLevel=1"); + } + else { + assertThat(result.getOutput()).contains("1. -Xverify:none").contains("2. -XX:TieredStopAtLevel=1"); + } } @TestTemplate @@ -104,8 +110,14 @@ class BootRunIntegrationTests { copyJvmArgsApplication(); BuildResult result = this.gradleBuild.build("bootRun"); assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - assertThat(result.getOutput()).contains("1. -Dcom.bar=baz").contains("2. -Dcom.foo=bar") - .contains("3. -Xverify:none").contains("4. -XX:TieredStopAtLevel=1"); + if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_13)) { + assertThat(result.getOutput()).contains("1. -Dcom.bar=baz").contains("2. -Dcom.foo=bar") + .contains("3. -XX:TieredStopAtLevel=1"); + } + else { + assertThat(result.getOutput()).contains("1. -Dcom.bar=baz").contains("2. -Dcom.foo=bar") + .contains("3. -Xverify:none").contains("4. -XX:TieredStopAtLevel=1"); + } } private void copyClasspathApplication() throws IOException { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/build.gradle new file mode 100644 index 00000000000..161f106bb2f --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/build.gradle @@ -0,0 +1,50 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' +} + +description = 'Spring Boot Loader Tools' + +def generatedResources = "${buildDir}/generated-resources/main" + +configurations { + loader +} + +dependencies { + api "org.apache.commons:commons-compress:1.19" + + compileOnly "ch.qos.logback:logback-classic" + + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation "org.springframework:spring-core" + + loader project(":spring-boot-project:spring-boot-tools:spring-boot-loader") + + testImplementation "org.assertj:assertj-core" + testImplementation "org.junit.jupiter:junit-jupiter" + testImplementation "org.mockito:mockito-core" + testImplementation "org.zeroturnaround:zt-zip:1.13" +} + +sourceSets { + main { + output.dir(generatedResources, builtBy: 'reproducibleLoaderJar') + } +} + +task reproducibleLoaderJar(type: Jar) { + dependsOn configurations.loader + from { + zipTree(configurations.loader.incoming.files.filter {it.name.startsWith "spring-boot-loader" }.singleFile) + } + reproducibleFileOrder = true + preserveFileTimestamps = false + archiveFileName = 'spring-boot-loader.jar' + destinationDirectory = file("${generatedResources}/META-INF/loader") +} + +jar { + dependsOn reproducibleLoaderJar +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/pom.xml deleted file mode 100644 index 889fc90bfe5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/pom.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-loader-tools - Spring Boot Loader Tools - Spring Boot Loader Tools - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework - spring-core - - - org.apache.commons - commons-compress - - - - org.springframework.boot - spring-boot-loader - provided - - - ch.qos.logback - logback-classic - provided - - - - org.zeroturnaround - zt-zip - test - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - include-loader-jar - generate-resources - - copy - - - - - org.springframework.boot - spring-boot-loader - ${project.version} - spring-boot-loader.jar - - - ${basedir}/target/generated-resources/loader/META-INF/loader - false - true - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-resources - generate-resources - - add-resource - - - - - ${basedir}/target/generated-resources/loader - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - ${git.commit.id} - - - - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle new file mode 100644 index 00000000000..b80575d23b7 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.deployed' +} + +description = 'Spring Boot Loader' + +dependencies { + compileOnly "org.springframework:spring-core" + + implementation enforcedPlatform(project(":spring-boot-project:spring-boot-dependencies")) + + testImplementation project(":spring-boot-project:spring-boot-tools:spring-boot-test-support") + + testImplementation "org.assertj:assertj-core" + testImplementation "org.awaitility:awaitility" + testImplementation "org.junit.jupiter:junit-jupiter" + testImplementation "org.mockito:mockito-core" + testImplementation "org.springframework:spring-test" + + testRuntimeOnly "ch.qos.logback:logback-classic" + testRuntimeOnly "org.bouncycastle:bcprov-jdk16:1.46" + testRuntimeOnly "org.slf4j:jcl-over-slf4j" + testRuntimeOnly "org.springframework:spring-webmvc" +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/pom.xml deleted file mode 100644 index 09f459c6ef8..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/pom.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-loader - Spring Boot Loader - Spring Boot Loader - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework - spring-core - true - - - - org.springframework.boot - spring-boot-test-support - test - - - ch.qos.logback - logback-classic - test - - - org.awaitility - awaitility - test - - - - org.bouncycastle - bcprov-jdk16 - 1.46 - test - - - org.springframework - spring-webmvc - test - - - - - integration - - true - - - - - org.apache.maven.plugins - maven-invoker-plugin - - ${project.build.directory}/local-repo - - - - prepare-integration-test - pre-integration-test - - install - - - - integration-test - - run - - - ${project.build.directory}/it - src/it/settings.xml - verify - true - ${skipTests} - true - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - cleanup-local-integration-repo - pre-integration-test - - run - - - - - - - - - - - - - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/application.properties b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/application.properties deleted file mode 100644 index 42acafa985f..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -loader.path: target,target/lib,. -loader.main: org.springframework.boot.load.it.jar.EmbeddedJarStarter \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/pom.xml deleted file mode 100644 index 62ccd436bd4..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/pom.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - 4.0.0 - org.springframework.boot.launcher.it - executable-dir - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - org.apache.maven.plugins - maven-compiler-plugin - @maven-compiler-plugin.version@ - - - org.apache.maven.plugins - maven-dependency-plugin - @maven-dependency-plugin.version@ - - - unpack - prepare-package - - copy - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - jar - - - ${project.build.directory}/lib - - - - copy - prepare-package - - copy-dependencies - - - ${project.build.directory}/lib - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - org.apache.maven.plugins - maven-surefire-plugin - @maven-surefire-plugin.version@ - - - org.codehaus.mojo - exec-maven-plugin - @exec-maven-plugin.version@ - - java - - -cp - ${project.build.directory}/lib/@project.artifactId@-@project.version@.jar - org.springframework.boot.loader.PropertiesLauncher - - - - - - - - org.eclipse.jetty - jetty-webapp - @jetty.version@ - - - org.eclipse.jetty - jetty-annotations - @jetty.version@ - - - org.springframework - spring-webmvc - @spring-framework.version@ - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/EmbeddedJarStarter.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/EmbeddedJarStarter.java deleted file mode 100644 index 86afc3a61ec..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/EmbeddedJarStarter.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.jar; - -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; - -/** - * Main class to start the embedded server. - * - * @author Phillip Webb - */ -public final class EmbeddedJarStarter { - - public static void main(String[] args) throws Exception { - Server server = new Server(8080); - - ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); - context.setContextPath("/"); - server.setHandler(context); - - AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext(); - webApplicationContext.register(SpringConfiguration.class); - DispatcherServlet dispatcherServlet = new DispatcherServlet(webApplicationContext); - context.addServlet(new ServletHolder(dispatcherServlet), "/*"); - - server.start(); - server.join(); - } -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/SpringConfiguration.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/SpringConfiguration.java deleted file mode 100644 index c7c0d0bf201..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-dir/src/main/java/org/springframework/launcher/it/jar/SpringConfiguration.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.jar; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -/** - * Spring configuration. - * - * @author Phillip Webb - */ -@Configuration(proxyBeanMethods = false) -@EnableWebMvc -@ComponentScan -public class SpringConfiguration { - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/pom.xml deleted file mode 100644 index 7111e1f2178..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/pom.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - 4.0.0 - org.springframework.boot.launcher.it - executable-jar - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - maven-assembly-plugin - @maven-assembly-plugin.version@ - - - src/main/assembly/jar-with-dependencies.xml - - false - - - org.springframework.boot.loader.JarLauncher - - - org.springframework.boot.load.it.jar.EmbeddedJarStarter - - - - - - jar-with-dependencies - package - - single - - - - - - org.apache.maven.plugins - maven-compiler-plugin - @maven-compiler-plugin.version@ - - - org.apache.maven.plugins - maven-dependency-plugin - @maven-dependency-plugin.version@ - - - unpack - prepare-package - - unpack - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - jar - - - ${project.build.directory}/assembly - - - - copy - prepare-package - - copy-dependencies - - - ${project.build.directory}/assembly/lib - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - org.apache.maven.plugins - maven-surefire-plugin - @maven-surefire-plugin.version@ - - - - - - org.eclipse.jetty - jetty-webapp - @jetty.version@ - - - org.eclipse.jetty - jetty-annotations - @jetty.version@ - - - org.springframework - spring-webmvc - @spring-framework.version@ - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/assembly/jar-with-dependencies.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/assembly/jar-with-dependencies.xml deleted file mode 100644 index 1f7cf8ec13a..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/assembly/jar-with-dependencies.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - full - - jar - - false - - - - - ${project.groupId}:${project.artifactId} - - true - - - - - ${project.build.directory}/assembly - / - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/EmbeddedJarStarter.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/EmbeddedJarStarter.java deleted file mode 100644 index 86afc3a61ec..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/EmbeddedJarStarter.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.jar; - -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; - -/** - * Main class to start the embedded server. - * - * @author Phillip Webb - */ -public final class EmbeddedJarStarter { - - public static void main(String[] args) throws Exception { - Server server = new Server(8080); - - ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); - context.setContextPath("/"); - server.setHandler(context); - - AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext(); - webApplicationContext.register(SpringConfiguration.class); - DispatcherServlet dispatcherServlet = new DispatcherServlet(webApplicationContext); - context.addServlet(new ServletHolder(dispatcherServlet), "/*"); - - server.start(); - server.join(); - } -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/SpringConfiguration.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/SpringConfiguration.java deleted file mode 100644 index c7c0d0bf201..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-jar/src/main/java/org/springframework/launcher/it/jar/SpringConfiguration.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.jar; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -/** - * Spring configuration. - * - * @author Phillip Webb - */ -@Configuration(proxyBeanMethods = false) -@EnableWebMvc -@ComponentScan -public class SpringConfiguration { - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/loader.properties b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/loader.properties deleted file mode 100644 index 48a576ba043..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/loader.properties +++ /dev/null @@ -1 +0,0 @@ -loader.path=jar:file:target/executable-props-lib-0.0.1.BUILD-SNAPSHOT-dependencies.jar/!BOOT-INF/lib \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/pom.xml deleted file mode 100644 index c466d86f44d..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/pom.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - 4.0.0 - org.springframework.boot.launcher.it - executable-props-lib - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - maven-assembly-plugin - @maven-assembly-plugin.version@ - - - app - package - - single - - - - src/main/assembly/app.xml - - false - - - org.springframework.boot.loader.PropertiesLauncher - - - org.springframework.boot.launcher.it.props.EmbeddedJarStarter - - - - - - depedendencies - package - - single - - - - src/main/assembly/dependencies.xml - - false - - - - - - org.apache.maven.plugins - maven-compiler-plugin - @maven-compiler-plugin.version@ - - - org.apache.maven.plugins - maven-dependency-plugin - @maven-dependency-plugin.version@ - - - unpack - prepare-package - - unpack - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - jar - - - ${project.build.directory}/app-assembly - - - - copy - prepare-package - - copy-dependencies - - - ${project.build.directory}/dependencies-assembly/BOOT-INF/lib - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - org.apache.maven.plugins - maven-surefire-plugin - @maven-surefire-plugin.version@ - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/app.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/app.xml deleted file mode 100644 index 83a4f927e24..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/app.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - app - - jar - - false - - - - - ${project.groupId}:${project.artifactId} - - BOOT-INF/classes - true - - - - - ${project.build.directory}/app-assembly - / - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/dependencies.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/dependencies.xml deleted file mode 100644 index 306b55e4e9c..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/dependencies.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - dependencies - - jar - - false - - - ${project.build.directory}/dependencies-assembly - / - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/EmbeddedJarStarter.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/EmbeddedJarStarter.java deleted file mode 100644 index 23a4a38fd06..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/EmbeddedJarStarter.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2012-2019 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.launcher.it.props; - -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -/** - * Main class to start the embedded server. - * - * @author Dave Syer - */ -public final class EmbeddedJarStarter { - - public static void main(String[] args) throws Exception { - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class); - context.getBean(SpringConfiguration.class).run(args); - context.close(); - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/SpringConfiguration.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/SpringConfiguration.java deleted file mode 100644 index 9bdd06d4476..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/SpringConfiguration.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2012-2019 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.launcher.it.props; - -import java.io.IOException; -import java.util.Properties; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; - -/** - * Spring configuration. - * - * @author Dave Syer - */ -@Configuration(proxyBeanMethods = false) -@ComponentScan -public class SpringConfiguration implements InitializingBean { - - private String message = "Jar"; - - @Override - public void afterPropertiesSet() throws IOException { - Properties props = new Properties(); - props.load(new ClassPathResource("application.properties").getInputStream()); - String value = props.getProperty("message"); - if (value!=null) { - this.message = value; - } - - } - - public void run(String... args) { - System.err.println("Hello Embedded " + this.message + "!"); - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/resources/application.properties b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/resources/application.properties deleted file mode 100644 index c11051e3477..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -message: World \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/verify.groovy deleted file mode 100644 index b855fbe7c7a..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/verify.groovy +++ /dev/null @@ -1,17 +0,0 @@ -def jarfile = './target/executable-props-lib-0.0.1.BUILD-SNAPSHOT-app.jar' - -new File("${basedir}/application.properties").delete() - -String exec(String command) { - def proc = command.execute([], basedir) - proc.waitFor() - proc.err.text -} - -String out = exec("java -jar ${jarfile}") -assert out.contains('Hello Embedded World!'), - 'Using -jar my.jar should load dependencies from separate jar and use the application.properties from the jar\n' + out - -out = exec("java -cp ${jarfile} org.springframework.boot.loader.PropertiesLauncher") -assert out.contains('Hello Embedded World!'), - 'Using -cp my.jar with PropertiesLauncher should load dependencies from separate jar and use the application.properties from the jar\n' + out diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/pom.xml deleted file mode 100644 index 3e2a75482ca..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/pom.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - 4.0.0 - org.springframework.boot.launcher.it - executable-props - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - maven-assembly-plugin - @maven-assembly-plugin.version@ - - - src/main/assembly/jar-with-dependencies.xml - - false - - - org.springframework.boot.loader.PropertiesLauncher - - - org.springframework.boot.load.it.props.EmbeddedJarStarter - - - - - - jar-with-dependencies - package - - single - - - - - - org.apache.maven.plugins - maven-compiler-plugin - @maven-compiler-plugin.version@ - - - org.apache.maven.plugins - maven-dependency-plugin - @maven-dependency-plugin.version@ - - - unpack - prepare-package - - unpack - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - jar - - - ${project.build.directory}/assembly - - - - copy - prepare-package - - copy-dependencies - - - ${project.build.directory}/assembly/BOOT-INF/lib - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - org.apache.maven.plugins - maven-surefire-plugin - @maven-surefire-plugin.version@ - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/assembly/jar-with-dependencies.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/assembly/jar-with-dependencies.xml deleted file mode 100644 index 2dbf0f3a502..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/assembly/jar-with-dependencies.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - full - - jar - - false - - - - - ${project.groupId}:${project.artifactId} - - BOOT-INF/classes - true - - - - - ${project.build.directory}/assembly - / - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/java/org/springframework/launcher/it/props/EmbeddedJarStarter.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/java/org/springframework/launcher/it/props/EmbeddedJarStarter.java deleted file mode 100644 index 1837293b522..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/java/org/springframework/launcher/it/props/EmbeddedJarStarter.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.props; - -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -/** - * Main class to start the embedded server. - * - * @author Dave Syer - */ -public final class EmbeddedJarStarter { - - public static void main(String[] args) throws Exception { - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class); - context.getBean(SpringConfiguration.class).run(args); - context.close(); - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/java/org/springframework/launcher/it/props/SpringConfiguration.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/java/org/springframework/launcher/it/props/SpringConfiguration.java deleted file mode 100644 index eb5bc598b11..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/java/org/springframework/launcher/it/props/SpringConfiguration.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.props; - -import java.io.IOException; -import java.util.Properties; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; - -/** - * Spring configuration. - * - * @author Dave Syer - */ -@Configuration(proxyBeanMethods = false) -@ComponentScan -public class SpringConfiguration implements InitializingBean { - - private String message = "Jar"; - - @Override - public void afterPropertiesSet() throws IOException { - Properties props = new Properties(); - props.load(new ClassPathResource("application.properties").getInputStream()); - String value = props.getProperty("message"); - if (value!=null) { - this.message = value; - } - - } - - public void run(String... args) { - System.err.println("Hello Embedded " + this.message + "!"); - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/resources/application.properties b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/resources/application.properties deleted file mode 100644 index c11051e3477..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -message: World \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/verify.groovy deleted file mode 100644 index 0a0c034267a..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-props/verify.groovy +++ /dev/null @@ -1,31 +0,0 @@ -def jarfile = './target/executable-props-0.0.1.BUILD-SNAPSHOT-full.jar' - -new File("${basedir}/application.properties").delete() - -String exec(String command) { - def proc = command.execute([], basedir) - proc.waitFor() - proc.err.text -} - -String out = exec("java -jar ${jarfile}") -assert out.contains('Hello Embedded World!'), - 'Using -jar my.jar should use the application.properties from the jar\n' + out - -out = exec("java -cp ${jarfile} org.springframework.boot.loader.PropertiesLauncher") -assert out.contains('Hello Embedded World!'), - 'Using -cp my.jar with PropertiesLauncher should use the application.properties from the jar\n' + out - -new File("${basedir}/application.properties").withWriter { it -> it << "message: Foo" } -out = exec("java -jar ${jarfile}") -assert out.contains('Hello Embedded World!'), - 'Should use the application.properties from the jar in preference to local filesystem\n' + out - -out = exec("java -Dloader.path=.,lib -jar ${jarfile}") -assert out.contains('Hello Embedded Foo!'), - 'With loader.path=.,lib should use the application.properties from the local filesystem\n' + out - -new File("${basedir}/target/application.properties").withWriter { it -> it << "message: Spam" } -out = exec("java -Dloader.path=target,.,lib -jar ${jarfile}") -assert out.contains('Hello Embedded Spam!'), - 'With loader.path=target,.,lib should use the application.properties from the target directory\n' + out \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/pom.xml deleted file mode 100644 index af6d71231e5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/pom.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - 4.0.0 - org.springframework.boot.launcher.it - executable-war - 0.0.1.BUILD-SNAPSHOT - war - - UTF-8 - @java.version@ - @java.version@ - - - - - org.apache.maven.plugins - maven-compiler-plugin - @maven-compiler-plugin.version@ - - - org.apache.maven.plugins - maven-dependency-plugin - @maven-dependency-plugin.version@ - - - unpack - prepare-package - - unpack - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - jar - - - ${project.build.directory}/${project.artifactId}-${project.version} - - - - - - org.apache.maven.plugins - maven-surefire-plugin - @maven-surefire-plugin.version@ - - - org.apache.maven.plugins - maven-war-plugin - @maven-war-plugin.version@ - - - - org.springframework.boot.loader.WarLauncher - - - org.springframework.boot.load.it.war.embedded.EmbeddedWarStarter - - - - - - - - - org.eclipse.jetty - jetty-webapp - @jetty.version@ - - - org.eclipse.jetty - jetty-plus - @jetty.version@ - - - org.eclipse.jetty - jetty-annotations - @jetty.version@ - - - org.springframework - spring-webmvc - @spring-framework.version@ - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/SpringConfiguration.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/SpringConfiguration.java deleted file mode 100644 index 1bc22a2efd5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/SpringConfiguration.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.war; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -/** - * Spring configuration. - * - * @author Phillip Webb - */ -@Configuration(proxyBeanMethods = false) -@EnableWebMvc -@ComponentScan -public class SpringConfiguration { - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/SpringInitializer.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/SpringInitializer.java deleted file mode 100644 index ee0cf7f8824..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/SpringInitializer.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.war; - -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - -import org.springframework.web.WebApplicationInitializer; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; - -/** - * Spring {@link WebApplicationInitializer} for classic WAR deployment. - * - * @author Phillip Webb - */ -public class SpringInitializer implements WebApplicationInitializer { - - @Override - public void onStartup(ServletContext servletContext) throws ServletException { - AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext(); - webApplicationContext.register(SpringConfiguration.class); - servletContext.addServlet("dispatcherServlet", - new DispatcherServlet(webApplicationContext)).addMapping("/*"); - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/embedded/EmbeddedWarStarter.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/embedded/EmbeddedWarStarter.java deleted file mode 100644 index 4aac0a7dc69..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/embedded/EmbeddedWarStarter.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.war.embedded; - -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.webapp.Configuration; -import org.eclipse.jetty.webapp.WebAppContext; -import org.springframework.boot.load.it.war.SpringInitializer; - -/** - * Starter to launch the embedded server. NOTE: Jetty annotation scanning is not - * compatible with executable WARs so we must specify the {@link SpringInitializer}. - * - * @author Phillip Webb - */ -public final class EmbeddedWarStarter { - - public static void main(String[] args) throws Exception { - Server server = new Server(8080); - - WebAppContext webAppContext = new WebAppContext(); - webAppContext.setContextPath("/"); - webAppContext.setConfigurations(new Configuration[] { - new WebApplicationInitializersConfiguration(SpringInitializer.class) }); - - webAppContext.setParentLoaderPriority(true); - server.setHandler(webAppContext); - server.start(); - - server.join(); - } -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/embedded/WebApplicationInitializersConfiguration.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/embedded/WebApplicationInitializersConfiguration.java deleted file mode 100644 index 0d544e30763..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/it/executable-war/src/main/java/org/springframework/launcher/it/war/embedded/WebApplicationInitializersConfiguration.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2012-2019 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.load.it.war.embedded; - -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - -import org.eclipse.jetty.webapp.AbstractConfiguration; -import org.eclipse.jetty.webapp.Configuration; -import org.eclipse.jetty.webapp.WebAppContext; -import org.springframework.util.Assert; -import org.springframework.web.WebApplicationInitializer; - -/** - * Jetty {@link Configuration} that allows Spring {@link WebApplicationInitializer} to be - * started. This is required because Jetty annotation scanning does not work with packaged - * WARs. - * - * @author Phillip Webb - */ -public class WebApplicationInitializersConfiguration extends AbstractConfiguration { - - private Class[] webApplicationInitializers; - - public WebApplicationInitializersConfiguration(Class webApplicationInitializer, - Class... webApplicationInitializers) { - this.webApplicationInitializers = new Class[webApplicationInitializers.length + 1]; - this.webApplicationInitializers[0] = webApplicationInitializer; - System.arraycopy(webApplicationInitializers, 0, this.webApplicationInitializers, - 1, webApplicationInitializers.length); - for (Class i : webApplicationInitializers) { - Assert.notNull(i, "WebApplicationInitializer must not be null"); - Assert.isAssignable(WebApplicationInitializer.class, i); - } - } - - @Override - public void configure(WebAppContext context) throws Exception { - context.getServletContext().addListener(new ServletContextListener() { - - @Override - public void contextInitialized(ServletContextEvent sce) { - try { - for (Class webApplicationInitializer : webApplicationInitializers) { - WebApplicationInitializer initializer = (WebApplicationInitializer) webApplicationInitializer.newInstance(); - initializer.onStartup(sce.getServletContext()); - } - } - catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - @Override - public void contextDestroyed(ServletContextEvent sce) { - } - }); - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/PropertiesLauncherTests.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/PropertiesLauncherTests.java index 71fce711840..17779127656 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/PropertiesLauncherTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/PropertiesLauncherTests.java @@ -269,13 +269,19 @@ class PropertiesLauncherTests { List archives = new ArrayList<>(); String path = System.getProperty("java.class.path"); for (String url : path.split(File.pathSeparator)) { - archives.add(archive(url)); + Archive archive = archive(url); + if (archive != null) { + archives.add(archive); + } } return archives; } private Archive archive(String url) throws IOException { File file = new FileSystemResource(url).getFile(); + if (!file.exists()) { + return null; + } if (url.endsWith(".jar")) { return new JarFileArchive(file); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/build.gradle new file mode 100644 index 00000000000..aa76c5c4473 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/build.gradle @@ -0,0 +1,88 @@ +plugins { + id 'org.asciidoctor.jvm.convert' + id 'org.asciidoctor.jvm.pdf' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.maven-plugin' + id 'org.springframework.boot.optional-dependencies' +} + +description = "Spring Boot Maven Plugin" + +configurations { + documentation +} + +dependencies { + compileOnly 'org.apache.maven.plugin-tools:maven-plugin-annotations' + compileOnly 'org.sonatype.plexus:plexus-build-api' + + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + implementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools') + implementation 'org.apache.maven.shared:maven-common-artifact-filters' + implementation 'org.apache.maven:maven-plugin-api' + + intTestImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + intTestImplementation 'org.apache.maven.shared:maven-invoker' + intTestImplementation 'org.assertj:assertj-core' + intTestImplementation 'org.junit.jupiter:junit-jupiter' + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + optional 'org.apache.maven.plugins:maven-shade-plugin' + + runtimeOnly 'org.sonatype.plexus:plexus-build-api' + + testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.mockito:mockito-core' + testImplementation 'org.springframework:spring-core' +} + +syncDocumentationSourceForAsciidoctor { + from(documentPluginGoals) { + into 'asciidoc/goals' + } +} + +asciidoctor { + sources { + include 'index.adoc' + } +} + +syncDocumentationSourceForAsciidoctorPdf { + from(documentPluginGoals) { + into 'asciidoc/goals' + } +} + +asciidoctorPdf { + sources { + include 'index.adoc' + } +} + +tasks.withType(org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask) { + attributes 'maven-jar-plugin-version': '1.2.3', + 'maven-failsafe-plugin-version': '1.2.3', + 'build-helper-maven-plugin-version': '1.2.3' +} + +task zip(type: Zip) { + dependsOn asciidoctor, asciidoctorPdf + duplicatesStrategy 'fail' + from(asciidoctorPdf.outputDir) { + into 'pdf' + } + from(asciidoctor.outputDir) { + into 'html' + } +} + +prepareMavenBinaries { + versions '3.6.2', '3.5.4' +} + +artifacts { + 'documentation' zip +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/pom.xml deleted file mode 100644 index 10d5f0dc7b3..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/pom.xml +++ /dev/null @@ -1,499 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-maven-plugin - maven-plugin - Spring Boot Maven Plugin - Spring Boot Maven Plugin - - ${basedir}/../../.. - 3.3.9 - ${project.build.directory}/refdocs/ - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework.boot - spring-boot-loader-tools - - - org.apache.maven - maven-archiver - - - org.apache.maven - maven-artifact - - - org.apache.maven - maven-core - - - javax.enterprise - cdi-api - - - - - org.apache.maven - maven-model - - - org.apache.maven - maven-plugin-api - - - org.apache.maven - maven-settings - - - org.apache.maven.shared - maven-common-artifact-filters - - - javax.enterprise - cdi-api - - - - - org.codehaus.plexus - plexus-archiver - - - org.codehaus.plexus - plexus-container-default - - - org.codehaus.plexus - plexus-component-api - - - - - org.codehaus.plexus - plexus-utils - - - org.sonatype.plexus - plexus-build-api - - - - org.apache.maven.plugins - maven-shade-plugin - true - - - - org.apache.maven.plugin-tools - maven-plugin-annotations - provided - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - org.apache.maven.plugins - maven-plugin-plugin - - spring-boot - true - - - - generate-descriptor - - descriptor - - - - generated-helpmojo - - helpmojo - - - - - - - - - integration - - true - - - - - org.apache.maven.plugins - maven-invoker-plugin - - ${project.build.directory}/local-repo - - - - prepare-integration-test - pre-integration-test - - install - - - - integration-test - - run - - - ${project.build.directory}/it - src/it/settings.xml - verify - true - ${skipTests} - true - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - cleanup-local-integration-repo - pre-integration-test - - run - - - - - - - - - - - - - - - - full - - - full - - - - - - org.apache.maven.plugins - maven-invoker-plugin - - ${project.build.directory}/local-repo - - - - prepare-integration-test - pre-integration-test - - install - - - - integration-test - - run - - - ${project.build.directory}/it - src/it/settings.xml - verify - true - ${skipTests} - true - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - ant-contrib - ant-contrib - 1.0b3 - - - ant - ant - - - - - org.apache.ant - ant-nodeps - 1.8.1 - - - org.tigris.antelope - antelopetasks - 3.2.10 - - - - - cleanup-local-integration-repo - pre-integration-test - - run - - - - - - - - - - - set-up-maven-properties - prepare-package - - run - - - true - - - - - - - - - - - - - - - package-docs-zip - package - - run - - - - - - - - - - - - - - - - - com.googlecode.maven-download-plugin - download-maven-plugin - - - unpack-doc-resources - generate-resources - - wget - - - ${spring-doc-resources.url} - true - ${refdocs.build.directory} - - - - - - org.codehaus.gmavenplus - gmavenplus-plugin - - - - execute - - prepare-package - - - - - - - - - - org.codehaus.groovy - groovy-ant - ${groovy.version} - - - org.codehaus.groovy - groovy-xml - ${groovy.version} - - - - - org.asciidoctor - asciidoctor-maven-plugin - - - generate-html-documentation - prepare-package - - process-asciidoc - - - html5 - ${project.build.directory}/generated-docs/reference/html - highlight.js - book - - js/highlight - github - true - ./images - font - css/ - spring.css - warn - - - true - - DEBUG - - - - - - generate-pdf-documentation - prepare-package - - process-asciidoc - - - pdf - ${project.build.directory}/generated-docs/reference/pdf - - - - - ${refdocs.build.directory} - index.adoc - - ${project.version} - ${build-helper-maven-plugin.version} - ${maven-failsafe-plugin.version} - ${maven-jar-plugin.version} - ${project.basedir}/target/generated-resources - - - - - org.asciidoctor - asciidoctorj-pdf - 1.5.0-alpha.18 - - - - - org.apache.maven.plugins - maven-resources-plugin - - - copy-asciidoc-resources - generate-resources - - copy-resources - - - ${refdocs.build.directory} - - - src/main/asciidoc - false - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-zip - - attach-artifact - - - - - ${project.build.directory}/${project.artifactId}-${project.version}-docs.zip - zip - docs - - - - - - - - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/build-info.adoc b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/build-info.adoc similarity index 95% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/build-info.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/build-info.adoc index 487b24d61c4..f51b71b6a0a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/build-info.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/build-info.adoc @@ -38,4 +38,4 @@ This configuration will generate a `build-info.properties` at the expected locat Note that `maven.compiler.source` and `maven.compiler.target` are expected to be regular properties available in the project. They will be interpolated as you would expect. -include::{generated-resources-root}/goals/build-info.adoc[leveloffset=+1] +include::goals/build-info.adoc[leveloffset=+1] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/getting-started.adoc b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/getting-started.adoc similarity index 60% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/getting-started.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/getting-started.adoc index 6501051115b..e3121cbeac4 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/getting-started.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/getting-started.adoc @@ -3,5 +3,5 @@ The Spring Boot Plugin has the following goals: -include::{generated-resources-root}/goals/overview.adoc[] +include::goals/overview.adoc[] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/help.adoc b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/help.adoc similarity index 65% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/help.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/help.adoc index 49d5452ea4e..79eb182a236 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/help.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/help.adoc @@ -2,4 +2,4 @@ == Help information The `help` goal is a standard goal that displays information on the capabilities of the plugin. -include::{generated-resources-root}/goals/help.adoc[leveloffset=+1] +include::goals/help.adoc[leveloffset=+1] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/index.adoc b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/index.adoc similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/index.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/index.adoc diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/integration-tests.adoc b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/integration-tests.adoc similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/integration-tests.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/integration-tests.adoc index 31317f42983..19155961559 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/integration-tests.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/integration-tests.adoc @@ -35,9 +35,9 @@ Such setup can now use the https://maven.apache.org/surefire/maven-failsafe-plug You could also configure a more advanced setup to skip the integration tests when a specific property has been set, see <>. -include::{generated-resources-root}/goals/start.adoc[leveloffset=+1] +include::goals/start.adoc[leveloffset=+1] -include::{generated-resources-root}/goals/stop.adoc[leveloffset=+1] +include::goals/stop.adoc[leveloffset=+1] [[integration-tests-example]] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/packaging.adoc b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/packaging.adoc similarity index 99% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/packaging.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/packaging.adoc index 495dca330f7..9a9aa22dee0 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/packaging.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/packaging.adoc @@ -71,7 +71,7 @@ The `layout` property defaults to a guess based on the archive type (`jar` or `w * `ZIP` (alias to `DIR`): similar to the `JAR` layout using `PropertiesLauncher`. * `NONE`: Bundle all dependencies and project resources. Does not bundle a bootstrap loader. -include::{generated-resources-root}/goals/repackage.adoc[leveloffset=+1] +include::goals/repackage.adoc[leveloffset=+1] [[repackage-examples]] === Examples diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/running.adoc b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/running.adoc similarity index 99% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/running.adoc rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/running.adoc index 59f5918eed3..cf9cfcfe598 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/asciidoc/running.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/docs/asciidoc/running.adoc @@ -78,7 +78,7 @@ For example, if you want to run your application in a test mode that uses stub c If you wish to do this, you can set the `useTestClasspath` parameter to true. Note that this is only applied when you run an application: the `repackage` goal will not add test dependencies to the resulting JAR/WAR. -include::{generated-resources-root}/goals/run.adoc[leveloffset=+1] +include::goals/run.adoc[leveloffset=+1] [[run-examples]] === Examples diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java new file mode 100644 index 00000000000..8a373314a27 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/AbstractArchiveIntegrationTests.java @@ -0,0 +1,173 @@ +/* + * Copyright 2012-2020 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.util.Collections; +import java.util.Optional; +import java.util.function.Consumer; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.Manifest; +import java.util.stream.Stream; + +import org.assertj.core.api.AbstractAssert; +import org.assertj.core.api.AssertProvider; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.contentOf; + +/** + * Base class for archive (jar or war) related Maven plugin integration tests. + * + * @author Andy Wilkinson + */ +abstract class AbstractArchiveIntegrationTests { + + 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() { + + @Override + @Deprecated + public JarAssert assertThat() { + return new JarAssert(file); + } + + }; + } + + static final class JarAssert extends AbstractAssert { + + private JarAssert(File actual) { + super(actual, JarAssert.class); + assertThat(actual.exists()); + } + + JarAssert doesNotHaveEntryWithName(String name) { + withJarFile((jarFile) -> { + withEntries(jarFile, (entries) -> { + Optional match = entries.filter((entry) -> entry.getName().equals(name)).findFirst(); + assertThat(match).isNotPresent(); + }); + }); + return this; + } + + JarAssert hasEntryWithName(String name) { + withJarFile((jarFile) -> { + withEntries(jarFile, (entries) -> { + Optional match = entries.filter((entry) -> entry.getName().equals(name)).findFirst(); + assertThat(match).hasValueSatisfying((entry) -> assertThat(entry.getComment()).isNull()); + }); + }); + return this; + } + + JarAssert hasEntryWithNameStartingWith(String prefix) { + withJarFile((jarFile) -> { + withEntries(jarFile, (entries) -> { + Optional match = entries.filter((entry) -> entry.getName().startsWith(prefix)) + .findFirst(); + assertThat(match).hasValueSatisfying((entry) -> assertThat(entry.getComment()).isNull()); + }); + }); + return this; + } + + JarAssert hasUnpackEntryWithNameStartingWith(String prefix) { + withJarFile((jarFile) -> { + withEntries(jarFile, (entries) -> { + 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:")); + }); + }); + return this; + } + + JarAssert doesNotHaveEntryWithNameStartingWith(String prefix) { + withJarFile((jarFile) -> { + withEntries(jarFile, (entries) -> { + Optional match = entries.filter((entry) -> entry.getName().startsWith(prefix)) + .findFirst(); + assertThat(match).isNotPresent(); + }); + }); + return this; + } + + JarAssert manifest(Consumer consumer) { + withJarFile((jarFile) -> { + try { + consumer.accept(new ManifestAssert(jarFile.getManifest())); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + }); + return this; + } + + void withJarFile(Consumer consumer) { + try (JarFile jarFile = new JarFile(this.actual)) { + consumer.accept(jarFile); + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + void withEntries(JarFile jarFile, Consumer> entries) { + entries.accept(Collections.list(jarFile.entries()).stream()); + } + + static final class ManifestAssert extends AbstractAssert { + + private ManifestAssert(Manifest actual) { + super(actual, ManifestAssert.class); + } + + ManifestAssert hasStartClass(String expected) { + assertThat(this.actual.getMainAttributes().getValue("Start-Class")).isEqualTo(expected); + return this; + } + + ManifestAssert hasMainClass(String expected) { + assertThat(this.actual.getMainAttributes().getValue("Main-Class")).isEqualTo(expected); + return this; + } + + ManifestAssert hasAttribute(String name, String value) { + assertThat(this.actual.getMainAttributes().getValue(name)).isEqualTo(value); + return this; + } + + } + + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java new file mode 100644 index 00000000000..ac36d2eba29 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java @@ -0,0 +1,147 @@ +/* + * Copyright 2012-2020 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.FileReader; +import java.io.IOException; +import java.util.Properties; +import java.util.function.Consumer; + +import org.assertj.core.api.AbstractMapAssert; +import org.assertj.core.api.AssertProvider; +import org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.extension.ExtendWith; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for the Maven plugin's build info support. + * + * @author Andy Wilkinson + */ +@ExtendWith(MavenBuildExtension.class) +public class BuildInfoIntegrationTests { + + @TestTemplate + void buildInfoPropertiesAreGenerated(MavenBuild mavenBuild) { + mavenBuild.project("build-info").execute(buildInfo((buildInfo) -> assertThat(buildInfo) + .hasBuildGroup("org.springframework.boot.maven.it").hasBuildArtifact("build-info") + .hasBuildName("Generate build info").hasBuildVersion("0.0.1.BUILD-SNAPSHOT").containsBuildTime())); + } + + @TestTemplate + void generatedBuildInfoIncludesAdditionalProperties(MavenBuild mavenBuild) { + mavenBuild.project("build-info-additional-properties").execute(buildInfo((buildInfo) -> assertThat(buildInfo) + .hasBuildGroup("org.springframework.boot.maven.it").hasBuildArtifact("build-info-additional-properties") + .hasBuildName("Generate build info with additional properties").hasBuildVersion("0.0.1.BUILD-SNAPSHOT") + .containsBuildTime().containsEntry("build.foo", "bar").containsEntry("build.encoding", "UTF-8") + .containsEntry("build.java.source", "1.8"))); + } + + @TestTemplate + void generatedBuildInfoUsesCustomBuildTime(MavenBuild mavenBuild) { + mavenBuild.project("build-info-custom-build-time").execute(buildInfo((buildInfo) -> assertThat(buildInfo) + .hasBuildGroup("org.springframework.boot.maven.it").hasBuildArtifact("build-info-custom-build-time") + .hasBuildName("Generate build info with custom build time").hasBuildVersion("0.0.1.BUILD-SNAPSHOT") + .hasBuildTime("2019-07-08T08:00:00Z"))); + } + + @TestTemplate + void buildInfoPropertiesAreGeneratedToCustomOutputLocation(MavenBuild mavenBuild) { + mavenBuild.project("build-info-custom-file") + .execute(buildInfo("target/build.info", + (buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it") + .hasBuildArtifact("build-info-custom-file").hasBuildName("Generate custom build info") + .hasBuildVersion("0.0.1.BUILD-SNAPSHOT").containsBuildTime())); + } + + @TestTemplate + void whenBuildTimeIsDisabledIfDoesNotAppearInGeneratedBuildInfo(MavenBuild mavenBuild) { + mavenBuild.project("build-info-disable-build-time").execute(buildInfo((buildInfo) -> assertThat(buildInfo) + .hasBuildGroup("org.springframework.boot.maven.it").hasBuildArtifact("build-info-disable-build-time") + .hasBuildName("Generate build info with disabled build time").hasBuildVersion("0.0.1.BUILD-SNAPSHOT") + .doesNotContainBuildTime())); + } + + private Consumer buildInfo(Consumer> buildInfo) { + return buildInfo("target/classes/META-INF/build-info.properties", buildInfo); + } + + private Consumer buildInfo(String location, Consumer> buildInfo) { + return (project) -> buildInfo.accept((buildInfo(project, location))); + } + + private AssertProvider buildInfo(File project, String buildInfo) { + return new AssertProvider() { + + @Override + @Deprecated + public BuildInfoAssert assertThat() { + return new BuildInfoAssert(new File(project, buildInfo)); + } + + }; + } + + private static final class BuildInfoAssert extends AbstractMapAssert { + + private BuildInfoAssert(File actual) { + super(loadProperties(actual), BuildInfoAssert.class); + } + + private static Properties loadProperties(File file) { + try (FileReader reader = new FileReader(file)) { + Properties properties = new Properties(); + properties.load(reader); + return properties; + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + BuildInfoAssert hasBuildGroup(String expected) { + return containsEntry("build.group", expected); + } + + BuildInfoAssert hasBuildArtifact(String expected) { + return containsEntry("build.artifact", expected); + } + + BuildInfoAssert hasBuildName(String expected) { + return containsEntry("build.name", expected); + } + + BuildInfoAssert hasBuildVersion(String expected) { + return containsEntry("build.version", expected); + } + + BuildInfoAssert containsBuildTime() { + return containsKey("build.time"); + } + + BuildInfoAssert doesNotContainBuildTime() { + return doesNotContainKey("build.time"); + } + + BuildInfoAssert hasBuildTime(String expected) { + return containsEntry("build.time", expected); + } + + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java new file mode 100644 index 00000000000..f05dcc47506 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/JarIntegrationTests.java @@ -0,0 +1,283 @@ +/* + * Copyright 2012-2020 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 org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.extension.ExtendWith; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for the Maven plugin's jar support. + * + * @author Andy Wilkinson + */ +@ExtendWith(MavenBuildExtension.class) +class JarIntegrationTests extends AbstractArchiveIntegrationTests { + + @TestTemplate + void whenJarIsRepackagedInPlaceOnlyRepackagedJarIsInstalled(MavenBuild mavenBuild) { + mavenBuild.project("jar").goals("install").execute((project) -> { + 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.JarLauncher"); + manifest.hasStartClass("some.random.Main"); + manifest.hasAttribute("Not-Used", "Foo"); + }).hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context") + .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-core") + .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-jcl") + .hasEntryWithNameStartingWith("BOOT-INF/lib/jakarta.servlet-api-4") + .hasEntryWithName("BOOT-INF/classes/org/test/SampleApplication.class") + .hasEntryWithName("org/springframework/boot/loader/JarLauncher.class"); + assertThat(buildLog(project)).contains("Replacing main artifact with repackaged archive") + .contains("Installing " + repackaged + " to").doesNotContain("Installing " + original + " to"); + }); + } + + @TestTemplate + void whenAttachIsDisabledOnlyTheOriginalJarIsInstalled(MavenBuild mavenBuild) { + mavenBuild.project("jar-attach-disabled").goals("install").execute((project) -> { + File original = new File(project, "target/jar-attach-disabled-0.0.1.BUILD-SNAPSHOT.jar.original"); + assertThat(original).isFile(); + File main = new File(project, "target/jar-attach-disabled-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(main).isFile(); + assertThat(buildLog(project)).contains("Updating main artifact " + main + " to " + original) + .contains("Installing " + original + " to").doesNotContain("Installing " + main + " to"); + }); + } + + @TestTemplate + void whenAClassifierIsConfiguredTheRepackagedJarHasAClassifierAndBothItAndTheOriginalAreInstalled( + MavenBuild mavenBuild) { + mavenBuild.project("jar-classifier-main").goals("install").execute((project) -> { + assertThat(new File(project, "target/jar-classifier-main-0.0.1.BUILD-SNAPSHOT.jar.original")) + .doesNotExist(); + File main = new File(project, "target/jar-classifier-main-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(main).isFile(); + File repackaged = new File(project, "target/jar-classifier-main-0.0.1.BUILD-SNAPSHOT-test.jar"); + assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/"); + assertThat(buildLog(project)) + .contains("Attaching repackaged archive " + repackaged + " with classifier test") + .doesNotContain("Creating repackaged archive " + repackaged + " with classifier test") + .contains("Installing " + main + " to").contains("Installing " + repackaged + " to"); + }); + } + + @TestTemplate + void whenBothJarsHaveTheSameClassifierRepackagingIsDoneInPlaceAndOnlyRepackagedJarIsInstalled( + MavenBuild mavenBuild) { + mavenBuild.project("jar-classifier-source").goals("install").execute((project) -> { + File original = new File(project, "target/jar-classifier-source-0.0.1.BUILD-SNAPSHOT-test.jar.original"); + assertThat(original).isFile(); + File repackaged = new File(project, "target/jar-classifier-source-0.0.1.BUILD-SNAPSHOT-test.jar"); + assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/"); + assertThat(buildLog(project)).contains("Replacing artifact with classifier test with repackaged archive") + .doesNotContain("Installing " + original + " to").contains("Installing " + repackaged + " to"); + }); + } + + @TestTemplate + void whenBothJarsHaveTheSameClassifierAndAttachIsDisabledOnlyTheOriginalJarIsInstalled(MavenBuild mavenBuild) { + mavenBuild.project("jar-classifier-source-attach-disabled").goals("install").execute((project) -> { + File original = new File(project, + "target/jar-classifier-source-attach-disabled-0.0.1.BUILD-SNAPSHOT-test.jar.original"); + assertThat(original).isFile(); + File repackaged = new File(project, + "target/jar-classifier-source-attach-disabled-0.0.1.BUILD-SNAPSHOT-test.jar"); + assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/"); + assertThat(buildLog(project)) + .doesNotContain("Attaching repackaged archive " + repackaged + " with classifier test") + .contains("Updating artifact with classifier test " + repackaged + " to " + original) + .contains("Installing " + original + " to").doesNotContain("Installing " + repackaged + " to"); + }); + } + + @TestTemplate + void whenAClassifierAndAnOutputDirectoryAreConfiguredTheRepackagedJarHasAClassifierAndIsWrittenToTheOutputDirectory( + MavenBuild mavenBuild) { + mavenBuild.project("jar-create-dir").goals("install").execute((project) -> { + File repackaged = new File(project, "target/foo/jar-create-dir-0.0.1.BUILD-SNAPSHOT-foo.jar"); + assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/"); + assertThat(buildLog(project)).contains("Installing " + repackaged + " to"); + }); + } + + @TestTemplate + void whenAnOutputDirectoryIsConfiguredTheRepackagedJarIsWrittenToIt(MavenBuild mavenBuild) { + mavenBuild.project("jar-custom-dir").goals("install").execute((project) -> { + File repackaged = new File(project, "target/foo/jar-custom-dir-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/"); + assertThat(buildLog(project)).contains("Installing " + repackaged + " to"); + }); + } + + @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) -> { + File repackaged = new File(project, "target/jar-exclude-entry-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") + .doesNotHaveEntryWithName("BOOT-INF/lib/servlet-api-2.5.jar"); + }); + } + + @TestTemplate + void whenAGroupIsExcludedNoEntriesInThatGroupAppearInTheRepackagedJar(MavenBuild mavenBuild) { + mavenBuild.project("jar-exclude-group").goals("install").execute((project) -> { + 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") + .doesNotHaveEntryWithName("BOOT-INF/lib/log4j-api-2.4.1.jar"); + }); + } + + @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"); + }); + } + + @TestTemplate + void whenAJarIsBuiltWithLibrariesWithConflictingNamesTheyAreMadeUniqueUsingTheirGroupIds(MavenBuild mavenBuild) { + mavenBuild.project("jar-lib-name-conflict").execute((project) -> { + File repackaged = new File(project, "test-project/target/test-project-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(repackaged)).hasEntryWithNameStartingWith("BOOT-INF/classes/") + .hasEntryWithName( + "BOOT-INF/lib/org.springframework.boot.maven.it-acme-lib-0.0.1.BUILD-SNAPSHOT.jar") + .hasEntryWithName( + "BOOT-INF/lib/org.springframework.boot.maven.it.another-acme-lib-0.0.1.BUILD-SNAPSHOT.jar"); + }); + } + + @TestTemplate + void whenAProjectUsesPomPackagingRepackagingIsSkipped(MavenBuild mavenBuild) { + mavenBuild.project("jar-pom").execute((project) -> { + File target = new File(project, "target"); + assertThat(target.listFiles()).containsExactly(new File(target, "build.log")); + }); + } + + @TestTemplate + void whenRepackagingIsSkippedTheJarIsNotRepackaged(MavenBuild mavenBuild) { + mavenBuild.project("jar-skip").execute((project) -> { + File main = new File(project, "target/jar-skip-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(main)).doesNotHaveEntryWithNameStartingWith("org/springframework/boot"); + assertThat(new File(project, "target/jar-skip-0.0.1.BUILD-SNAPSHOT.jar.original")).doesNotExist(); + + }); + } + + @TestTemplate + void whenADependencyHasSystemScopeAndInclusionOfSystemScopeDependenciesIsEnabledItIsIncludedInTheRepackagedJar( + MavenBuild mavenBuild) { + mavenBuild.project("jar-system-scope").execute((project) -> { + File main = new File(project, "target/jar-system-scope-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(main)).hasEntryWithName("BOOT-INF/lib/sample-1.0.0.jar"); + + }); + } + + @TestTemplate + void whenADependencyHasSystemScopeItIsNotIncludedInTheRepackagedJar(MavenBuild mavenBuild) { + mavenBuild.project("jar-system-scope-default").execute((project) -> { + File main = new File(project, "target/jar-system-scope-default-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(main)).doesNotHaveEntryWithName("BOOT-INF/lib/sample-1.0.0.jar"); + + }); + } + + @TestTemplate + void whenADependendencyHasTestScopeItIsNotIncludedInTheRepackagedJar(MavenBuild mavenBuild) { + mavenBuild.project("jar-test-scope").execute((project) -> { + File main = new File(project, "target/jar-test-scope-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(main)).doesNotHaveEntryWithNameStartingWith("BOOT-INF/lib/log4j") + .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-"); + }); + } + + @TestTemplate + 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"); + assertThat(jar(main)).hasEntryWithName("BOOT-INF/classes/META-INF/jar-with-kotlin-module.kotlin_module"); + }); + } + + @TestTemplate + void whenAProjectIsBuiltWithALayoutPropertyTheSpecifiedLayoutIsUsed(MavenBuild mavenBuild) { + mavenBuild.project("jar-with-layout-property").goals("package", "-Dspring-boot.repackage.layout=ZIP") + .execute((project) -> { + File main = new File(project, "target/jar-with-layout-property-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(main)).manifest( + (manifest) -> manifest.hasMainClass("org.springframework.boot.loader.PropertiesLauncher") + .hasStartClass("org.test.SampleApplication")); + assertThat(buildLog(project)).contains("Layout: ZIP"); + }); + } + + @TestTemplate + void whenALayoutIsConfiguredTheSpecifiedLayoutIsUsed(MavenBuild mavenBuild) { + mavenBuild.project("jar-with-zip-layout").execute((project) -> { + File main = new File(project, "target/jar-with-zip-layout-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(main)) + .manifest((manifest) -> manifest.hasMainClass("org.springframework.boot.loader.PropertiesLauncher") + .hasStartClass("org.test.SampleApplication")); + assertThat(buildLog(project)).contains("Layout: ZIP"); + }); + } + + @TestTemplate + void whenRequiresUnpackConfigurationIsProvidedItIsReflectedInTheRepackagedJar(MavenBuild mavenBuild) { + mavenBuild.project("jar-with-unpack").execute((project) -> { + File main = new File(project, "target/jar-with-unpack-0.0.1.BUILD-SNAPSHOT.jar"); + assertThat(jar(main)).hasUnpackEntryWithNameStartingWith("BOOT-INF/lib/spring-core-") + .hasEntryWithNameStartingWith("BOOT-INF/lib/spring-context-"); + }); + } + + @TestTemplate + void whenJarIsRepackagedWithACustomLayoutTheJarUsesTheLayout(MavenBuild mavenBuild) { + mavenBuild.project("jar-custom-layout").execute((project) -> { + assertThat(jar(new File(project, "custom/target/custom-0.0.1.BUILD-SNAPSHOT.jar"))) + .hasEntryWithName("custom"); + assertThat(jar(new File(project, "default/target/default-0.0.1.BUILD-SNAPSHOT.jar"))) + .hasEntryWithName("sample"); + }); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java new file mode 100644 index 00000000000..7c1609b34e4 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuild.java @@ -0,0 +1,202 @@ +/* + * Copyright 2012-2020 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.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.function.Consumer; + +import org.apache.maven.shared.invoker.DefaultInvocationRequest; +import org.apache.maven.shared.invoker.DefaultInvoker; +import org.apache.maven.shared.invoker.InvocationOutputHandler; +import org.apache.maven.shared.invoker.InvocationRequest; +import org.apache.maven.shared.invoker.InvocationResult; +import org.apache.maven.shared.invoker.Invoker; +import org.apache.maven.shared.invoker.MavenInvocationException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.contentOf; + +/** + * Helper class for executing a Maven build. + * + * @author Andy Wilkinson + * + */ +class MavenBuild { + + private final File home; + + private final File temp; + + private final Map pomReplacements = new HashMap<>(); + + private final List goals = new ArrayList<>(); + + private final Properties properties = new Properties(); + + private File projectDir; + + MavenBuild(File home) { + this.home = home; + try { + this.temp = Files.createTempDirectory("maven-build").toFile().getCanonicalFile(); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + this.pomReplacements.put("java.version", "1.8"); + this.pomReplacements.put("project.groupId", "org.springframework.boot"); + this.pomReplacements.put("project.artifactId", "spring-boot-maven-plugin"); + this.pomReplacements.put("project.version", determineVersion()); + this.pomReplacements.put("log4j2.version", "2.12.1"); + this.pomReplacements.put("maven-jar-plugin.version", "3.2.0"); + this.pomReplacements.put("maven-toolchains-plugin.version", "3.0.0"); + this.pomReplacements.put("maven-war-plugin.version", "3.2.3"); + this.pomReplacements.put("build-helper-maven-plugin.version", "3.0.0"); + this.pomReplacements.put("spring-framework.version", "5.2.1.RELEASE"); + this.pomReplacements.put("jakarta-servlet.version", "4.0.2"); + this.pomReplacements.put("kotlin.version", "1.3.60"); + } + + MavenBuild project(String project) { + this.projectDir = new File("src/intTest/projects/" + project); + return this; + } + + MavenBuild goals(String... goals) { + this.goals.addAll(Arrays.asList(goals)); + return this; + } + + MavenBuild systemProperty(String name, String value) { + this.properties.setProperty(name, value); + return this; + } + + void execute(Consumer callback) { + Invoker invoker = new DefaultInvoker(); + invoker.setMavenHome(this.home); + InvocationRequest request = new DefaultInvocationRequest(); + try { + Path destination = this.temp.toPath(); + Path source = this.projectDir.toPath(); + Files.walkFileTree(source, new SimpleFileVisitor() { + + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + Files.createDirectories(destination.resolve(source.relativize(dir))); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (file.toFile().getName().equals("pom.xml")) { + String pomXml = new String(Files.readAllBytes(file), StandardCharsets.UTF_8); + for (Entry replacement : MavenBuild.this.pomReplacements.entrySet()) { + pomXml = pomXml.replace("@" + replacement.getKey() + "@", replacement.getValue()); + } + Files.write(destination.resolve(source.relativize(file)), + pomXml.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW); + } + else { + Files.copy(file, destination.resolve(source.relativize(file)), + StandardCopyOption.REPLACE_EXISTING); + } + return FileVisitResult.CONTINUE; + } + + }); + String settingsXml = new String(Files.readAllBytes(Paths.get("src", "intTest", "projects", "settings.xml")), + StandardCharsets.UTF_8) + .replace("@localCentralUrl@", + new File("build/int-test-maven-repository").toURI().toURL().toString()) + .replace("@localRepositoryPath@", + new File("build/local-maven-repository").getAbsolutePath()); + Files.write(destination.resolve("settings.xml"), settingsXml.getBytes(StandardCharsets.UTF_8), + StandardOpenOption.CREATE_NEW); + request.setBaseDirectory(this.temp); + request.setProperties(this.properties); + request.setGoals(this.goals.isEmpty() ? Collections.singletonList("package") : this.goals); + request.setUserSettingsFile(new File(this.temp, "settings.xml")); + request.setUpdateSnapshots(true); + request.setBatchMode(true); + File target = new File(this.temp, "target"); + target.mkdirs(); + File buildLogFile = new File(target, "build.log"); + try (PrintWriter buildLog = new PrintWriter(new FileWriter(buildLogFile))) { + request.setOutputHandler(new InvocationOutputHandler() { + + @Override + public void consumeLine(String line) { + buildLog.println(line); + buildLog.flush(); + } + + }); + try { + InvocationResult result = invoker.execute(request); + assertThat(result.getExitCode()).as(contentOf(buildLogFile)).isEqualTo(0); + } + catch (MavenInvocationException ex) { + throw new RuntimeException(ex); + } + } + callback.accept(this.temp); + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + private String determineVersion() { + File gradleProperties = new File("gradle.properties").getAbsoluteFile(); + while (!gradleProperties.isFile()) { + gradleProperties = new File(gradleProperties.getParentFile().getParentFile(), "gradle.properties"); + } + Properties properties = new Properties(); + try (Reader reader = new FileReader(gradleProperties)) { + properties.load(reader); + return properties.getProperty("version"); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuildExtension.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuildExtension.java new file mode 100644 index 00000000000..a9e0f668c5b --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/MavenBuildExtension.java @@ -0,0 +1,100 @@ +/* + * Copyright 2012-2020 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.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +import org.junit.jupiter.api.extension.Extension; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.api.extension.ParameterResolver; +import org.junit.jupiter.api.extension.TestTemplateInvocationContext; +import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider; + +/** + * An {@link Extension} for templated tests that use {@link MavenBuild}. Each templated + * test is run against multiple versions of Maven. + * + * @author Andy Wilkinson + */ +class MavenBuildExtension implements TestTemplateInvocationContextProvider { + + @Override + public boolean supportsTestTemplate(ExtensionContext context) { + return true; + } + + @Override + public Stream provideTestTemplateInvocationContexts(ExtensionContext context) { + try { + return Files.list(Paths.get("build/maven-binaries")).map(MavenVersionTestTemplateInvocationContext::new); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + private static final class MavenVersionTestTemplateInvocationContext implements TestTemplateInvocationContext { + + private final Path mavenHome; + + private MavenVersionTestTemplateInvocationContext(Path mavenHome) { + this.mavenHome = mavenHome; + } + + @Override + public String getDisplayName(int invocationIndex) { + return this.mavenHome.getFileName().toString(); + } + + @Override + public List getAdditionalExtensions() { + return Arrays.asList(new MavenBuildParameterResolver(this.mavenHome)); + } + + } + + private static final class MavenBuildParameterResolver implements ParameterResolver { + + private final Path mavenHome; + + private MavenBuildParameterResolver(Path mavenHome) { + this.mavenHome = mavenHome; + } + + @Override + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) + throws ParameterResolutionException { + return parameterContext.getParameter().getType().equals(MavenBuild.class); + } + + @Override + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) + throws ParameterResolutionException { + return new MavenBuild(this.mavenHome.toFile()); + } + + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/RunIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/RunIntegrationTests.java new file mode 100644 index 00000000000..9c20e96fa64 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/RunIntegrationTests.java @@ -0,0 +1,145 @@ +/* + * Copyright 2012-2020 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.lang.reflect.Method; + +import org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.condition.DisabledOnOs; +import org.junit.jupiter.api.condition.OS; +import org.junit.jupiter.api.extension.ExtendWith; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.contentOf; + +/** + * Integration tests for the Maven plugin's run goal. + * + * @author Andy Wilkinson + */ +@ExtendWith(MavenBuildExtension.class) +class RunIntegrationTests { + + @TestTemplate + void whenTheRunGoalIsExecutedTheApplicationIsForkedWithOptimizedJvmArguments(MavenBuild mavenBuild) { + mavenBuild.project("run").goals("spring-boot:run", "-X").execute((project) -> { + String jvmArguments = isJava13OrLater() ? "JVM argument(s): -XX:TieredStopAtLevel=1" + : "JVM argument(s): -Xverify:none -XX:TieredStopAtLevel=1"; + assertThat(buildLog(project)).contains("I haz been run").contains(jvmArguments); + }); + } + + @TestTemplate + void whenForkingIsDisabledAndDevToolsIsPresentDevToolsIsDisabled(MavenBuild mavenBuild) { + mavenBuild.project("run-devtools").goals("spring-boot:run").execute((project) -> assertThat(buildLog(project)) + .contains("I haz been run").contains("Fork mode disabled, devtools will be disabled")); + } + + @TestTemplate + void whenForkingIsDisabledJvmArgumentsAndWorkingDirectoryAreIgnored(MavenBuild mavenBuild) { + mavenBuild.project("run-disable-fork").goals("spring-boot:run") + .execute((project) -> assertThat(buildLog(project)).contains("I haz been run").contains( + "Fork mode disabled, ignoring JVM argument(s) [-Dproperty1=value1 -Dproperty2 -Dfoo=bar]") + .contains("Fork mode disabled, ignoring working directory configuration")); + } + + @TestTemplate + void whenEnvironmentVariablesAreConfiguredTheyAreAvailableToTheApplication(MavenBuild mavenBuild) { + mavenBuild.project("run-envargs").goals("spring-boot:run") + .execute((project) -> assertThat(buildLog(project)).contains("I haz been run")); + } + + @TestTemplate + void whenExclusionsAreConfiguredExcludedDependenciesDoNotAppearOnTheClasspath(MavenBuild mavenBuild) { + mavenBuild.project("run-exclude").goals("spring-boot:run") + .execute((project) -> assertThat(buildLog(project)).contains("I haz been run")); + } + + @TestTemplate + void whenSystemPropertiesAreConfiguredTheyAreAvailableToTheApplication(MavenBuild mavenBuild) { + mavenBuild.project("run-jvm-system-props").goals("spring-boot:run") + .execute((project) -> assertThat(buildLog(project)).contains("I haz been run")); + } + + @TestTemplate + void whenJvmArgumentsAreConfiguredTheyAreAvailableToTheApplication(MavenBuild mavenBuild) { + mavenBuild.project("run-jvmargs").goals("spring-boot:run") + .execute((project) -> assertThat(buildLog(project)).contains("I haz been run")); + } + + @TestTemplate + void whenProfilesAreConfiguredTheyArePassedToTheApplication(MavenBuild mavenBuild) { + mavenBuild.project("run-profiles").goals("spring-boot:run", "-X").execute( + (project) -> assertThat(buildLog(project)).contains("I haz been run with profile(s) 'foo,bar'")); + } + + @TestTemplate + void whenProfilesAreConfiguredAndForkingIsDisabledTheyArePassedToTheApplication(MavenBuild mavenBuild) { + mavenBuild.project("run-profiles-fork-disabled").goals("spring-boot:run").execute( + (project) -> assertThat(buildLog(project)).contains("I haz been run with profile(s) 'foo,bar'")); + } + + @TestTemplate + void whenUseTestClasspathIsEnabledTheApplicationHasTestDependenciesOnItsClasspath(MavenBuild mavenBuild) { + mavenBuild.project("run-use-test-classpath").goals("spring-boot:run") + .execute((project) -> assertThat(buildLog(project)).contains("I haz been run")); + } + + @TestTemplate + void whenAWorkingDirectoryIsConfiguredTheApplicationIsRunFromThatDirectory(MavenBuild mavenBuild) { + mavenBuild.project("run-working-directory").goals("spring-boot:run") + .execute((project) -> assertThat(buildLog(project)).contains("I haz been run")); + } + + @TestTemplate + @DisabledOnOs(OS.WINDOWS) + void whenAToolchainIsConfiguredItIsUsedToRunTheApplication(MavenBuild mavenBuild) { + mavenBuild.project("run-toolchains").goals("verify", "-t", "toolchains.xml") + .execute((project) -> assertThat(buildLog(project)).contains("The Maven Toolchains is awesome!")); + } + + @TestTemplate + void whenPomSpecifiesRunArgumentsContainingCommasTheyArePassedToTheApplicationCorrectly(MavenBuild mavenBuild) { + mavenBuild.project("run-arguments").goals("spring-boot:run").execute((project) -> assertThat(buildLog(project)) + .contains("I haz been run with profile(s) 'foo,bar' and endpoint(s) 'prometheus,info'")); + } + + @TestTemplate + void whenCommandLineSpecifiesRunArgumentsContainingCommasTheyArePassedToTheApplicationCorrectly( + MavenBuild mavenBuild) { + mavenBuild.project("run-arguments-commandline").goals("spring-boot:run").systemProperty( + "spring-boot.run.arguments", + "--management.endpoints.web.exposure.include=prometheus,info,health,metrics --spring.profiles.active=foo,bar") + .execute((project) -> assertThat(buildLog(project)).contains( + "I haz been run with profile(s) 'foo,bar' and endpoint(s) 'prometheus,info,health,metrics'")); + } + + private String buildLog(File project) { + return contentOf(new File(project, "target/build.log")); + } + + private boolean isJava13OrLater() { + for (Method method : String.class.getMethods()) { + if (method.getName().equals("stripIndent")) { + return true; + } + } + return false; + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/StartStopIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/StartStopIntegrationTests.java new file mode 100644 index 00000000000..34736018c3f --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/StartStopIntegrationTests.java @@ -0,0 +1,57 @@ +/* + * Copyright 2012-2020 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 org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.extension.ExtendWith; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.contentOf; + +/** + * Integration tests for the Maven plugin's war support. + * + * @author Andy Wilkinson + */ +@ExtendWith(MavenBuildExtension.class) +class StartStopIntegrationTests { + + @TestTemplate + void startStopWithForkDisabledWaitsForApplicationToBeReadyAndThenRequestsShutdown(MavenBuild mavenBuild) { + mavenBuild.project("start-stop-fork-disabled").goals("verify").execute( + (project) -> assertThat(buildLog(project)).contains("isReady: true").contains("Shutdown requested")); + } + + @TestTemplate + void startStopWaitsForApplicationToBeReadyAndThenRequestsShutdown(MavenBuild mavenBuild) { + mavenBuild.project("start-stop").goals("verify").execute( + (project) -> assertThat(buildLog(project)).contains("isReady: true").contains("Shutdown requested")); + } + + @TestTemplate + void whenSkipIsTrueStartAndStopAreSkipped(MavenBuild mavenBuild) { + mavenBuild.project("start-stop-skip").goals("verify").execute((project) -> assertThat(buildLog(project)) + .doesNotContain("Ooops, I haz been run").doesNotContain("Stopping application")); + } + + private String buildLog(File project) { + return contentOf(new File(project, "target/build.log")); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java new file mode 100644 index 00000000000..63c89ac5389 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/WarIntegrationTests.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2020 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 org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.extension.ExtendWith; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for the Maven plugin's war support. + * + * @author Andy Wilkinson + */ +@ExtendWith(MavenBuildExtension.class) +class WarIntegrationTests extends AbstractArchiveIntegrationTests { + + @TestTemplate + void warRepackaging(MavenBuild mavenBuild) { + mavenBuild.project("war") + .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-provided/jakarta.servlet-api-4") + .hasEntryWithName("org/springframework/boot/loader/WarLauncher.class") + .hasEntryWithName("WEB-INF/classes/org/test/SampleApplication.class") + .hasEntryWithName("index.html") + .manifest((manifest) -> manifest.hasMainClass("org.springframework.boot.loader.WarLauncher") + .hasStartClass("org.test.SampleApplication").hasAttribute("Not-Used", "Foo"))); + } + + @TestTemplate + void jarDependencyWithCustomFinalNameBuiltInSameReactorIsPackagedUsingArtifactIdAndVersion(MavenBuild mavenBuild) { + mavenBuild.project("war-reactor") + .execute(((project) -> assertThat(jar(new File(project, "war/target/war-0.0.1.BUILD-SNAPSHOT.war"))) + .hasEntryWithName("WEB-INF/lib/jar-0.0.1.BUILD-SNAPSHOT.jar") + .doesNotHaveEntryWithName("WEB-INF/lib/jar.jar"))); + } + + @TestTemplate + void whenRequiresUnpackConfigurationIsProvidedItIsReflectedInTheRepackagedWar(MavenBuild mavenBuild) { + mavenBuild.project("war-with-unpack").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-")); + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-additional-properties/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/pom.xml similarity index 74% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-additional-properties/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/pom.xml index 1b5cd9fcb9b..e6ba60b03a4 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-additional-properties/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-additional-properties/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot.maven.it build-info-additional-properties 0.0.1.BUILD-SNAPSHOT - Generate build info + Generate build info with additional properties UTF-8 @java.version@ @@ -34,17 +34,4 @@ - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-additional-properties/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/build-info-additional-properties/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-devtools/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/pom.xml similarity index 81% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/pom.xml index eeac82763d2..c5668a93c92 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-build-time/pom.xml @@ -3,15 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it - run-devtools + build-info-custom-build-time 0.0.1.BUILD-SNAPSHOT + Generate build info with custom build time UTF-8 @java.version@ @java.version@ - @@ -20,13 +19,12 @@ @project.version@ - package - - run - - false + + + build-info + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java b/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 similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java rename to 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 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/pom.xml new file mode 100644 index 00000000000..3e20c5c9c16 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info-custom-file/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + org.springframework.boot.maven.it + build-info-custom-file + 0.0.1.BUILD-SNAPSHOT + Generate custom build info + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + build-info + + + ${project.build.directory}/build.info + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-file/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/build-info-custom-file/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/build-info-disable-build-time/pom.xml b/spring-boot-project/spring-boot-tools/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/it/build-info-disable-build-time/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java b/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 similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java rename to 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 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info/pom.xml new file mode 100644 index 00000000000..9f0e5a1503d --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-info/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + org.springframework.boot.maven.it + build-info + 0.0.1.BUILD-SNAPSHOT + Generate build info + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + build-info + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/build-info/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/pom.xml similarity index 89% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/pom.xml index 19743c2c37a..d6fa5cf6afa 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-attach-disabled/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it - run + jar-attach-disabled 0.0.1.BUILD-SNAPSHOT UTF-8 @@ -18,12 +18,11 @@ @project.version@ - package - run + repackage - false + false diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-attach-disabled/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/pom.xml new file mode 100644 index 00000000000..3fd4d7b8df8 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main-attach-disabled/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + org.springframework.boot.maven.it + jar-classifier-main-attach-disabled + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + repackage + + + test + false + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/src/main/java/org/test/SampleApplication.java b/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 similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/src/main/java/org/test/SampleApplication.java rename to 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 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/pom.xml new file mode 100644 index 00000000000..d05d5c4488c --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-main/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + org.springframework.boot.maven.it + jar-classifier-main + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + repackage + + + test + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-classifier-main/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/jar-classifier-source-attach-disabled/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/pom.xml similarity index 74% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/pom.xml index 33b21884ec9..357399d589e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source-attach-disabled/pom.xml @@ -24,11 +24,6 @@ package test - - - Foo - - @@ -51,17 +46,4 @@ - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/src/main/java/org/test/SampleApplication.java b/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 similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/src/main/java/org/test/SampleApplication.java rename to 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 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/pom.xml similarity index 74% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/pom.xml index a7b24d9cda7..98d744d1511 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-classifier-source/pom.xml @@ -24,11 +24,6 @@ package test - - - Foo - - @@ -50,17 +45,4 @@ - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-classifier-source/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/pom.xml new file mode 100644 index 00000000000..0920206fd4f --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-create-dir/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + org.springframework.boot.maven.it + jar-create-dir + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + repackage + + + ${project.build.directory}/foo + foo + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-create-dir/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-jvmargs/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/pom.xml similarity index 86% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvmargs/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/pom.xml index d7f82c8cd44..f6a0ab30dbe 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvmargs/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-dir/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it - run-jvmargs + jar-custom-dir 0.0.1.BUILD-SNAPSHOT UTF-8 @@ -18,12 +18,11 @@ @project.version@ - package - run + repackage - -Dfoo="value 1" -Dbar=value2 + ${project.build.directory}/foo diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-custom-dir/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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-launcher/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/pom.xml new file mode 100644 index 00000000000..6e78c3ea63a --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + org.springframework.boot.maven.it + jar + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + repackage + + + ${basedir}/src/launcher/custom.script + + world + + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/src/launcher/custom.script b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/src/launcher/custom.script similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/src/launcher/custom.script rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/src/launcher/custom.script diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-launcher/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/pom.xml similarity index 89% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/pom.xml index 2216ebfca8b..e64b294529f 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/pom.xml @@ -30,9 +30,9 @@ - @project.groupId@ - @project.artifactId@ - @project.version@ + org.springframework.boot.maven.it + layout + 0.0.1.BUILD-SNAPSHOT diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-exclude-entry/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/custom/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/pom.xml similarity index 88% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/pom.xml index 3937a72a21e..f568c759e31 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/default/pom.xml @@ -25,9 +25,9 @@ - @project.groupId@ - @project.artifactId@ - @project.version@ + org.springframework.boot.maven.it + layout + 0.0.1.BUILD-SNAPSHOT diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-exclude-group/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/pom.xml new file mode 100644 index 00000000000..965a8b8d9dc --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + + org.springframework.boot.maven.it + jar-custom-layout + 0.0.1.BUILD-SNAPSHOT + + jar + layout + + + org.springframework.boot + spring-boot-loader-tools + @project.version@ + + + diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/main/java/smoketest/layout/SampleLayout.java b/spring-boot-project/spring-boot-tools/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-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/main/java/smoketest/layout/SampleLayout.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayout.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/main/java/smoketest/layout/SampleLayoutFactory.java b/spring-boot-project/spring-boot-tools/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-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/main/java/smoketest/layout/SampleLayoutFactory.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/layout/src/main/java/smoketest/layout/SampleLayoutFactory.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/main/resources/META-INF/spring.factories b/spring-boot-project/spring-boot-tools/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-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/main/resources/META-INF/spring.factories rename to spring-boot-project/spring-boot-tools/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/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/pom.xml new file mode 100644 index 00000000000..7022544d573 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-custom-layout/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + org.springframework.boot.maven.it + jar-custom-layout + 0.0.1.BUILD-SNAPSHOT + pom + + UTF-8 + @java.version@ + @java.version@ + + + layout + custom + default + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-file/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/pom.xml similarity index 78% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-file/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/pom.xml index 65bf4155f34..d37e11e1528 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-file/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-entry/pom.xml @@ -3,9 +3,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it - build-info-custom-file + jar-exclude-entry 0.0.1.BUILD-SNAPSHOT - Generate custom build info UTF-8 @java.version@ @@ -20,10 +19,15 @@ - build-info + repackage - ${project.build.directory}/build.info + + + javax.servlet + servlet-api + + @@ -37,9 +41,9 @@ @spring-framework.version@ - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ + javax.servlet + servlet-api + 2.5 provided diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-executable/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-executable/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/jar-exclude-group/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/pom.xml similarity index 90% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/pom.xml index 19ae153fdfe..4da81b2f08a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-exclude-group/pom.xml @@ -47,12 +47,6 @@ spring-context @spring-framework.version@ - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - org.apache.logging.log4j log4j-api diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/test-project/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-lib-name-conflict/test-project/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/jar-executable/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-executable/pom.xml similarity index 75% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-executable/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-executable/pom.xml index f0147318109..802d166a273 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-executable/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-executable/pom.xml @@ -38,25 +38,9 @@ some.random.Main - - Foo - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-executable/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-executable/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/acme-lib/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/acme-lib/pom.xml similarity index 71% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/acme-lib/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/acme-lib/pom.xml index 25d2c815b5f..f0c7626623e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/acme-lib/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/acme-lib/pom.xml @@ -10,11 +10,4 @@ 0.0.1.BUILD-SNAPSHOT - - - org.springframework - spring-context - @spring-framework.version@ - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/another-acme-lib/pom.xml b/spring-boot-project/spring-boot-tools/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/it/jar-lib-name-conflict/another-acme-lib/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/jar-lib-name-conflict/pom.xml b/spring-boot-project/spring-boot-tools/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/it/jar-lib-name-conflict/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/jar-lib-name-conflict/test-project/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/pom.xml similarity index 73% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/test-project/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/pom.xml index 65d9663c242..535fedc387a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/test-project/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-lib-name-conflict/test-project/pom.xml @@ -24,18 +24,6 @@ - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - @@ -50,11 +38,5 @@ acme-lib 0.0.1.BUILD-SNAPSHOT - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/src/main/java/org/test/SampleApplication.java b/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 similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/src/main/java/org/test/SampleApplication.java rename to 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 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-pom/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-pom/pom.xml similarity index 69% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-pom/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-pom/pom.xml index bbf54cebee2..f8eb3dae581 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-pom/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-pom/pom.xml @@ -25,17 +25,4 @@ - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-skip/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-skip/pom.xml similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-skip/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-skip/pom.xml index 23021a8af88..15eea089cbf 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-skip/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-skip/pom.xml @@ -21,7 +21,7 @@ repackage - true + true diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/pom.xml new file mode 100644 index 00000000000..f455d43879d --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope-default/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + org.springframework.boot.maven.it + jar-system-scope-default + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + repackage + + + + + + + + + com.example + sample + 1.0.0 + system + ${project.basedir}/sample-1.0.0.jar + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/sample-1.0.0.jar b/spring-boot-project/spring-boot-tools/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/it/jar-system-scope-default/sample-1.0.0.jar rename to spring-boot-project/spring-boot-tools/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/it/jar-system-scope/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-system-scope/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-disable-fork/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/pom.xml similarity index 71% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/pom.xml index 4d7d9a226d2..2a5de56091f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-system-scope/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it - run-disable-fork + jar-system-scope 0.0.1.BUILD-SNAPSHOT UTF-8 @@ -18,22 +18,24 @@ @project.version@ - package - run + repackage - false - -Dfoo=bar - ${project.build.sourceDirectory} - - value1 - - + true + + + com.example + sample + 1.0.0 + system + ${project.basedir}/sample-1.0.0.jar + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/sample-1.0.0.jar b/spring-boot-project/spring-boot-tools/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/it/jar-system-scope/sample-1.0.0.jar rename to spring-boot-project/spring-boot-tools/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/it/jar-test-scope/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-test-scope/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/build-info/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/pom.xml similarity index 81% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/pom.xml index 1f83522c8f8..5ea032cdd7d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-test-scope/pom.xml @@ -3,9 +3,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it - build-info + jar-test-scope 0.0.1.BUILD-SNAPSHOT - Generate build info UTF-8 @java.version@ @@ -20,7 +19,7 @@ - build-info + repackage @@ -34,10 +33,10 @@ @spring-framework.version@ - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided + org.apache.logging.log4j + log4j-api + @log4j2.version@ + test diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-with-unpack/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/jar-with-kotlin-module/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/pom.xml similarity index 66% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-kotlin-module/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/pom.xml index 770402c9d6f..eea70adbfdd 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-kotlin-module/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-kotlin-module/pom.xml @@ -23,29 +23,9 @@ repackage - - - - org.jetbrains.kotlin - kotlin-compiler - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - org.jetbrains.kotlin kotlin-maven-plugin @@ -70,23 +50,6 @@ - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - org.apache.logging.log4j - log4j-api - @log4j2.version@ - - org.jetbrains.kotlin kotlin-stdlib-jdk8 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-kotlin-module/src/main/kotlin/org/test/SampleApplication.kt b/spring-boot-project/spring-boot-tools/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/it/jar-with-kotlin-module/src/main/kotlin/org/test/SampleApplication.kt rename to spring-boot-project/spring-boot-tools/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/it/jar-with-layout-property/pom.xml b/spring-boot-project/spring-boot-tools/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/it/jar-with-layout-property/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/jar-with-layout-property/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar-with-layout-property/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/jar-with-unpack/pom.xml b/spring-boot-project/spring-boot-tools/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/it/jar-with-unpack/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/jar/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/jar/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-working-directory/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/pom.xml similarity index 84% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-working-directory/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/pom.xml index c82a150c74a..e4171d27cbd 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-working-directory/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar-with-zip-layout/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it - run-working-directory + jar-with-zip-layout 0.0.1.BUILD-SNAPSHOT UTF-8 @@ -18,12 +18,11 @@ @project.version@ - package - run + repackage - ${project.build.sourceDirectory} + ZIP diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/prop/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/jar/pom.xml b/spring-boot-project/spring-boot-tools/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/it/jar/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/jar/pom.xml diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/src/main/java/com/example/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/war-reactor/war/src/main/java/com/example/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-arguments-commandline/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/pom.xml similarity index 85% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/pom.xml index af5471f4ded..041d9b2ff79 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments-commandline/pom.xml @@ -16,14 +16,6 @@ @project.groupId@ @project.artifactId@ @project.version@ - - - package - - run - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-arguments-commandline/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-arguments/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments/pom.xml similarity index 68% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments/pom.xml index 34ca2c03862..84563c8b974 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-arguments/pom.xml @@ -16,20 +16,12 @@ @project.groupId@ @project.artifactId@ @project.version@ - - - package - - run - - - - --management.endpoints.web.exposure.include=prometheus,info - --spring.profiles.active=foo,bar - - - - + + + --management.endpoints.web.exposure.include=prometheus,info + --spring.profiles.active=foo,bar + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-arguments/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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-devtools/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-devtools/pom.xml new file mode 100644 index 00000000000..4f6bcd76fab --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-devtools/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + org.springframework.boot.maven.it + run-devtools + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + false + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/src/main/java/org/springframework/boot/devtools/restart/Restarter.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-devtools/src/main/java/org/springframework/boot/devtools/restart/Restarter.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/src/main/java/org/springframework/boot/devtools/restart/Restarter.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-devtools/src/main/java/org/springframework/boot/devtools/restart/Restarter.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-devtools/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-devtools/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-disable-fork/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-disable-fork/pom.xml new file mode 100644 index 00000000000..fa5832c24ef --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-disable-fork/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + org.springframework.boot.maven.it + run-disable-fork + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + false + -Dfoo=bar + ${project.build.sourceDirectory} + + value1 + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-disable-fork/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-disable-fork/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-envargs/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-envargs/pom.xml similarity index 70% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-envargs/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-envargs/pom.xml index 5d40d970c37..83603785174 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-envargs/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-envargs/pom.xml @@ -16,22 +16,14 @@ @project.groupId@ @project.artifactId@ @project.version@ - - - package - - run - - - - 5000 - Some Text - - - - - - + + + 5000 + Some Text + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-envargs/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-envargs/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-exclude/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-exclude/pom.xml similarity index 75% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-exclude/pom.xml index 2f02afbabd2..f92c9521153 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-exclude/pom.xml @@ -16,23 +16,15 @@ @project.groupId@ @project.artifactId@ @project.version@ - - - package - - run - - - - - org.apache.logging.log4j - log4j-api - - - jakarta.servlet,javax.servlet - - - + + + + org.apache.logging.log4j + log4j-api + + + jakarta.servlet,javax.servlet + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-exclude/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-fork/pom.xml b/spring-boot-project/spring-boot-tools/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/it/run-fork/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/run-fork/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-fork/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/pom.xml new file mode 100644 index 00000000000..6e76f7526b6 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvm-system-props/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + org.springframework.boot.maven.it + run-jvmargs + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + -Dfoo="value 1" -Dbar=value2 + + value1 + + ${project.artifactId} + should-be-ignored + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/pom.xml new file mode 100644 index 00000000000..849ed35c67b --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-jvmargs/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + org.springframework.boot.maven.it + run-jvmargs + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + -Dfoo="value 1" -Dbar=value2 + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvmargs/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-jvmargs/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-profiles-fork/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles-fork-disabled/pom.xml similarity index 74% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles-fork/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles-fork-disabled/pom.xml index 05049787147..1a222c88974 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles-fork/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles-fork-disabled/pom.xml @@ -16,20 +16,13 @@ @project.groupId@ @project.artifactId@ @project.version@ - - - package - - run - - - - foo - bar - - - - + + false + + foo + bar + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles-fork/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles-fork-disabled/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles-fork/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles-fork-disabled/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles/pom.xml similarity index 74% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles/pom.xml index 05049787147..b46f8996088 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-profiles/pom.xml @@ -16,20 +16,12 @@ @project.groupId@ @project.artifactId@ @project.version@ - - - package - - run - - - - foo - bar - - - - + + + foo + bar + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-profiles/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-toolchains/jdkHome/bin/java b/spring-boot-project/spring-boot-tools/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/it/run-toolchains/jdkHome/bin/java rename to spring-boot-project/spring-boot-tools/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/it/run-toolchains/pom.xml b/spring-boot-project/spring-boot-tools/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/it/run-toolchains/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/run-toolchains/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-toolchains/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/run-toolchains/toolchains.xml b/spring-boot-project/spring-boot-tools/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/it/run-toolchains/toolchains.xml rename to spring-boot-project/spring-boot-tools/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/it/run-use-test-classpath/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/pom.xml similarity index 81% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-use-test-classpath/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/pom.xml index 419080b62db..a652f2ca53e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-use-test-classpath/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-use-test-classpath/pom.xml @@ -16,17 +16,9 @@ @project.groupId@ @project.artifactId@ @project.version@ - - - package - - run - - - true - - - + + true + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-use-test-classpath/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-use-test-classpath/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/pom.xml new file mode 100644 index 00000000000..1dd1d52817f --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run-working-directory/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + org.springframework.boot.maven.it + run-working-directory + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + ${project.build.sourceDirectory} + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-working-directory/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run-working-directory/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run/pom.xml new file mode 100644 index 00000000000..5202b61be3d --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/run/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + org.springframework.boot.maven.it + run + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/run/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml new file mode 100644 index 00000000000..73ac7d28415 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml @@ -0,0 +1,76 @@ + + + @localRepositoryPath@ + + + it-repo + + true + + + + local.central + @localCentralUrl@ + + true + + + true + + + + spring-snapshot + https://repo.spring.io/snapshot + + false + + + true + + + + spring-milestone + https://repo.spring.io/milestone + + true + + + false + + + + + + local.central + @localCentralUrl@ + + true + + + true + + + + spring-snapshot + https://repo.spring.io/snapshot + + false + + + true + + + + spring-milestone + https://repo.spring.io/milestone + + true + + + false + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-fork-disabled/pom.xml similarity index 94% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-fork-disabled/pom.xml index c0791845470..8a1a8ad6714 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-fork-disabled/pom.xml @@ -30,9 +30,6 @@ - - false - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-fork-disabled/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/start-stop-fork-disabled/src/main/java/org/test/SampleApplication.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/pom.xml b/spring-boot-project/spring-boot-tools/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/it/start-stop-skip/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/start-stop-skip/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/start-stop-skip/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/start-stop-fork/pom.xml b/spring-boot-project/spring-boot-tools/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/it/start-stop-fork/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/start-stop-fork/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/start-stop-fork/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/war-reactor/jar/pom.xml b/spring-boot-project/spring-boot-tools/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/it/war-reactor/jar/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/war-reactor/pom.xml b/spring-boot-project/spring-boot-tools/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/it/war-reactor/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/war-reactor/war/pom.xml b/spring-boot-project/spring-boot-tools/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/it/war-reactor/war/pom.xml rename to spring-boot-project/spring-boot-tools/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/it/war-with-unpack/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/war-with-unpack/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/war-reactor/war/src/main/webapp/index.html b/spring-boot-project/spring-boot-tools/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/it/war-reactor/war/src/main/webapp/index.html rename to spring-boot-project/spring-boot-tools/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/it/war-with-unpack/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/pom.xml similarity index 97% rename from spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-with-unpack/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/pom.xml index 9238324238c..bb13ba1acde 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-with-unpack/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war-with-unpack/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it - war + war-with-unpack 0.0.1.BUILD-SNAPSHOT war diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/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/it/war/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/war-with-unpack/src/main/webapp/index.html b/spring-boot-project/spring-boot-tools/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/it/war-with-unpack/src/main/webapp/index.html rename to spring-boot-project/spring-boot-tools/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/it/war/pom.xml b/spring-boot-project/spring-boot-tools/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/it/war/pom.xml rename to spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war/pom.xml diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/war/src/main/java/org/test/SampleApplication.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/src/main/java/org/test/SampleApplication.java rename to spring-boot-project/spring-boot-tools/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/it/war/src/main/webapp/index.html b/spring-boot-project/spring-boot-tools/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/it/war/src/main/webapp/index.html rename to spring-boot-project/spring-boot-tools/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/it/build-info-additional-properties/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-additional-properties/verify.groovy deleted file mode 100644 index 10f6bfa4f77..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-additional-properties/verify.groovy +++ /dev/null @@ -1,13 +0,0 @@ -import org.springframework.boot.maven.Verify - -import static org.junit.Assert.assertEquals -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "target/classes/META-INF/build-info.properties") -Properties properties = Verify.verifyBuildInfo(file, - 'org.springframework.boot.maven.it', 'build-info-additional-properties', - 'Generate build info', '0.0.1.BUILD-SNAPSHOT') -assertTrue properties.containsKey('build.time') -assertEquals 'bar', properties.get('build.foo') -assertEquals 'UTF-8', properties.get('build.encoding') -assertEquals '1.8', properties.get('build.java.source') \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/pom.xml deleted file mode 100644 index bfa9a51de3c..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - build-info-custom-build-time - 0.0.1.BUILD-SNAPSHOT - Generate build info with custom build time - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - - - - build-info - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/verify.groovy deleted file mode 100644 index e6ec4d3e1da..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/verify.groovy +++ /dev/null @@ -1,9 +0,0 @@ -import org.springframework.boot.maven.Verify - -import static org.junit.Assert.assertEquals - -def file = new File(basedir, "target/classes/META-INF/build-info.properties") -Properties properties = Verify.verifyBuildInfo(file, - 'org.springframework.boot.maven.it', 'build-info-custom-build-time', - 'Generate build info with custom build time', '0.0.1.BUILD-SNAPSHOT') -assertEquals(properties.get('build.time'), '2019-07-08T08:00:00Z') diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-file/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-file/verify.groovy deleted file mode 100644 index eecd9e10d89..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-file/verify.groovy +++ /dev/null @@ -1,9 +0,0 @@ -import org.springframework.boot.maven.Verify - -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "target/build.info") -Properties properties = Verify.verifyBuildInfo(file, - 'org.springframework.boot.maven.it', 'build-info-custom-file', - 'Generate custom build info', '0.0.1.BUILD-SNAPSHOT') -assertTrue properties.containsKey('build.time') \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/verify.groovy deleted file mode 100644 index 7b5971224bb..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/verify.groovy +++ /dev/null @@ -1,9 +0,0 @@ -import org.springframework.boot.maven.Verify - -import static org.junit.Assert.assertFalse - -def file = new File(basedir, "target/classes/META-INF/build-info.properties") -Properties properties = Verify.verifyBuildInfo(file, - 'org.springframework.boot.maven.it', 'build-info-disable-build-time', - 'Generate build info with disabled build time', '0.0.1.BUILD-SNAPSHOT') -assertFalse 'build time must not be present', properties.containsKey('build.time') diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info/verify.groovy deleted file mode 100644 index e266446a8ad..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info/verify.groovy +++ /dev/null @@ -1,9 +0,0 @@ -import org.springframework.boot.maven.Verify - -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "target/classes/META-INF/build-info.properties") -Properties properties = Verify.verifyBuildInfo(file, - 'org.springframework.boot.maven.it', 'build-info', - 'Generate build info', '0.0.1.BUILD-SNAPSHOT') -assertTrue properties.containsKey('build.time') \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/invoker.properties deleted file mode 100644 index c0c3f7cc079..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean install \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/pom.xml deleted file mode 100644 index 5c8f7f2ef19..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-attach-disabled - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - false - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - some.random.Main - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/verify.groovy deleted file mode 100644 index 7cfb5917059..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-attach-disabled/verify.groovy +++ /dev/null @@ -1,18 +0,0 @@ -import org.springframework.boot.maven.* - -import static org.junit.Assert.assertTrue -import static org.junit.Assert.assertFalse - -File main = new File(basedir, "target/jar-attach-disabled-0.0.1.BUILD-SNAPSHOT.jar") -File backup = new File(basedir, "target/jar-attach-disabled-0.0.1.BUILD-SNAPSHOT.jar.original") -Verify.verifyJar(main, "some.random.Main") -assertTrue 'backup file should exist', backup.exists() - -def file = new File(basedir, "build.log") -assertTrue 'main artifact should have been updated', - file.text.contains("Updating main artifact " + main + " to " + backup) -assertTrue 'main artifact should have been installed', - file.text.contains ("Installing " + backup + " to") -assertFalse 'repackaged artifact should not have been installed', - file.text.contains ("Installing " + main + "to") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/invoker.properties deleted file mode 100644 index c0c3f7cc079..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean install \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/pom.xml deleted file mode 100644 index ba65f7d5ece..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-classifier-main-attach-disabled - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - test - false - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/verify.groovy deleted file mode 100644 index 8a40399d7e2..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main-attach-disabled/verify.groovy +++ /dev/null @@ -1,24 +0,0 @@ -import org.springframework.boot.maven.* - -import static org.junit.Assert.assertTrue -import static org.junit.Assert.assertFalse - -File repackaged = new File(basedir, "target/jar-classifier-main-attach-disabled-0.0.1.BUILD-SNAPSHOT-test.jar") -File main = new File(basedir, "target/jar-classifier-main-attach-disabled-0.0.1.BUILD-SNAPSHOT.jar") -File backup = new File(basedir, "target/jar-classifier-main-attach-disabled-0.0.1.BUILD-SNAPSHOT.jar.original") - -new Verify.JarArchiveVerification(repackaged, Verify.SAMPLE_APP).verify(); -assertTrue 'main artifact should exist', main.exists() -assertFalse 'backup artifact should not exist', backup.exists() - -def file = new File(basedir, "build.log") -assertFalse 'repackaged artifact should not have been attached', - file.text.contains("Attaching repackaged archive " + repackaged + " with classifier test") -assertTrue 'repackaged artifact should have been created', - file.text.contains("Creating repackaged archive " + repackaged + " with classifier test") -assertTrue 'main artifact should have been installed', - file.text.contains ("Installing " + main + " to") -assertFalse 'repackaged artifact should not have been installed', - file.text.contains ("Installing " + repackaged + " to") -assertFalse 'backup artifact should not have been installed', - file.text.contains ("Installing " + backup + "to") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/invoker.properties deleted file mode 100644 index c0c3f7cc079..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean install \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/pom.xml deleted file mode 100644 index b754ff6d29d..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-classifier-main - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - test - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/verify.groovy deleted file mode 100644 index a575beda0a6..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-main/verify.groovy +++ /dev/null @@ -1,22 +0,0 @@ -import org.springframework.boot.maven.* - -import static org.junit.Assert.assertTrue -import static org.junit.Assert.assertFalse - -File repackaged = new File(basedir, "target/jar-classifier-main-0.0.1.BUILD-SNAPSHOT-test.jar") -File main = new File(basedir, "target/jar-classifier-main-0.0.1.BUILD-SNAPSHOT.jar") -File backup = new File(basedir, "target/jar-classifier-main-0.0.1.BUILD-SNAPSHOT.jar.original") - -new Verify.JarArchiveVerification(repackaged, Verify.SAMPLE_APP).verify(); -assertTrue 'main artifact should exist', main.exists() -assertFalse 'backup artifact should not exist', backup.exists() - -def file = new File(basedir, "build.log") -assertTrue 'repackaged artifact should have been attached', - file.text.contains("Attaching repackaged archive " + repackaged + " with classifier test") -assertFalse 'repackaged artifact should have been created', - file.text.contains("Creating repackaged archive " + repackaged + " with classifier test") -assertTrue 'main artifact should have been installed', - file.text.contains ("Installing " + main + " to") -assertTrue 'repackaged artifact should have been installed', - file.text.contains ("Installing " + repackaged + " to") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/invoker.properties deleted file mode 100644 index c0c3f7cc079..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean install \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/verify.groovy deleted file mode 100644 index dae20efad32..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source-attach-disabled/verify.groovy +++ /dev/null @@ -1,20 +0,0 @@ -import org.springframework.boot.maven.* - -import static org.junit.Assert.assertTrue -import static org.junit.Assert.assertFalse - -File main = new File(basedir, "target/jar-classifier-source-attach-disabled-0.0.1.BUILD-SNAPSHOT-test.jar") -File backup = new File(basedir, "target/jar-classifier-source-attach-disabled-0.0.1.BUILD-SNAPSHOT-test.jar.original") - -new Verify.JarArchiveVerification(main, Verify.SAMPLE_APP).verify(); -assertTrue 'backup artifact should exist', backup.exists() - -def file = new File(basedir, "build.log") -assertFalse 'repackaged artifact should not have been attached', - file.text.contains("Attaching repackaged archive " + main + " with classifier test") -assertTrue 'test artifact should have been updated', - file.text.contains("Updating artifact with classifier test " + main + " to " + backup) -assertTrue 'backup artifact should have been installed', - file.text.contains ("Installing " + backup + " to") -assertFalse 'repackaged artifact should not have been installed', - file.text.contains ("Installing " + main + " to") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/invoker.properties deleted file mode 100644 index c0c3f7cc079..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean install \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/verify.groovy deleted file mode 100644 index d85fe412622..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-classifier-source/verify.groovy +++ /dev/null @@ -1,16 +0,0 @@ -import org.springframework.boot.maven.* - -import static org.junit.Assert.assertFalse -import static org.junit.Assert.assertTrue - -File repackaged = new File(basedir, "target/jar-classifier-source-0.0.1.BUILD-SNAPSHOT-test.jar") -File backup = new File(basedir, "target/jar-classifier-source-0.0.1.BUILD-SNAPSHOT-test.jar.original") - -new Verify.JarArchiveVerification(repackaged, Verify.SAMPLE_APP).verify(); -assertTrue 'backup artifact should exist', backup.exists() - -def file = new File(basedir, "build.log") -assertTrue 'repackaged artifact should have been replaced', - file.text.contains("Replacing artifact with classifier test with repackaged archive") -assertFalse 'backup artifact should not have been installed', file.text.contains ("Installing "+backup) -assertTrue 'repackaged artifact should have been installed', file.text.contains ("Installing "+repackaged) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/pom.xml deleted file mode 100644 index 33e076fcfb3..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-create-dir - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - ${project.build.directory}/foo - foo - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - some.random.Main - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/verify.groovy deleted file mode 100644 index 9a3e4454744..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-create-dir/verify.groovy +++ /dev/null @@ -1,6 +0,0 @@ -import java.io.*; -import org.springframework.boot.maven.*; - -Verify.verifyJar( - new File(basedir, "target/foo/jar-create-dir-0.0.1.BUILD-SNAPSHOT-foo.jar"), "some.random.Main" -) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/invoker.properties deleted file mode 100644 index c0c3f7cc079..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean install \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/pom.xml deleted file mode 100644 index fa75c04236a..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-custom-dir - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - ${project.build.directory}/foo - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - some.random.Main - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/verify.groovy deleted file mode 100644 index 0960d4ee3e6..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-dir/verify.groovy +++ /dev/null @@ -1,10 +0,0 @@ -import java.io.*; -import org.springframework.boot.maven.*; - -Verify.verifyJar( - new File(basedir, "target/foo/jar-custom-dir-0.0.1.BUILD-SNAPSHOT.jar"), "some.random.Main" -) - -Verify.verifyJar( - new File(localRepositoryPath, "org/springframework/boot/maven/it/jar-custom-dir/0.0.1.BUILD-SNAPSHOT/jar-custom-dir-0.0.1.BUILD-SNAPSHOT.jar"), "some.random.Main" -) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/pom.xml deleted file mode 100644 index f91261e2456..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/pom.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - ${basedir}/src/launcher/custom.script - - world - - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - some.random.Main - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/verify.groovy deleted file mode 100644 index 738a8ad1427..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-custom-launcher/verify.groovy +++ /dev/null @@ -1,6 +0,0 @@ -import java.io.*; -import org.springframework.boot.maven.*; - -Verify.verifyJar( - new File(basedir, "target/jar-0.0.1.BUILD-SNAPSHOT.jar"), "some.random.Main", "Hello world" -) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/pom.xml deleted file mode 100644 index ba0c43d4631..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/pom.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-exclude-entry - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - - - javax.servlet - servlet-api - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - javax.servlet - servlet-api - 2.5 - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/verify.groovy deleted file mode 100644 index 61011b7aa50..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-entry/verify.groovy +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2012-2019 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "target/jar-exclude-entry-0.0.1.BUILD-SNAPSHOT.jar") -new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasNoEntryNameStartingWith("BOOT-INF/lib/servlet-api-2.5.jar") - } -}.verify() diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/verify.groovy deleted file mode 100644 index bf712e6801f..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/verify.groovy +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2012-2019 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "target/jar-exclude-group-0.0.1.BUILD-SNAPSHOT.jar") -new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasNoEntryNameStartingWith("BOOT-INF/lib/log4j-api-2.4.1.jar") - } -}.verify() diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-executable/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-executable/verify.groovy deleted file mode 100644 index 8c2522ba684..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-executable/verify.groovy +++ /dev/null @@ -1,7 +0,0 @@ -import java.io.*; -import org.springframework.boot.maven.*; - -Verify.verifyJar( - new File(basedir, "target/jar-executable-0.0.1.BUILD-SNAPSHOT.jar"), - "some.random.Main", "Spring Boot Startup Script", "MyFullyExecutableJarName", - "MyFullyExecutableJarDesc") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/verify.groovy deleted file mode 100644 index 1294e4aeb7e..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-lib-name-conflict/verify.groovy +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2012-2016 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "test-project/target/test-project-0.0.1.BUILD-SNAPSHOT.jar") -new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasEntryNameStartingWith("BOOT-INF/lib/org.springframework.boot.maven.it-acme-lib-0.0.1.BUILD-SNAPSHOT.jar") - verifier.assertHasEntryNameStartingWith("BOOT-INF/lib/org.springframework.boot.maven.it.another-acme-lib-0.0.1.BUILD-SNAPSHOT.jar") - } -}.verify(); - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/pom.xml deleted file mode 100644 index 587f8a8695a..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - false - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - some.random.Main - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/verify.groovy deleted file mode 100644 index 5d0f840e173..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-non-executable/verify.groovy +++ /dev/null @@ -1,6 +0,0 @@ -import java.io.*; -import org.springframework.boot.maven.*; - -Verify.verifyJar( - new File(basedir, "target/jar-0.0.1.BUILD-SNAPSHOT.jar"), "some.random.Main", false -) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-skip/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-skip/verify.groovy deleted file mode 100644 index cff568c8cbc..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-skip/verify.groovy +++ /dev/null @@ -1,7 +0,0 @@ -import static org.junit.Assert.assertTrue -import static org.junit.Assert.assertFalse - -File f = new File(basedir, "target/jar-skip-0.0.1.BUILD-SNAPSHOT.jar") -assertTrue 'output file should have been generated', f.exists() -File shouldNotExist = new File(basedir, "target/jar-skip-0.0.1.BUILD-SNAPSHOT.jar.original") -assertFalse 'repackage goal should not have run. .original should not exist', shouldNotExist.exists() diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/pom.xml deleted file mode 100644 index 15c4b16a57b..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-system-scope-default - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - com.example - sample - 1.0.0 - system - ${project.basedir}/sample-1.0.0.jar - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/verify.groovy deleted file mode 100644 index 0a1ef4fc8f5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope-default/verify.groovy +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2012-2014 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "target/jar-system-scope-default-0.0.1.BUILD-SNAPSHOT.jar") -new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasNoEntryNameStartingWith("BOOT-INF/lib/sample-1.0.0.jar") - } -}.verify() diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/pom.xml deleted file mode 100644 index 22c2be93876..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-system-scope - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - true - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - com.example - sample - 1.0.0 - system - ${project.basedir}/sample-1.0.0.jar - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/verify.groovy deleted file mode 100644 index 20097b2b78b..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-system-scope/verify.groovy +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2012-2014 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "target/jar-system-scope-0.0.1.BUILD-SNAPSHOT.jar") -new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasEntryNameStartingWith("BOOT-INF/lib/sample-1.0.0.jar") - } -}.verify() diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/pom.xml deleted file mode 100644 index 11985a8b8ae..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/pom.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar-test-scope - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - servlet-api - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - org.apache.logging.log4j - log4j-api - @log4j2.version@ - test - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/verify.groovy deleted file mode 100644 index 24a032bfc2c..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/verify.groovy +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2012-2019 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "target/jar-test-scope-0.0.1.BUILD-SNAPSHOT.jar") -new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasNoEntryNameStartingWith("BOOT-INF/lib/log4j-api-2.4.1.jar") - } -}.verify() diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-kotlin-module/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-kotlin-module/verify.groovy deleted file mode 100644 index 6000b59e5c8..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-kotlin-module/verify.groovy +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2012-2019 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "target/jar-with-kotlin-module-0.0.1.BUILD-SNAPSHOT.jar") -new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasEntryNameStartingWith("BOOT-INF/classes/META-INF/jar-with-kotlin-module.kotlin_module") - verifier.assertHasUnpackEntry("BOOT-INF/lib/kotlin-compiler-") - verifier.assertHasNonUnpackEntry("BOOT-INF/lib/kotlin-stdlib-") - verifier.assertHasNonUnpackEntry("BOOT-INF/lib/kotlin-reflect-") - } -}.verify() diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-layout-property/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-layout-property/invoker.properties deleted file mode 100644 index 034be127549..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-layout-property/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=package -Dspring-boot.repackage.layout=ZIP \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-layout-property/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-layout-property/verify.groovy deleted file mode 100644 index 74a5ff22db5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-layout-property/verify.groovy +++ /dev/null @@ -1,4 +0,0 @@ -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "build.log") -assertTrue file.text.contains("Layout: ZIP") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/verify.groovy deleted file mode 100644 index ea7eee6d128..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/verify.groovy +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2012-2016 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "target/jar-with-unpack-0.0.1.BUILD-SNAPSHOT.jar") -new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasUnpackEntry("BOOT-INF/lib/spring-core-") - verifier.assertHasNonUnpackEntry("BOOT-INF/lib/spring-context-") - } -}.verify() diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar/invoker.properties deleted file mode 100644 index c0c3f7cc079..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean install \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar/verify.groovy deleted file mode 100644 index 248bf1acf3b..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/jar/verify.groovy +++ /dev/null @@ -1,19 +0,0 @@ -import org.springframework.boot.maven.* - -import static org.junit.Assert.assertTrue -import static org.junit.Assert.assertFalse - -File main = new File(basedir, "target/jar-0.0.1.BUILD-SNAPSHOT.jar") -File backup = new File(basedir, "target/jar-0.0.1.BUILD-SNAPSHOT.jar.original") -Verify.verifyJar(main, "some.random.Main") -assertTrue 'backup file should exist', backup.exists() - -def file = new File(basedir, "build.log") -assertTrue 'main artifact should have been replaced by repackaged archive', - file.text.contains("Replacing main artifact with repackaged archive") -assertTrue 'main artifact should have been installed', - file.text.contains ("Installing " + main + " to") -assertFalse 'backup artifact should not have been installed', - file.text.contains ("Installing " + backup + "to") -assertFalse file.text.contains("Layout:") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/pom.xml deleted file mode 100644 index 572465bd44f..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - jar - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - - repackage - - - ZIP - - - - - - org.apache.maven.plugins - maven-jar-plugin - @maven-jar-plugin.version@ - - - - Foo - - - - - - - - - org.springframework - spring-context - @spring-framework.version@ - - - jakarta.servlet - jakarta.servlet-api - @jakarta-servlet.version@ - provided - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/verify.groovy deleted file mode 100644 index 39e9cd8496d..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/prop/verify.groovy +++ /dev/null @@ -1,6 +0,0 @@ -import java.io.*; -import org.springframework.boot.maven.*; - -Verify.verifyZip( - new File(basedir, "target/jar-0.0.1.BUILD-SNAPSHOT.jar") -) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/invoker.properties deleted file mode 100644 index 9225c36f9e1..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.systemPropertiesFile=test.properties diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/test.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/test.properties deleted file mode 100644 index 4de2d29f21f..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/test.properties +++ /dev/null @@ -1 +0,0 @@ -spring-boot.run.arguments=--management.endpoints.web.exposure.include=prometheus,info,health,metrics --spring.profiles.active=foo,bar diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/verify.groovy deleted file mode 100644 index 9963e64c2e2..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments-commandline/verify.groovy +++ /dev/null @@ -1,2 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run with profile(s) 'foo,bar' and endpoint(s) 'prometheus,info,health,metrics'") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments/verify.groovy deleted file mode 100644 index 2a7cc17ab52..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-arguments/verify.groovy +++ /dev/null @@ -1,2 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run with profile(s) 'foo,bar' and endpoint(s) 'prometheus,info'") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/verify.groovy deleted file mode 100644 index ac9957acf2d..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-devtools/verify.groovy +++ /dev/null @@ -1,6 +0,0 @@ -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "build.log") -assertTrue 'Devtools should have been detected', file.text.contains('Fork mode disabled, devtools will be disabled') -assertTrue 'Application should have run', file.text.contains("I haz been run") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy deleted file mode 100644 index 752e0988f00..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy +++ /dev/null @@ -1,7 +0,0 @@ -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "build.log") -assertTrue file.text.contains("I haz been run") -assertTrue file.text.contains("Fork mode disabled, ignoring JVM argument(s) [-Dproperty1=value1 -Dproperty2 -Dfoo=bar]") -assertTrue file.text.contains("Fork mode disabled, ignoring working directory configuration") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-envargs/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-envargs/verify.groovy deleted file mode 100644 index 841c4a97de5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-envargs/verify.groovy +++ /dev/null @@ -1,3 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/verify.groovy deleted file mode 100644 index 841c4a97de5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/verify.groovy +++ /dev/null @@ -1,3 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-fork/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-fork/invoker.properties deleted file mode 100644 index 8056f772dae..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-fork/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean verify -X \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-fork/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-fork/verify.groovy deleted file mode 100644 index f675a4fa612..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-fork/verify.groovy +++ /dev/null @@ -1,21 +0,0 @@ -import java.lang.reflect.Method; - -import static org.junit.Assert.assertTrue - -def boolean isJava13OrLater() { - for (Method method : String.class.getMethods()) { - if (method.getName().equals("stripIndent")) { - return true; - } - } - return false; -} - -def file = new File(basedir, "build.log") -assertTrue file.text.contains("I haz been run from '$basedir'") -if (isJava13OrLater()) { - assertTrue file.text.contains("JVM argument(s): -XX:TieredStopAtLevel=1") -} -else { - assertTrue file.text.contains("JVM argument(s): -Xverify:none -XX:TieredStopAtLevel=1") -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml deleted file mode 100644 index 4828ceec96c..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - org.springframework.boot.maven.it - run-jvmargs - 0.0.1.BUILD-SNAPSHOT - - UTF-8 - @java.version@ - @java.version@ - - - - - @project.groupId@ - @project.artifactId@ - @project.version@ - - - package - - run - - - -Dfoo="value 1" -Dbar=value2 - - value1 - - ${project.artifactId} - should-be-ignored - - - - - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/verify.groovy deleted file mode 100644 index 841c4a97de5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/verify.groovy +++ /dev/null @@ -1,3 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvmargs/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvmargs/verify.groovy deleted file mode 100644 index 841c4a97de5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvmargs/verify.groovy +++ /dev/null @@ -1,3 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles-fork/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles-fork/verify.groovy deleted file mode 100644 index c9cb44bb059..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles-fork/verify.groovy +++ /dev/null @@ -1,2 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run with profile(s) 'foo,bar'") \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles/verify.groovy deleted file mode 100644 index c9cb44bb059..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-profiles/verify.groovy +++ /dev/null @@ -1,2 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run with profile(s) 'foo,bar'") \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-toolchains/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-toolchains/invoker.properties deleted file mode 100644 index 12b66a0fa59..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-toolchains/invoker.properties +++ /dev/null @@ -1,2 +0,0 @@ -invoker.goals=clean verify -t toolchains.xml -invoker.os.family=!windows diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-toolchains/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-toolchains/verify.groovy deleted file mode 100644 index 7140f782d88..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-toolchains/verify.groovy +++ /dev/null @@ -1,2 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("The Maven Toolchains is awesome!") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-use-test-classpath/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-use-test-classpath/verify.groovy deleted file mode 100644 index 841c4a97de5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-use-test-classpath/verify.groovy +++ /dev/null @@ -1,3 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-working-directory/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-working-directory/verify.groovy deleted file mode 100644 index 4f1b8234fc5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-working-directory/verify.groovy +++ /dev/null @@ -1,6 +0,0 @@ -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "build.log") -def workDir = new File(basedir, "src/main/java").getAbsolutePath() -assertTrue file.text.contains("I haz been run from ${workDir}") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run/verify.groovy deleted file mode 100644 index 841c4a97de5..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run/verify.groovy +++ /dev/null @@ -1,3 +0,0 @@ -def file = new File(basedir, "build.log") -return file.text.contains("I haz been run") - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/settings.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/settings.xml deleted file mode 100644 index e1e0ace341b..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/settings.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - it-repo - - true - - - - local.central - @localRepositoryUrl@ - - true - - - true - - - - - - local.central - @localRepositoryUrl@ - - true - - - true - - - - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/invoker.properties deleted file mode 100644 index 793d89fcd37..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean verify \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/verify.groovy deleted file mode 100644 index 5aa87af6830..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/verify.groovy +++ /dev/null @@ -1,5 +0,0 @@ -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "build.log") -assertTrue 'Start should have waited for application to be ready', file.text.contains("isReady: true") -assertTrue 'Shutdown should have been invoked', file.text.contains("Shutdown requested") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/invoker.properties deleted file mode 100644 index 793d89fcd37..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean verify \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/verify.groovy deleted file mode 100644 index 0d3ec538c9c..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-skip/verify.groovy +++ /dev/null @@ -1,5 +0,0 @@ -import static org.junit.Assert.assertFalse - -def file = new File(basedir, "build.log") -assertFalse 'Application should not have run', file.text.contains("Ooops, I haz been run") -assertFalse 'Should not attempt to stop the app', file.text.contains('Stopping application') diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/invoker.properties b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/invoker.properties deleted file mode 100644 index 793d89fcd37..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/invoker.properties +++ /dev/null @@ -1 +0,0 @@ -invoker.goals=clean verify \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/verify.groovy deleted file mode 100644 index 5aa87af6830..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/verify.groovy +++ /dev/null @@ -1,5 +0,0 @@ -import static org.junit.Assert.assertTrue - -def file = new File(basedir, "build.log") -assertTrue 'Start should have waited for application to be ready', file.text.contains("isReady: true") -assertTrue 'Shutdown should have been invoked', file.text.contains("Shutdown requested") diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/verify.groovy deleted file mode 100644 index 48d805aaac6..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/verify.groovy +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2012-2015 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "war/target/war-0.0.1.BUILD-SNAPSHOT.war") -new Verify.WarArchiveVerification(f) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasEntryNameStartingWith("WEB-INF/lib/jar-0.0.1.BUILD-SNAPSHOT.jar") - verifier.assertHasNoEntryNameStartingWith("WEB-INF/lib/jar.jar") - } -}.verify() - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-with-unpack/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-with-unpack/verify.groovy deleted file mode 100644 index d1c8e547fb6..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war-with-unpack/verify.groovy +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2012-2015 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 java.io.*; -import org.springframework.boot.maven.*; - -File f = new File(basedir, "target/war-0.0.1.BUILD-SNAPSHOT.war") -new Verify.WarArchiveVerification(f) { - @Override - protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier) - verifier.assertHasUnpackEntry("WEB-INF/lib/spring-core-") - verifier.assertHasNonUnpackEntry("WEB-INF/lib/spring-context-") - } -}.verify() - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war/verify.groovy deleted file mode 100644 index e0c145c834c..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/war/verify.groovy +++ /dev/null @@ -1,7 +0,0 @@ -import java.io.*; -import org.springframework.boot.maven.*; - -Verify.verifyWar( - new File(basedir, "target/war-0.0.1.BUILD-SNAPSHOT.war") -) - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/maven/resources/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/maven/resources/pom.xml new file mode 100644 index 00000000000..9a7c8e0cde5 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/maven/resources/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + org.springframework.boot + spring-boot-maven-plugin + {{version}} + maven-plugin + Spring Boot Maven Plugin + https://projects.spring.io/spring-boot/# + + UTF-8 + + + + Apache License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0 + + + + https://github.com/spring-projects/spring-boot + scm:git:git://github.com/spring-projects/spring-boot.git + scm:git:ssh://git@github.com/spring-projects/spring-boot.git + + + GitHub + https://github.com/spring-projects/spring-boot/issues + + + Pivotal Software, Inc. + https://spring.io + + + + + org.apache.maven.plugins + maven-plugin-plugin + 3.6.0 + + org.springframework.boot.maven + + + + + \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/Verify.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/Verify.java deleted file mode 100644 index c69a060bb43..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/Verify.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright 2012-2019 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.io.InputStream; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; -import java.util.jar.Manifest; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import org.springframework.core.io.FileSystemResource; -import org.springframework.core.io.support.PropertiesLoaderUtils; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.contentOf; - -/** - * Verification utility for use with maven-invoker-plugin verification scripts. - * - * @author Phillip Webb - * @author Andy Wilkinson - * @author Stephane Nicoll - */ -public final class Verify { - - public static final String SAMPLE_APP = "org.test.SampleApplication"; - - private Verify() { - } - - public static void verifyJar(File file) throws Exception { - new JarArchiveVerification(file, SAMPLE_APP).verify(); - } - - public static void verifyJar(File file, String main, String... scriptContents) throws Exception { - verifyJar(file, main, true, scriptContents); - } - - public static void verifyJar(File file, String main, boolean executable, String... scriptContents) - throws Exception { - new JarArchiveVerification(file, main).verify(executable, scriptContents); - } - - public static void verifyWar(File file) throws Exception { - new WarArchiveVerification(file).verify(); - } - - public static void verifyZip(File file) throws Exception { - new ZipArchiveVerification(file).verify(); - } - - public static void verifyModule(File file) throws Exception { - new ModuleArchiveVerification(file).verify(); - } - - public static Properties verifyBuildInfo(File file, String group, String artifact, String name, String version) - throws IOException { - FileSystemResource resource = new FileSystemResource(file); - Properties properties = PropertiesLoaderUtils.loadProperties(resource); - assertThat(properties.get("build.group")).isEqualTo(group); - assertThat(properties.get("build.artifact")).isEqualTo(artifact); - assertThat(properties.get("build.name")).isEqualTo(name); - assertThat(properties.get("build.version")).isEqualTo(version); - return properties; - } - - public static class ArchiveVerifier { - - private final ZipFile zipFile; - - private final Map content; - - public ArchiveVerifier(ZipFile zipFile) { - this.zipFile = zipFile; - Enumeration entries = zipFile.entries(); - this.content = new HashMap<>(); - while (entries.hasMoreElements()) { - ZipEntry zipEntry = entries.nextElement(); - this.content.put(zipEntry.getName(), zipEntry); - } - } - - public void assertHasEntryNameStartingWith(String entry) { - for (String name : this.content.keySet()) { - if (name.startsWith(entry)) { - return; - } - } - throw new IllegalStateException("Expected entry starting with " + entry); - } - - public void assertHasNoEntryNameStartingWith(String entry) { - for (String name : this.content.keySet()) { - if (name.startsWith(entry)) { - throw new IllegalStateException("Entry starting with " + entry + " should not have been found"); - } - } - } - - public void assertHasNonUnpackEntry(String entryName) { - assertThat(hasNonUnpackEntry(entryName)).as("Entry starting with " + entryName + " was an UNPACK entry") - .isTrue(); - } - - public void assertHasUnpackEntry(String entryName) { - assertThat(hasUnpackEntry(entryName)).as("Entry starting with " + entryName + " was not an UNPACK entry") - .isTrue(); - } - - private boolean hasNonUnpackEntry(String entryName) { - return !hasUnpackEntry(entryName); - } - - private boolean hasUnpackEntry(String entryName) { - String comment = getEntryStartingWith(entryName).getComment(); - return comment != null && comment.startsWith("UNPACK:"); - } - - private ZipEntry getEntryStartingWith(String entryName) { - return this.content.entrySet().stream().filter((entry) -> entry.getKey().startsWith(entryName)) - .map(Map.Entry::getValue).findFirst() - .orElseThrow(() -> new IllegalStateException("Unable to find entry starting with " + entryName)); - } - - public boolean hasEntry(String entry) { - return this.content.containsKey(entry); - } - - public ZipEntry getEntry(String entry) { - return this.content.get(entry); - } - - public InputStream getEntryContent(String entry) throws IOException { - ZipEntry zipEntry = getEntry(entry); - if (zipEntry == null) { - throw new IllegalArgumentException("No entry with name [" + entry + "]"); - } - return this.zipFile.getInputStream(zipEntry); - } - - } - - public abstract static class AbstractArchiveVerification { - - private final File file; - - AbstractArchiveVerification(File file) { - this.file = file; - } - - public void verify() throws Exception { - verify(true); - } - - public void verify(boolean executable, String... scriptContents) throws Exception { - assertThat(this.file).exists().isFile(); - - if (scriptContents.length > 0 && executable) { - String contents = contentOf(this.file); - contents = contents.substring(0, contents.indexOf(new String(new byte[] { 0x50, 0x4b, 0x03, 0x04 }))); - for (String content : scriptContents) { - assertThat(contents).contains(content); - } - } - - if (!executable) { - String contents = contentOf(this.file); - assertThat(contents).as("Is executable").startsWith(new String(new byte[] { 0x50, 0x4b, 0x03, 0x04 })); - } - - try (ZipFile zipFile = new ZipFile(this.file)) { - ArchiveVerifier verifier = new ArchiveVerifier(zipFile); - verifyZipEntries(verifier); - } - } - - protected void verifyZipEntries(ArchiveVerifier verifier) throws Exception { - verifyManifest(verifier); - } - - private void verifyManifest(ArchiveVerifier verifier) throws Exception { - Manifest manifest = new Manifest(verifier.getEntryContent("META-INF/MANIFEST.MF")); - verifyManifest(manifest); - } - - protected abstract void verifyManifest(Manifest manifest) throws Exception; - - } - - public static class JarArchiveVerification extends AbstractArchiveVerification { - - private final String main; - - public JarArchiveVerification(File file, String main) { - super(file); - this.main = main; - } - - @Override - protected void verifyZipEntries(ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier); - verifier.assertHasEntryNameStartingWith("BOOT-INF/lib/spring-context"); - verifier.assertHasEntryNameStartingWith("BOOT-INF/lib/spring-core"); - verifier.assertHasEntryNameStartingWith("BOOT-INF/lib/jakarta.servlet-api-4"); - assertThat(verifier.hasEntry("org/springframework/boot/loader/JarLauncher.class")) - .as("Unpacked launcher classes").isTrue(); - assertThat(verifier.hasEntry("BOOT-INF/classes/org/test/SampleApplication.class")).as("Own classes") - .isTrue(); - } - - @Override - protected void verifyManifest(Manifest manifest) throws Exception { - assertThat(manifest.getMainAttributes().getValue("Main-Class")) - .isEqualTo("org.springframework.boot.loader.JarLauncher"); - assertThat(manifest.getMainAttributes().getValue("Start-Class")).isEqualTo(this.main); - assertThat(manifest.getMainAttributes().getValue("Not-Used")).isEqualTo("Foo"); - } - - } - - public static class WarArchiveVerification extends AbstractArchiveVerification { - - public WarArchiveVerification(File file) { - super(file); - } - - @Override - protected void verifyZipEntries(ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier); - verifier.assertHasEntryNameStartingWith("WEB-INF/lib/spring-context"); - verifier.assertHasEntryNameStartingWith("WEB-INF/lib/spring-core"); - verifier.assertHasEntryNameStartingWith("WEB-INF/lib-provided/jakarta.servlet-api-4"); - assertThat(verifier.hasEntry("org/springframework/boot/loader/JarLauncher.class")) - .as("Unpacked launcher classes").isTrue(); - assertThat(verifier.hasEntry("WEB-INF/classes/org/test/SampleApplication.class")).as("Own classes") - .isTrue(); - assertThat(verifier.hasEntry("index.html")).as("Web content").isTrue(); - } - - @Override - protected void verifyManifest(Manifest manifest) throws Exception { - assertThat(manifest.getMainAttributes().getValue("Main-Class")) - .isEqualTo("org.springframework.boot.loader.WarLauncher"); - assertThat(manifest.getMainAttributes().getValue("Start-Class")).isEqualTo("org.test.SampleApplication"); - assertThat(manifest.getMainAttributes().getValue("Not-Used")).isEqualTo("Foo"); - } - - } - - private static class ZipArchiveVerification extends AbstractArchiveVerification { - - ZipArchiveVerification(File file) { - super(file); - } - - @Override - protected void verifyManifest(Manifest manifest) throws Exception { - assertThat(manifest.getMainAttributes().getValue("Main-Class")) - .isEqualTo("org.springframework.boot.loader.PropertiesLauncher"); - assertThat(manifest.getMainAttributes().getValue("Start-Class")).isEqualTo("org.test.SampleApplication"); - assertThat(manifest.getMainAttributes().getValue("Not-Used")).isEqualTo("Foo"); - } - - } - - private static class ModuleArchiveVerification extends AbstractArchiveVerification { - - ModuleArchiveVerification(File file) { - super(file); - } - - @Override - protected void verifyZipEntries(ArchiveVerifier verifier) throws Exception { - super.verifyZipEntries(verifier); - verifier.assertHasEntryNameStartingWith("lib/spring-context"); - verifier.assertHasEntryNameStartingWith("lib/spring-core"); - verifier.assertHasNoEntryNameStartingWith("lib/jakarta.servlet-api"); - assertThat(verifier.hasEntry("org/springframework/boot/loader/JarLauncher.class")) - .as("Unpacked launcher classes").isFalse(); - assertThat(verifier.hasEntry("org/test/SampleModule.class")).as("Own classes").isTrue(); - } - - @Override - protected void verifyManifest(Manifest manifest) throws Exception { - } - - } - -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle new file mode 100644 index 00000000000..b4b18cc55ce --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/build.gradle @@ -0,0 +1,37 @@ +plugins { + id 'java-library' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Testing Support' + +dependencies { + compileOnly "com.datastax.cassandra:cassandra-driver-core" + compileOnly "javax.servlet:javax.servlet-api" + compileOnly "junit:junit" + compileOnly "org.junit.jupiter:junit-jupiter" + compileOnly "org.junit.platform:junit-platform-engine" + compileOnly "org.mockito:mockito-core" + compileOnly "org.neo4j:neo4j-ogm-core" + compileOnly "org.springframework:spring-context" + compileOnly "org.springframework.data:spring-data-redis" + compileOnly "org.testcontainers:testcontainers" + + implementation enforcedPlatform(project(path: ":spring-boot-project:spring-boot-parent")) + implementation "org.apache.maven.resolver:maven-resolver-connector-basic" + implementation "org.apache.maven.resolver:maven-resolver-impl" + implementation "org.apache.maven:maven-resolver-provider" + implementation("org.apache.maven.resolver:maven-resolver-transport-http") { + exclude group: 'org.slf4j', module: 'jcl-over-slf4j' + } + implementation "org.assertj:assertj-core" + implementation "org.hamcrest:hamcrest-core" + implementation "org.hamcrest:hamcrest-library" + implementation "org.springframework:spring-core" + + testImplementation "org.junit.jupiter:junit-jupiter" + testImplementation "org.springframework:spring-context" + + testRuntimeOnly 'org.hibernate.validator:hibernate-validator' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-test-support/pom.xml deleted file mode 100644 index 580c05156d1..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/pom.xml +++ /dev/null @@ -1,149 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tools - ${revision} - - spring-boot-test-support - Spring Boot Testing Support - Spring Boot Testing Support - - ${basedir}/../../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.apache.maven.resolver - maven-resolver-connector-basic - - - org.apache.maven.resolver - maven-resolver-impl - - - org.apache.maven - maven-resolver-provider - - - com.google.guava - guava - - - - - org.apache.maven.resolver - maven-resolver-transport-http - - - jcl-over-slf4j - org.slf4j - - - - - org.springframework - spring-core - - - org.assertj - assertj-core - - - - com.datastax.cassandra - cassandra-driver-core - true - - - jakarta.servlet - jakarta.servlet-api - true - - - org.mockito - mockito-core - true - - - org.neo4j - neo4j-ogm-core - true - - - org.springframework.data - spring-data-redis - true - - - org.springframework - spring-context - true - - - org.testcontainers - testcontainers - true - - - javax.activation - javax.activation-api - - - javax.annotation - javax.annotation-api - - - javax.xml.bind - jaxb-api - - - - - org.testcontainers - junit-jupiter - true - - - - junit - junit - provided - - - org.hamcrest - hamcrest-core - - - - - org.junit.jupiter - junit-jupiter - provided - - - - org.hibernate.validator - hibernate-validator - test - - - javax.validation - validation-api - - - - - jakarta.validation - jakarta.validation-api - test - - - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/BuildOutput.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/BuildOutput.java index a0e1c3bd5b6..41d055f396e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/BuildOutput.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/BuildOutput.java @@ -40,7 +40,9 @@ public class BuildOutput { public File getTestClassesLocation() { try { File location = new File(this.testClass.getProtectionDomain().getCodeSource().getLocation().toURI()); - if (location.getPath().endsWith(path("target", "test-classes"))) { + if (location.getPath().endsWith(path("bin", "test")) || location.getPath().endsWith(path("bin", "intTest")) + || location.getPath().endsWith(path("build", "classes", "java", "test")) + || location.getPath().endsWith(path("build", "classes", "java", "intTest"))) { return location; } throw new IllegalStateException("Unexpected test classes location '" + location + "'"); @@ -56,9 +58,16 @@ public class BuildOutput { */ public File getTestResourcesLocation() { File testClassesLocation = getTestClassesLocation(); - if (testClassesLocation.getPath().endsWith(path("target", "test-classes"))) { + if (testClassesLocation.getPath().endsWith(path("bin", "test")) + || testClassesLocation.getPath().endsWith(path("bin", "intTest"))) { return testClassesLocation; } + if (testClassesLocation.getPath().endsWith(path("build", "classes", "java", "test"))) { + return new File(testClassesLocation.getParentFile().getParentFile().getParentFile(), "resources/test"); + } + if (testClassesLocation.getPath().endsWith(path("build", "classes", "java", "intTest"))) { + return new File(testClassesLocation.getParentFile().getParentFile().getParentFile(), "resources/intTest"); + } throw new IllegalStateException( "Cannot determine test resources location from classes location '" + testClassesLocation + "'"); } @@ -68,7 +77,7 @@ public class BuildOutput { * @return root location */ public File getRootLocation() { - return getTestClassesLocation().getParentFile(); + return new File("build"); } private String path(String... components) { diff --git a/spring-boot-project/spring-boot/build.gradle b/spring-boot-project/spring-boot/build.gradle new file mode 100644 index 00000000000..60a897770f9 --- /dev/null +++ b/spring-boot-project/spring-boot/build.gradle @@ -0,0 +1,127 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.configuration-properties' + id 'org.springframework.boot.deployed' + id 'org.springframework.boot.optional-dependencies' +} + +description = 'Spring Boot' + +dependencies { + annotationProcessor enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + annotationProcessor 'org.apache.logging.log4j:log4j-core' + + api 'org.springframework:spring-core' + api 'org.springframework:spring-context' + + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + + optional enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + optional 'ch.qos.logback:logback-classic' + optional 'com.atomikos:transactions-jdbc' + optional 'com.atomikos:transactions-jms' + optional 'com.atomikos:transactions-jta' + optional 'com.fasterxml.jackson.core:jackson-databind' + optional 'com.google.code.gson:gson' + optional 'com.samskivert:jmustache' + optional 'com.sendgrid:sendgrid-java' + optional 'com.zaxxer:HikariCP' + optional 'io.netty:netty-tcnative-boringssl-static' + optional 'io.projectreactor:reactor-tools' + optional 'io.projectreactor.netty:reactor-netty' + optional 'io.rsocket:rsocket-core' + optional 'io.rsocket:rsocket-transport-netty' + optional ('io.undertow:undertow-servlet') { + exclude group: 'org.jboss.spec.javax.annotation', module: 'jboss-annotations-api_1.2_spec' + exclude group: 'org.jboss.spec.javax.servlet', module: 'jboss-servlet-api_4.0_spec' + } + optional 'javax.jms:javax.jms-api' + optional 'javax.servlet:javax.servlet-api' + optional 'junit:junit' + optional 'org.apache.commons:commons-dbcp2' + optional 'org.apache.httpcomponents:httpclient' + optional 'org.apache.logging.log4j:log4j-api' + optional 'org.apache.logging.log4j:log4j-core' + optional 'org.apache.tomcat.embed:tomcat-embed-core' + optional 'org.apache.tomcat.embed:tomcat-embed-jasper' + optional 'org.apache.tomcat:tomcat-jdbc' + optional 'org.assertj:assertj-core' + optional 'org.codehaus.btm:btm' + optional 'org.codehaus.groovy:groovy' + optional 'org.codehaus.groovy:groovy-xml' + optional 'org.eclipse.jetty:jetty-servlets' + optional 'org.eclipse.jetty:jetty-util' + optional 'org.eclipse.jetty:jetty-webapp' + optional 'org.eclipse.jetty:jetty-alpn-conscrypt-server' + optional 'org.eclipse.jetty.http2:http2-server' + optional 'org.hamcrest:hamcrest-library' + optional 'org.hibernate:hibernate-core' + optional 'org.hibernate.validator:hibernate-validator' + optional 'org.jboss:jboss-transaction-spi' + optional 'org.liquibase:liquibase-core' + optional 'org.neo4j:neo4j-ogm-core' + optional 'org.slf4j:jul-to-slf4j' + optional 'org.slf4j:slf4j-api' + optional 'org.springframework:spring-messaging' + optional 'org.springframework:spring-orm' + optional 'org.springframework:spring-oxm' + optional 'org.springframework:spring-test' + optional 'org.springframework:spring-web' + optional 'org.springframework:spring-webflux' + optional 'org.springframework:spring-webmvc' + optional 'org.springframework.security:spring-security-web' + optional 'org.springframework.ws:spring-ws-core' + optional 'org.yaml:snakeyaml' + optional 'org.jetbrains.kotlin:kotlin-reflect' + optional 'org.jetbrains.kotlin:kotlin-stdlib' + + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + testImplementation 'com.google.appengine:appengine-api-1.0-sdk' + testImplementation 'com.h2database:h2' + testImplementation 'com.ibm.db2:jcc' + testImplementation 'com.jayway.jsonpath:json-path' + testImplementation 'com.microsoft.sqlserver:mssql-jdbc' + testImplementation 'com.oracle.ojdbc:ojdbc8' + testImplementation 'com.squareup.okhttp3:okhttp' + testImplementation 'com.sun.xml.messaging.saaj:saaj-impl' + testImplementation 'io.projectreactor:reactor-test' + testImplementation 'javax.xml.ws:jaxws-api' + testImplementation 'mysql:mysql-connector-java' + testImplementation 'net.sourceforge.jtds:jtds' + testImplementation 'org.apache.derby:derby' + testImplementation 'org.apache.httpcomponents:httpasyncclient' + testImplementation 'org.awaitility:awaitility' + testImplementation 'org.firebirdsql.jdbc:jaybird-jdk18' + testImplementation 'org.hsqldb:hsqldb' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.mariadb.jdbc:mariadb-java-client' + testImplementation 'org.mockito:mockito-core' + testImplementation 'org.postgresql:postgresql' + testImplementation 'org.springframework:spring-context-support' + testImplementation 'org.springframework.data:spring-data-redis' + testImplementation 'org.xerial:sqlite-jdbc' + + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testRuntimeOnly('org.testcontainers:jdbc') { + exclude group: 'javax.annotation', module: 'javax.annotation-api' + exclude group: 'javax.xml.bind', module: 'jaxb-api' + } +} + +compileKotlin { + kotlinOptions { + jvmTarget = 1.8 + } +} + +compileTestKotlin { + kotlinOptions { + jvmTarget = 1.8 + } +} + +compileJava { + doLast new org.springframework.boot.build.log4j2.ReproducibleLog4j2PluginsDatAction() +} diff --git a/spring-boot-project/spring-boot/pom.xml b/spring-boot-project/spring-boot/pom.xml deleted file mode 100644 index e42cf626722..00000000000 --- a/spring-boot-project/spring-boot/pom.xml +++ /dev/null @@ -1,560 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-parent - - spring-boot - Spring Boot - Spring Boot - - ${basedir}/../.. - - - ${git.url} - ${git.connection} - ${git.developerConnection} - - - - - org.springframework - spring-core - - - org.springframework - spring-context - - - - ch.qos.logback - logback-classic - true - - - com.atomikos - transactions-jdbc - true - - - com.atomikos - transactions-jms - true - - - com.atomikos - transactions-jta - true - - - com.fasterxml.jackson.core - jackson-databind - true - - - com.google.code.gson - gson - true - - - com.oracle.ojdbc - ojdbc8 - true - - - com.samskivert - jmustache - true - - - com.sendgrid - sendgrid-java - true - - - com.zaxxer - HikariCP - true - - - io.projectreactor.netty - reactor-netty - true - - - io.netty - netty-tcnative-boringssl-static - true - - - io.rsocket - rsocket-core - true - - - io.rsocket - rsocket-transport-netty - true - - - io.undertow - undertow-servlet - true - - - jakarta.jms - jakarta.jms-api - true - - - jakarta.servlet - jakarta.servlet-api - true - - - jakarta.validation - jakarta.validation-api - true - - - junit - junit - true - - - org.hamcrest - hamcrest-core - - - - - org.apache.commons - commons-dbcp2 - true - - - org.apache.httpcomponents - httpclient - true - - - org.apache.logging.log4j - log4j-api - true - - - org.apache.logging.log4j - log4j-core - true - - - org.apache.tomcat.embed - tomcat-embed-core - true - - - org.apache.tomcat.embed - tomcat-embed-jasper - true - - - org.apache.tomcat - tomcat-jdbc - true - - - org.assertj - assertj-core - true - - - org.codehaus.btm - btm - true - - - javax.transaction - jta - - - - - org.codehaus.groovy - groovy - true - - - org.codehaus.groovy - groovy-xml - true - - - org.eclipse.jetty - jetty-servlets - true - - - org.eclipse.jetty - jetty-util - true - - - org.eclipse.jetty - jetty-webapp - true - - - org.eclipse.jetty - jetty-alpn-conscrypt-server - true - - - org.eclipse.jetty.http2 - http2-server - true - - - javax.servlet - javax.servlet-api - - - - - org.hamcrest - hamcrest - true - - - org.hibernate - hibernate-core - true - - - javax.activation - javax.activation-api - - - javax.persistence - javax.persistence-api - - - javax.xml.bind - jaxb-api - - - - - org.hibernate.validator - hibernate-validator - true - - - javax.validation - validation-api - - - - - org.jboss - jboss-transaction-spi - true - - - org.liquibase - liquibase-core - true - - - org.neo4j - neo4j-ogm-core - true - - - org.slf4j - jul-to-slf4j - true - - - org.slf4j - slf4j-api - true - - - org.springframework - spring-messaging - true - - - org.springframework - spring-orm - true - - - org.springframework - spring-oxm - true - - - org.springframework - spring-test - true - - - org.springframework - spring-web - true - - - org.springframework - spring-webflux - true - - - org.springframework - spring-webmvc - true - - - org.springframework.security - spring-security-web - true - - - org.springframework.ws - spring-ws-core - true - - - org.yaml - snakeyaml - true - - - org.jetbrains.kotlin - kotlin-reflect - true - - - org.jetbrains.kotlin - kotlin-stdlib - true - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot-test-support - test - - - com.google.appengine - appengine-api-1.0-sdk - test - - - com.h2database - h2 - test - - - com.ibm.db2 - jcc - test - - - com.jayway.jsonpath - json-path - test - - - com.microsoft.sqlserver - mssql-jdbc - test - - - com.squareup.okhttp3 - okhttp - test - - - com.sun.xml.messaging.saaj - saaj-impl - test - - - io.projectreactor - reactor-test - test - - - jakarta.persistence - jakarta.persistence-api - test - - - jakarta.xml.ws - jakarta.xml.ws-api - test - - - mysql - mysql-connector-java - test - - - net.sourceforge.jtds - jtds - test - - - org.apache.derby - derby - test - - - org.apache.httpcomponents - httpasyncclient - test - - - org.awaitility - awaitility - test - - - org.firebirdsql.jdbc - jaybird-jdk18 - test - - - javax.resource - connector-api - - - - - org.hsqldb - hsqldb - test - - - org.mariadb.jdbc - mariadb-java-client - test - - - org.mockito - mockito-core - test - - - org.postgresql - postgresql - test - - - org.springframework - spring-context-support - test - - - org.springframework.data - spring-data-redis - test - - - org.testcontainers - jdbc - test - - - javax.annotation - javax.annotation-api - - - javax.xml.bind - jaxb-api - - - - - org.xerial - sqlite-jdbc - test - - - - - - org.jetbrains.kotlin - kotlin-maven-plugin - - - compile - compile - - compile - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/main/java - - - - - test-compile - test-compile - - test-compile - - - - ${project.basedir}/src/test/kotlin - ${project.basedir}/src/test/java - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - default-compile - none - - - default-testCompile - none - - - java-compile - compile - - compile - - - - java-test-compile - test-compile - - testCompile - - - - - - - diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java index a90c97f64f5..fdde9a62d61 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java @@ -747,7 +747,7 @@ class SpringApplicationTests { @Test void wildcardSources() { TestSpringApplication application = new TestSpringApplication(); - application.getSources().add("classpath:org/springframework/boot/sample-${sample.app.test.prop}.xml"); + application.getSources().add("classpath*:org/springframework/boot/sample-${sample.app.test.prop}.xml"); application.setWebApplicationType(WebApplicationType.NONE); this.context = application.run(); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java index e5a957e5545..2a92a97bfcb 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; import java.util.List; +import java.util.logging.Level; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.logging.log4j.LogManager; @@ -32,6 +33,7 @@ import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.Reconfigurable; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -187,10 +189,12 @@ class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests { } @Test + @Disabled("Uses Logback unintentionally") void loggingThatUsesJulIsCaptured(CapturedOutput output) { this.loggingSystem.beforeInitialize(); this.loggingSystem.initialize(null, null, null); java.util.logging.Logger julLogger = java.util.logging.Logger.getLogger(getClass().getName()); + julLogger.setLevel(Level.INFO); julLogger.severe("Hello world"); assertThat(output).contains("Hello world"); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java index 7b69ffb6b72..dbf98c89b0e 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java @@ -47,6 +47,7 @@ import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Supplier; import java.util.zip.GZIPInputStream; import javax.net.ssl.SSLContext; @@ -73,8 +74,10 @@ import org.apache.http.client.entity.InputStreamFactory; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; +import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.client.StandardHttpRequestRetryHandler; import org.apache.http.protocol.HttpContext; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.ssl.TrustStrategy; @@ -149,6 +152,25 @@ public abstract class AbstractServletWebServerFactoryTests { private final HttpClientContext httpClientContext = HttpClientContext.create(); + private final Supplier httpClientBuilder = () -> HttpClients.custom() + .setRetryHandler(new StandardHttpRequestRetryHandler(10, false) { + + @Override + public boolean retryRequest(IOException exception, int executionCount, HttpContext context) { + boolean retry = super.retryRequest(exception, executionCount, context); + if (retry) { + try { + Thread.sleep(200); + } + catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } + return retry; + } + + }); + @AfterEach void tearDown() { if (this.webServer != null) { @@ -159,6 +181,11 @@ public abstract class AbstractServletWebServerFactoryTests { // Ignore } } + if (ClassUtils.isPresent("org.apache.catalina.webresources.TomcatURLStreamHandlerFactory", + getClass().getClassLoader())) { + ReflectionTestUtils.setField(TomcatURLStreamHandlerFactory.class, "instance", null); + } + ReflectionTestUtils.setField(URL.class, "factory", null); } @AfterEach @@ -429,7 +456,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); ClientHttpResponse response = getClientResponse(getLocalUrl("https", "/hello"), HttpMethod.GET, new HttpComponentsClientHttpRequestFactory(httpClient)); assertThat(response.getHeaders().get("Server")).isNullOrEmpty(); @@ -444,7 +471,8 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory) + .setRetryHandler(new DefaultHttpRequestRetryHandler(10, false)).build(); ClientHttpResponse response = getClientResponse(getLocalUrl("https", "/hello"), HttpMethod.GET, new HttpComponentsClientHttpRequestFactory(httpClient)); assertThat(response.getHeaders().get("Server")).containsExactly("MyServer"); @@ -458,7 +486,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test"); } @@ -475,7 +503,7 @@ public abstract class AbstractServletWebServerFactoryTests { SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "secret".toCharArray()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test"); } @@ -492,7 +520,7 @@ public abstract class AbstractServletWebServerFactoryTests { SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "password".toCharArray()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test"); } @@ -506,7 +534,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); String localUrl = getLocalUrl("https", "/test.txt"); assertThatIOException().isThrownBy(() -> getResponse(localUrl, requestFactory)); @@ -525,7 +553,7 @@ public abstract class AbstractServletWebServerFactoryTests { SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "password".toCharArray()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test"); } @@ -539,7 +567,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test"); } @@ -563,7 +591,7 @@ public abstract class AbstractServletWebServerFactoryTests { SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()) .loadKeyMaterial(keyStore, "password".toCharArray()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test"); verify(sslStoreProvider, atLeastOnce()).getKeyStore(); @@ -637,7 +665,7 @@ public abstract class AbstractServletWebServerFactoryTests { this.webServer.start(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build()); - HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); + HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); assertThat(getResponse(getLocalUrl("https", "/hello"), requestFactory)).contains("scheme=https"); } @@ -784,7 +812,7 @@ public abstract class AbstractServletWebServerFactoryTests { TestGzipInputStreamFactory inputStreamFactory = new TestGzipInputStreamFactory(); Map contentDecoderMap = Collections.singletonMap("gzip", inputStreamFactory); getResponse(getLocalUrl("/hello"), new HttpComponentsClientHttpRequestFactory( - HttpClientBuilder.create().setContentDecoderRegistry(contentDecoderMap).build())); + this.httpClientBuilder.get().setContentDecoderRegistry(contentDecoderMap).build())); assertThat(inputStreamFactory.wasCompressionUsed()).isTrue(); } @@ -1078,14 +1106,15 @@ public abstract class AbstractServletWebServerFactoryTests { protected ClientHttpResponse getClientResponse(String url, HttpMethod method, String... headers) throws IOException, URISyntaxException { - return getClientResponse(url, method, new HttpComponentsClientHttpRequestFactory() { + return getClientResponse(url, method, + new HttpComponentsClientHttpRequestFactory(this.httpClientBuilder.get().build()) { - @Override - protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) { - return AbstractServletWebServerFactoryTests.this.httpClientContext; - } + @Override + protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) { + return AbstractServletWebServerFactoryTests.this.httpClientContext; + } - }, headers); + }, headers); } protected ClientHttpResponse getClientResponse(String url, HttpMethod method, diff --git a/spring-boot-tests/pom.xml b/spring-boot-tests/pom.xml deleted file mode 100644 index fc79c4ae829..00000000000 --- a/spring-boot-tests/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../spring-boot-project/spring-boot-parent - - spring-boot-tests - pom - Spring Boot Tests - Spring Boot Test - - ${basedir}/.. - - - - spring-boot-smoke-tests-invoker - spring-boot-integration-tests - - - - - m2e - - - m2e.version - - - - spring-boot-smoke-tests - spring-boot-smoke-tests-invoker - spring-boot-integration-tests - spring-boot-deployment-tests - - - - - - - org.apache.maven.plugins - maven-install-plugin - - true - - - - org.apache.maven.plugins - maven-javadoc-plugin - - true - - true - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/build.gradle b/spring-boot-tests/spring-boot-deployment-tests/build.gradle new file mode 100644 index 00000000000..942627d5faf --- /dev/null +++ b/spring-boot-tests/spring-boot-deployment-tests/build.gradle @@ -0,0 +1,28 @@ +plugins { + id 'war' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.integration-test' +} + +description = "Spring Boot Deployment Tests" + +dependencies { + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')) { + exclude group: 'org.hibernate.validator' + } + + intTestImplementation enforcedPlatform(project(path: ":spring-boot-project:spring-boot-parent")) + intTestImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + intTestImplementation 'org.apache.httpcomponents:httpasyncclient' + intTestImplementation 'org.awaitility:awaitility' + intTestImplementation 'org.testcontainers:testcontainers' + intTestImplementation 'org.springframework:spring-web' + + providedRuntime project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + + runtimeOnly project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') +} + +intTest { + dependsOn war +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-deployment-tests/pom.xml b/spring-boot-tests/spring-boot-deployment-tests/pom.xml deleted file mode 100644 index 75d26a05f20..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tests - ${revision} - - spring-boot-deployment-tests - pom - Spring Boot Deployment Tests - Spring Boot Deployment Tests - - ${basedir}/../.. - 1.8 - 1200000 - ${settings.localRepository}/.cache/cargo/installs - - - spring-boot-deployment-test-glassfish - spring-boot-deployment-test-tomee - spring-boot-deployment-test-tomcat - spring-boot-deployment-test-wildfly - spring-boot-deployment-test-wlp - - - - - - org.codehaus.cargo - cargo-maven2-plugin - - - ${cargo.container.id} - ${cargo.timeout} - - ${cargo.container.url} - ${cargo.container.download-dir} - - - true - true - - - - - - /bootapp - - http://localhost:${appserver.port}/bootapp - 60000 - - - - - - start-cargo - pre-integration-test - - start - - - - stop-cargo - post-integration-test - - stop - - - - - - - - - org.apache.maven.plugins - maven-install-plugin - - true - - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/pom.xml b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/pom.xml deleted file mode 100644 index 3d2fad57a29..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/pom.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-deployment-tests - ${revision} - - spring-boot-deployment-test-glassfish - war - Spring Boot Glassfish Deployment Test - Spring Boot Glassfish Deployment Test - - ${basedir}/../../.. - 4.1.1 - glassfish4x - https://download.oracle.com/glassfish/${glassfish.version}/release/glassfish-${glassfish.version}.zip - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.hibernate.validator - hibernate-validator - - - - - org.springframework.boot - spring-boot-starter-actuator - - - jakarta.servlet - jakarta.servlet-api - provided - - - org.springframework.boot - spring-boot-starter-test - test - - - - - jdk8 - - 1.8 - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - reserve-network-port - - reserve-network-port - - process-resources - - - appserver.port - appserver.admin.port - appserver.jms.port - appserver.iiop.port - appserver.https.port - appserver.iiops.port - appserver.iiopmutualauth.port - appserver.jmx.port - appserver.osgishell.port - appserver.debugger.port - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - - - - ${appserver.port} - ${appserver.admin.port} - ${appserver.jmx.port} - ${appserver.https.port} - ${appserver.debugger.port} - ${appserver.jms.port} - ${appserver.iiop.port} - ${appserver.iiopmutualauth.port} - ${appserver.iiops.port} - ${appserver.osgishell.port} - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - ${appserver.port} - - - - - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/java/sample/SampleGlassfishDeployApplication.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/java/sample/SampleGlassfishDeployApplication.java deleted file mode 100644 index b37ed0d48eb..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/java/sample/SampleGlassfishDeployApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -@SpringBootApplication -public class SampleGlassfishDeployApplication extends SpringBootServletInitializer { - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/webapp/WEB-INF/glassfish-web.xml b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/webapp/WEB-INF/glassfish-web.xml deleted file mode 100644 index 4ff13ba3c20..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/webapp/WEB-INF/glassfish-web.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/test/java/sample/SampleGlassfishDeployApplicationIT.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/test/java/sample/SampleGlassfishDeployApplicationIT.java deleted file mode 100644 index 491b5d505aa..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/test/java/sample/SampleGlassfishDeployApplicationIT.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Integration Tests for {@link SampleGlassfishDeployApplication}. - */ -public class SampleGlassfishDeployApplicationIT { - - private int port = Integer.valueOf(System.getProperty("port")); - - @Test - void testHome() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/"; - System.out.println(url); - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("Hello World"); - } - - @Test - void testHealth() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/actuator/health"; - System.out.println(url); - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("{\"status\":\"UP\"}"); - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/pom.xml b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/pom.xml deleted file mode 100644 index 2039e27f02a..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/pom.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-deployment-tests - ${revision} - - spring-boot-deployment-test-tomcat - war - Spring Boot Tomcat Deployment Test - Spring Boot Tomcat Deployment Test - - ${basedir}/../../.. - tomcat9x - - https://repo.maven.apache.org/maven2/org/apache/tomcat/tomcat/${tomcat.version}/tomcat-${tomcat.version}.zip - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-actuator - - - jakarta.servlet - jakarta.servlet-api - provided - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - reserve-network-port - - reserve-network-port - - process-resources - - - appserver.port - appserver.ajp.port - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - - - - ${appserver.port} - ${appserver.ajp.port} - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - ${appserver.port} - - - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/main/java/sample/SampleController.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/main/java/sample/SampleController.java deleted file mode 100644 index 7023f3b9900..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/main/java/sample/SampleController.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import java.io.IOException; - -import javax.servlet.http.HttpServletResponse; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class SampleController { - - @RequestMapping("/") - public String hello() { - return "Hello World"; - } - - @RequestMapping("/send-error") - public void sendError(HttpServletResponse response) throws IOException { - response.sendError(500); - } - - @RequestMapping("/exception") - public void exception() { - throw new RuntimeException(); - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/main/java/sample/SampleTomcatDeployApplication.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/main/java/sample/SampleTomcatDeployApplication.java deleted file mode 100644 index 42a0fc03b85..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/main/java/sample/SampleTomcatDeployApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -@SpringBootApplication -public class SampleTomcatDeployApplication extends SpringBootServletInitializer { - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/test/java/sample/SampleTomcatDeployApplicationIT.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/test/java/sample/SampleTomcatDeployApplicationIT.java deleted file mode 100644 index a4c9f144105..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomcat/src/test/java/sample/SampleTomcatDeployApplicationIT.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import java.net.URI; - -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Integration Tests for {@link SampleTomcatDeployApplication}. - */ -public class SampleTomcatDeployApplicationIT { - - private final TestRestTemplate rest = new TestRestTemplate(); - - private int port = Integer.valueOf(System.getProperty("port")); - - @Test - void testHome() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/"; - ResponseEntity entity = this.rest.getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("Hello World"); - } - - @Test - void testHealth() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/actuator/health"; - System.out.println(url); - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("{\"status\":\"UP\"}"); - } - - @Test - void errorFromExceptionForRequestAcceptingAnythingProducesAJsonResponse() throws Exception { - assertThatPathProducesExpectedResponse("/bootapp/exception", MediaType.ALL, MediaType.APPLICATION_JSON); - } - - @Test - void errorFromExceptionForRequestAcceptingJsonProducesAJsonResponse() throws Exception { - assertThatPathProducesExpectedResponse("/bootapp/exception", MediaType.APPLICATION_JSON, - MediaType.APPLICATION_JSON); - } - - @Test - void errorFromExceptionForRequestAcceptingHtmlProducesAnHtmlResponse() throws Exception { - assertThatPathProducesExpectedResponse("/bootapp/exception", MediaType.TEXT_HTML, MediaType.TEXT_HTML); - } - - @Test - void sendErrorForRequestAcceptingAnythingProducesAJsonResponse() throws Exception { - assertThatPathProducesExpectedResponse("/bootapp/send-error", MediaType.ALL, MediaType.APPLICATION_JSON); - } - - @Test - void sendErrorForRequestAcceptingJsonProducesAJsonResponse() throws Exception { - assertThatPathProducesExpectedResponse("/bootapp/send-error", MediaType.APPLICATION_JSON, - MediaType.APPLICATION_JSON); - } - - @Test - void sendErrorForRequestAcceptingHtmlProducesAnHtmlResponse() throws Exception { - assertThatPathProducesExpectedResponse("/bootapp/send-error", MediaType.TEXT_HTML, MediaType.TEXT_HTML); - } - - private void assertThatPathProducesExpectedResponse(String path, MediaType accept, MediaType contentType) { - RequestEntity request = RequestEntity.get(URI.create("http://localhost:" + this.port + path)) - .accept(accept).build(); - ResponseEntity response = this.rest.exchange(request, String.class); - assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); - assertThat(contentType.isCompatibleWith(response.getHeaders().getContentType())) - .as("%s is compatible with %s", contentType, response.getHeaders().getContentType()).isTrue(); - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/pom.xml b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/pom.xml deleted file mode 100644 index f06085fd1c6..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/pom.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-deployment-tests - ${revision} - - spring-boot-deployment-test-tomee - war - Spring Boot TomEE Deployment Test - Spring Boot TomEE Deployment Test - - ${basedir}/../../.. - 8.0.0 - tomee1x - - https://archive.apache.org/dist/tomee/tomee-${tomee.version}/apache-tomee-${tomee.version}-webprofile.zip - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.hibernate.validator - hibernate-validator - - - - - org.springframework.boot - spring-boot-starter-actuator - - - jakarta.servlet - jakarta.servlet-api - provided - - - org.springframework.boot - spring-boot-starter-test - test - - - - - jdk8 - - 1.8 - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - reserve-network-port - - reserve-network-port - - process-resources - - - appserver.port - appserver.ajp.port - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - - - - ${appserver.port} - ${appserver.ajp.port} - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - ${appserver.port} - - - - - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/main/java/sample/SampleController.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/main/java/sample/SampleController.java deleted file mode 100644 index 819f68150b4..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/main/java/sample/SampleController.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class SampleController { - - @GetMapping("/") - public String hello() { - return "Hello World"; - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/main/java/sample/SampleTomEEDeployApplication.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/main/java/sample/SampleTomEEDeployApplication.java deleted file mode 100644 index d9aee11660d..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/main/java/sample/SampleTomEEDeployApplication.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -@SpringBootApplication -public class SampleTomEEDeployApplication extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(SampleTomEEDeployApplication.class); - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/test/java/sample/SampleTomEEDeployApplicationIT.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/test/java/sample/SampleTomEEDeployApplicationIT.java deleted file mode 100644 index cb9acd56c6e..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-tomee/src/test/java/sample/SampleTomEEDeployApplicationIT.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Integration Tests for {@link SampleTomEEDeployApplication}. - */ -public class SampleTomEEDeployApplicationIT { - - private int port = Integer.valueOf(System.getProperty("port")); - - @Test - void testHome() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/"; - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("Hello World"); - } - - @Test - void testHealth() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/actuator/health"; - System.out.println(url); - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("{\"status\":\"UP\"}"); - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/pom.xml b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/pom.xml deleted file mode 100644 index cb572e6c5ca..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-deployment-tests - ${revision} - - spring-boot-deployment-test-wildfly - war - Spring Boot WildFly Deployment Test - Spring Boot WildFly Deployment Test - - ${basedir}/../../.. - 12.0.0.Final - wildfly12x - https://download.jboss.org/wildfly/${wildfly.version}/wildfly-${wildfly.version}.zip - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-actuator - - - jakarta.servlet - jakarta.servlet-api - provided - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - reserve-network-port - - reserve-network-port - - process-resources - - - appserver.port - appserver.ajp.port - appserver.transaction.port - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - - - - ${appserver.port} - ${appserver.ajp.port} - - ${appserver.transaction.port} - - standalone-full - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - ${appserver.port} - - - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/java/sample/SampleWildFlyDeployApplication.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/java/sample/SampleWildFlyDeployApplication.java deleted file mode 100644 index 3385e2d3489..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/java/sample/SampleWildFlyDeployApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -@SpringBootApplication -public class SampleWildFlyDeployApplication extends SpringBootServletInitializer { - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/webapp/WEB-INF/jboss-deployment-structure.xml deleted file mode 100644 index 5e5bd73881c..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/main/webapp/WEB-INF/jboss-deployment-structure.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/test/java/sample/SampleWildFlyDeployApplicationIT.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/test/java/sample/SampleWildFlyDeployApplicationIT.java deleted file mode 100644 index 001ffe6f5bb..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wildfly/src/test/java/sample/SampleWildFlyDeployApplicationIT.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Integration Tests for {@link SampleWildFlyDeployApplication}. - */ -public class SampleWildFlyDeployApplicationIT { - - private int port = Integer.valueOf(System.getProperty("port")); - - @Test - void testHome() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/"; - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("Hello World"); - } - - @Test - void testHealth() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/actuator/health"; - System.out.println(url); - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("{\"status\":\"UP\"}"); - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/pom.xml b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/pom.xml deleted file mode 100644 index b8b7ca8706a..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-deployment-tests - ${revision} - - spring-boot-deployment-test-wlp - war - Spring Boot WebSphere Liberty Profile Deployment Test - Spring Boot WebSphere Liberty Profile Deployment Test - - ${basedir}/../../.. - 18.0.0.1 - liberty - https://repo.maven.apache.org/maven2/com/ibm/websphere/appserver/runtime/wlp-webProfile7/${wlp.version}/wlp-webProfile7-${wlp.version}.zip - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-actuator - - - jakarta.servlet - jakarta.servlet-api - provided - - - org.springframework.boot - spring-boot-starter-test - test - - - - - jdk8 - - 1.8 - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - reserve-network-port - - reserve-network-port - - process-resources - - - appserver.port - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - - - - ${appserver.port} - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - ${appserver.port} - - - - - - - - diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/main/java/sample/SampleController.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/main/java/sample/SampleController.java deleted file mode 100644 index 819f68150b4..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/main/java/sample/SampleController.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class SampleController { - - @GetMapping("/") - public String hello() { - return "Hello World"; - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/test/java/sample/SampleWlpDeployApplicationIT.java b/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/test/java/sample/SampleWlpDeployApplicationIT.java deleted file mode 100644 index 64b2ca48476..00000000000 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/test/java/sample/SampleWlpDeployApplicationIT.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2012-2019 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 sample; - -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Integration Tests for {@link SampleWlpDeployApplication}. - */ -public class SampleWlpDeployApplicationIT { - - private int port = Integer.valueOf(System.getProperty("port")); - - @Test - void testHome() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/"; - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("Hello World"); - } - - @Test - void testHealth() throws Exception { - String url = "http://localhost:" + this.port + "/bootapp/actuator/health"; - System.out.println(url); - ResponseEntity entity = new TestRestTemplate().getForEntity(url, String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(entity.getBody()).isEqualTo("{\"status\":\"UP\"}"); - } - -} diff --git a/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/DeploymentIntegrationTests.java b/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/DeploymentIntegrationTests.java new file mode 100644 index 00000000000..3e892569f44 --- /dev/null +++ b/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/DeploymentIntegrationTests.java @@ -0,0 +1,139 @@ +/* + * Copyright 2012-2019 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 sample; + +import java.io.File; +import java.time.Duration; +import java.util.Arrays; +import java.util.List; +import java.util.function.Consumer; + +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.client.StandardHttpRequestRetryHandler; +import org.awaitility.Awaitility; +import org.awaitility.core.ConditionTimeoutException; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; + +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Deployment integration tests. + */ +class DeploymentIntegrationTests { + + @ParameterizedTest + @MethodSource("deployedApplications") + void home(DeployedApplication app) throws Exception { + app.test((rest) -> { + ResponseEntity response = rest.getForEntity("/", String.class); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(response.getBody()).isEqualTo("Hello World"); + }); + } + + @ParameterizedTest + @MethodSource("deployedApplications") + void health(DeployedApplication application) throws Exception { + application.test((rest) -> { + ResponseEntity response = rest.getForEntity("/actuator/health", String.class); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(response.getBody()).isEqualTo("{\"status\":\"UP\"}"); + }); + } + + static List deployedApplications() { + return Arrays.asList(new DeployedApplication("open-liberty:19.0.0.9-webProfile8", "/config/dropins", 9080), + new DeployedApplication("tomcat:9.0.29-jdk8-openjdk", "/usr/local/tomcat/webapps", 8080), + new DeployedApplication("tomee:11-jre-8.0.0-M3-webprofile", "/usr/local/tomee/webapps", 8080), + new DeployedApplication("jboss/wildfly:18.0.1.Final", "/opt/jboss/wildfly/standalone/deployments/", + 8080)); + } + + public static final class DeployedApplication { + + private final String baseImage; + + private final String deploymentLocation; + + private final int port; + + private DeployedApplication(String baseImage, String deploymentLocation, int port) { + this.baseImage = baseImage; + this.deploymentLocation = deploymentLocation; + this.port = port; + } + + private void test(Consumer consumer) { + try (WarDeploymentContainer container = new WarDeploymentContainer(this.baseImage, this.deploymentLocation, + this.port)) { + container.start(); + TestRestTemplate rest = new TestRestTemplate(new RestTemplateBuilder() + .rootUri("http://" + container.getContainerIpAddress() + ":" + + container.getMappedPort(this.port) + "/spring-boot") + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory(HttpClients.custom() + .setRetryHandler(new StandardHttpRequestRetryHandler(10, false)).build()))); + try { + Awaitility.await().atMost(Duration.ofMinutes(10)).until(() -> { + try { + consumer.accept(rest); + return true; + } + catch (Throwable ex) { + return false; + } + }); + } + catch (ConditionTimeoutException ex) { + System.out.println(container.getLogs()); + throw ex; + } + } + } + + public String toString() { + return this.baseImage; + } + + } + + private static final class WarDeploymentContainer extends GenericContainer { + + private WarDeploymentContainer(String baseImage, String deploymentLocation, int port) { + super(new ImageFromDockerfile().withFileFromFile("spring-boot.war", findWarToDeploy()) + .withDockerfileFromBuilder((builder) -> builder.from(baseImage) + .add("spring-boot.war", deploymentLocation + "/spring-boot.war").build())); + withExposedPorts(port).withStartupTimeout(Duration.ofMinutes(10)); + } + + private static File findWarToDeploy() { + File[] candidates = new File("build/libs").listFiles(); + assertThat(candidates).hasSize(1); + return candidates[0]; + } + + } + +} diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/main/java/sample/SampleWlpDeployApplication.java b/spring-boot-tests/spring-boot-deployment-tests/src/main/java/sample/DeploymentTestApplication.java similarity index 91% rename from spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/main/java/sample/SampleWlpDeployApplication.java rename to spring-boot-tests/spring-boot-deployment-tests/src/main/java/sample/DeploymentTestApplication.java index e1cda220c3b..38c310428b9 100644 --- a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-wlp/src/main/java/sample/SampleWlpDeployApplication.java +++ b/spring-boot-tests/spring-boot-deployment-tests/src/main/java/sample/DeploymentTestApplication.java @@ -20,6 +20,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication -public class SampleWlpDeployApplication extends SpringBootServletInitializer { +public class DeploymentTestApplication extends SpringBootServletInitializer { } diff --git a/spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/java/sample/SampleController.java b/spring-boot-tests/spring-boot-deployment-tests/src/main/java/sample/SampleController.java similarity index 100% rename from spring-boot-tests/spring-boot-deployment-tests/spring-boot-deployment-test-glassfish/src/main/java/sample/SampleController.java rename to spring-boot-tests/spring-boot-deployment-tests/src/main/java/sample/SampleController.java diff --git a/spring-boot-tests/spring-boot-integration-tests/pom.xml b/spring-boot-tests/spring-boot-integration-tests/pom.xml deleted file mode 100644 index 16c814635a7..00000000000 --- a/spring-boot-tests/spring-boot-integration-tests/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-tests - ${revision} - - spring-boot-integration-tests - pom - Spring Boot Integration Tests - Spring Boot Integration Tests - - ${basedir}/../.. - 1.8 - - - spring-boot-configuration-processor-tests - spring-boot-devtools-tests - spring-boot-server-tests - spring-boot-launch-script-tests - - - - - org.apache.maven.plugins - maven-install-plugin - - true - - - - - diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-configuration-processor-tests/build.gradle b/spring-boot-tests/spring-boot-integration-tests/spring-boot-configuration-processor-tests/build.gradle new file mode 100644 index 00000000000..92038132c0e --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-configuration-processor-tests/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = "Spring Boot Configuration Processor Tests" + +dependencies { + annotationProcessor project(':spring-boot-project:spring-boot-tools:spring-boot-configuration-processor') + + implementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + implementation project(':spring-boot-project:spring-boot') + implementation 'jakarta.validation:jakarta.validation-api' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-configuration-metadata') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-configuration-processor-tests/pom.xml b/spring-boot-tests/spring-boot-integration-tests/spring-boot-configuration-processor-tests/pom.xml deleted file mode 100644 index 8b8d7363d26..00000000000 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-configuration-processor-tests/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-integration-tests - ${revision} - - spring-boot-configuration-processor-tests - Spring Boot Configuration Processor Tests - ${project.name} - - ${basedir}/../../.. - - - - org.springframework.boot - spring-boot - - - org.springframework.boot - spring-boot-configuration-metadata - - - jakarta.validation - jakarta.validation-api - - - org.springframework.boot - spring-boot-configuration-processor - true - - - org.springframework.boot - spring-boot-starter-test - test - - - diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/pom.xml b/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/pom.xml deleted file mode 100644 index 1eae491ae05..00000000000 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-devtools-tests/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-integration-tests - ${revision} - - spring-boot-devtools-tests - Spring Boot DevTools Tests - ${project.name} - - ${basedir}/../../.. - - - - org.springframework.boot - spring-boot-devtools - - - org.springframework.boot - spring-boot-starter-web - - - net.bytebuddy - byte-buddy - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-test-support - test - - - org.awaitility - awaitility - test - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-dependencies - process-test-resources - - copy-dependencies - - - runtime - ${project.build.directory}/dependencies - true - true - - - - - - - diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/build.gradle b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/build.gradle new file mode 100644 index 00000000000..4ae4cbceb4e --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'java' + id 'org.springframework.boot' +} + +apply plugin: 'io.spring.dependency-management' + +repositories { + maven { url "file:$rootDir/../int-test-maven-repository"} + mavenCentral() + maven { url 'https://repo.spring.io/snapshot' } + maven { url 'https://repo.spring.io/milestone' } +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' +} + +bootJar { + launchScript() +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/settings.gradle b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/settings.gradle new file mode 100644 index 00000000000..85bf6bdb43e --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/settings.gradle @@ -0,0 +1,15 @@ +pluginManagement { + repositories { + maven { url "file:$rootDir/../int-test-maven-repository"} + mavenCentral() + maven { url 'https://repo.spring.io/snapshot' } + maven { url 'https://repo.spring.io/milestone' } + } + resolutionStrategy { + eachPlugin { + if (requested.id.id == 'org.springframework.boot') { + useModule "org.springframework.boot:spring-boot-gradle-plugin:${requested.version}" + } + } + } +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/main/java/org/springframework/boot/launchscript/LaunchScriptTestApplication.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/src/main/java/org/springframework/boot/launchscript/LaunchScriptTestApplication.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/main/java/org/springframework/boot/launchscript/LaunchScriptTestApplication.java rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/src/main/java/org/springframework/boot/launchscript/LaunchScriptTestApplication.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/main/java/org/springframework/boot/launchscript/LaunchVerificationController.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/src/main/java/org/springframework/boot/launchscript/LaunchVerificationController.java similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/main/java/org/springframework/boot/launchscript/LaunchVerificationController.java rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/app/src/main/java/org/springframework/boot/launchscript/LaunchVerificationController.java diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/build.gradle b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/build.gradle new file mode 100644 index 00000000000..5d7f20909b8 --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/build.gradle @@ -0,0 +1,45 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' + id 'org.springframework.boot.integration-test' +} + +description = "Spring Boot Launch Script Integration Tests" + +configurations { + app +} + +dependencies { + app project(path: ':spring-boot-project:spring-boot-tools:spring-boot-gradle-plugin', configuration: 'mavenRepository') + app project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-web', configuration: 'mavenRepository') + + intTestImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-parent')) + intTestImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + intTestImplementation 'org.testcontainers:testcontainers' +} + +task syncMavenRepository(type: Sync) { + from configurations.app + into "$buildDir/int-test-maven-repository" +} + +task syncAppSource(type: Sync) { + from 'app' + into "$buildDir/app" + filter { line -> + line.replace("id 'org.springframework.boot'", "id 'org.springframework.boot' version '${project.version}'") + } +} + +task buildApp(type: GradleBuild) { + dependsOn syncAppSource, syncMavenRepository + dir = "$buildDir/app" + startParameter.buildCacheEnabled = false + tasks = ['build'] +} + +intTest { + dependsOn buildApp + enabled = !JavaVersion.current().java9Compatible +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/pom.xml b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/pom.xml deleted file mode 100644 index f74e08f87bd..00000000000 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/pom.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-integration-tests - ${revision} - - spring-boot-launch-script-tests - jar - Spring Boot Launch Script Integration Tests - Spring Boot Launch Script Integration Tests - - ${basedir}/../../.. - 2.27 - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-starter-test - test - - - org.slf4j - jcl-over-slf4j - - - javax.ws.rs - javax.ws.rs-api - - - javax.annotation - javax.annotation-api - - - - - jakarta.ws.rs - jakarta.ws.rs-api - - - org.testcontainers - testcontainers - test - - - javax.annotation - javax.annotation-api - - - javax.xml.bind - jaxb-api - - - org.hamcrest - hamcrest-core - - - - - - - docker - - - - org.springframework.boot - spring-boot-maven-plugin - - true - - - - - repackage - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - - integration-test - verify - - - - - - - - - diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIntegrationTests.java similarity index 94% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIntegrationTests.java index a4014dcb470..2f1f4ea3d01 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIntegrationTests.java @@ -42,7 +42,7 @@ import static org.hamcrest.Matchers.containsString; * @author Andy Wilkinson * @author Ali Shahbour */ -class SysVinitLaunchScriptIT { +class SysVinitLaunchScriptIntegrationTests { private static final char ESC = 27; @@ -279,7 +279,7 @@ class SysVinitLaunchScriptIT { static List parameters() { List parameters = new ArrayList<>(); - for (File os : new File("src/test/resources/conf").listFiles()) { + for (File os : new File("src/intTest/resources/conf").listFiles()) { for (File version : os.listFiles()) { parameters.add(new Object[] { os.getName(), version.getName() }); } @@ -333,25 +333,22 @@ class SysVinitLaunchScriptIT { private LaunchScriptTestContainer(String os, String version, String testScript) { super(new ImageFromDockerfile("spring-boot-launch-script/" + os.toLowerCase() + "-" + version) .withFileFromFile("Dockerfile", - new File("src/test/resources/conf/" + os + "/" + version + "/Dockerfile")) - .withFileFromFile("spring-boot-launch-script-tests.jar", findApplication()) - .withFileFromFile("test-functions.sh", new File("src/test/resources/scripts/test-functions.sh"))); - withCopyFileToContainer(MountableFile.forHostPath("src/test/resources/scripts/" + testScript), + new File("src/intTest/resources/conf/" + os + "/" + version + "/Dockerfile")) + .withFileFromFile("app.jar", findApplication()).withFileFromFile("test-functions.sh", + new File("src/intTest/resources/scripts/test-functions.sh"))); + withCopyFileToContainer(MountableFile.forHostPath("src/intTest/resources/scripts/" + testScript), "/" + testScript); withCommand("/bin/bash", "-c", "chmod +x " + testScript + " && ./" + testScript); withStartupTimeout(Duration.ofMinutes(10)); } private static File findApplication() { - File targetDir = new File("target"); - for (File file : targetDir.listFiles()) { - if (file.getName().startsWith("spring-boot-launch-script-tests") && file.getName().endsWith(".jar") - && !file.getName().endsWith("-sources.jar")) { - return file; - } + File appJar = new File("build/app/build/libs/app.jar"); + if (appJar.isFile()) { + return appJar; } throw new IllegalStateException( - "Could not find test application in target directory. Have you built it (mvn package)?"); + "Could not find test application in build/app/build/libs directory. Have you built it?"); } } diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/CentOS/6.9-a23bced6/Dockerfile b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/CentOS/6.9-a23bced6/Dockerfile similarity index 85% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/CentOS/6.9-a23bced6/Dockerfile rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/CentOS/6.9-a23bced6/Dockerfile index 70513764d0f..c97b60e6029 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/CentOS/6.9-a23bced6/Dockerfile +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/CentOS/6.9-a23bced6/Dockerfile @@ -7,5 +7,5 @@ RUN yum install -y wget && \ https://cdn.azul.com/zulu/bin/zulu8.21.0.1-jdk8.0.131-linux.x86_64.rpm && \ yum --nogpg localinstall -y jdk.rpm && \ rm -f jdk.rpm -ADD spring-boot-launch-script-tests.jar /spring-boot-launch-script-tests.jar +ADD app.jar /app.jar ADD test-functions.sh /test-functions.sh \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/trusty-20160914/Dockerfile b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/Ubuntu/trusty-20160914/Dockerfile similarity index 84% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/trusty-20160914/Dockerfile rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/Ubuntu/trusty-20160914/Dockerfile index cf95d7cacfa..7e7a726f494 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/trusty-20160914/Dockerfile +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/Ubuntu/trusty-20160914/Dockerfile @@ -6,5 +6,5 @@ RUN apt-get update && \ curl -L https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u202-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz | tar zx --strip-components=1 ENV JAVA_HOME /opt/openjdk ENV PATH $JAVA_HOME/bin:$PATH -ADD spring-boot-launch-script-tests.jar /spring-boot-launch-script-tests.jar +ADD app.jar /app.jar ADD test-functions.sh /test-functions.sh \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/xenial-20160914/Dockerfile b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/Ubuntu/xenial-20160914/Dockerfile similarity index 84% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/xenial-20160914/Dockerfile rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/Ubuntu/xenial-20160914/Dockerfile index d1a37468b5a..8f8cae543fc 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/xenial-20160914/Dockerfile +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/conf/Ubuntu/xenial-20160914/Dockerfile @@ -6,5 +6,5 @@ RUN apt-get update && \ curl -L https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u202-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz | tar zx --strip-components=1 ENV JAVA_HOME /opt/openjdk ENV PATH $JAVA_HOME/bin:$PATH -ADD spring-boot-launch-script-tests.jar /spring-boot-launch-script-tests.jar +ADD app.jar /app.jar ADD test-functions.sh /test-functions.sh \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/logback.xml b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/logback.xml similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/logback.xml rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/logback.xml diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/basic-launch.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/basic-launch.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/basic-launch.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/basic-launch.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/force-stop-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/force-stop-when-stopped.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/force-stop-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/force-stop-when-stopped.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-double-link-single-java-opt.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-double-link-single-java-opt.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-double-link-single-java-opt.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-double-link-single-java-opt.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-log-folder.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-missing-log-folder.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-log-folder.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-missing-log-folder.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-pid-folder.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-missing-pid-folder.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-pid-folder.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-missing-pid-folder.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-command-line-arguments.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-multiple-command-line-arguments.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-command-line-arguments.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-multiple-command-line-arguments.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-java-opts.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-multiple-java-opts.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-java-opts.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-multiple-java-opts.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-run-args.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-multiple-run-args.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-run-args.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-multiple-run-args.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-log-folder.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-relative-log-folder.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-log-folder.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-relative-log-folder.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-pid-folder.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-relative-pid-folder.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-pid-folder.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-relative-pid-folder.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-invalid-user.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-run-as-invalid-user.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-invalid-user.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-run-as-invalid-user.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-preferred-to-jar-owner.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-run-as-user-preferred-to-jar-owner.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-preferred-to-jar-owner.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-run-as-user-preferred-to-jar-owner.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-root-required.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-run-as-user-root-required.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-root-required.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-run-as-user-root-required.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-run-as-user.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-run-as-user.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-command-line-argument.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-single-command-line-argument.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-command-line-argument.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-single-command-line-argument.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-java-opt.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-single-java-opt.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-java-opt.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-single-java-opt.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-run-arg.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-single-run-arg.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-run-arg.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-single-run-arg.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-use-of-start-stop-daemon-disabled.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-use-of-start-stop-daemon-disabled.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-use-of-start-stop-daemon-disabled.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/launch-with-use-of-start-stop-daemon-disabled.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-changed-when-created.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/log-file-ownership-is-changed-when-created.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-changed-when-created.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/log-file-ownership-is-changed-when-created.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-unchanged-when-exists.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/log-file-ownership-is-unchanged-when-exists.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-unchanged-when-exists.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/log-file-ownership-is-unchanged-when-exists.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/log-file-ownership.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/log-file-ownership.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-file-ownership.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/pid-file-ownership.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-file-ownership.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/pid-file-ownership.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-folder-ownership.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/pid-folder-ownership.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-folder-ownership.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/pid-folder-ownership.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-started.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/restart-when-started.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-started.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/restart-when-started.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/restart-when-stopped.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/restart-when-stopped.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-started.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/start-when-started.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-started.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/start-when-started.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/start-when-stopped.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/start-when-stopped.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-killed.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/status-when-killed.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-killed.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/status-when-killed.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-started.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/status-when-started.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-started.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/status-when-started.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/status-when-stopped.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/status-when-stopped.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/stop-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/stop-when-stopped.sh similarity index 100% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/stop-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/stop-when-stopped.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/test-functions.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/test-functions.sh similarity index 72% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/test-functions.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/test-functions.sh index 903713b888e..e7430eb7707 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/test-functions.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/resources/scripts/test-functions.sh @@ -1,15 +1,15 @@ install_service() { mkdir /test-service - mv /spring-boot-launch-script-tests.jar /test-service/spring-boot-app.jar + mv /app.jar /test-service/spring-boot-app.jar chmod +x /test-service/spring-boot-app.jar ln -s /test-service/spring-boot-app.jar /etc/init.d/spring-boot-app } install_double_link_service() { mkdir /test-service - mv /spring-boot-launch-script-tests.jar /test-service/ - chmod +x /test-service/spring-boot-launch-script-tests.jar - ln -s /test-service/spring-boot-launch-script-tests.jar /test-service/spring-boot-app.jar + mv /app.jar /test-service/ + chmod +x /test-service/app.jar + ln -s /test-service/app.jar /test-service/spring-boot-app.jar ln -s /test-service/spring-boot-app.jar /etc/init.d/spring-boot-app } @@ -41,7 +41,7 @@ await_app() { url=$1 fi end=$(date +%s) - let "end+=30" + let "end+=600" until curl -s $url > /dev/null do now=$(date +%s) diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/build.gradle b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/build.gradle new file mode 100644 index 00000000000..b7c4cd5a04e --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/build.gradle @@ -0,0 +1,51 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = "Spring Boot Server Tests" + +configurations { + testRepository +} + +dependencies { + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support') + + testImplementation 'com.samskivert:jmustache' + testImplementation 'jakarta.servlet:jakarta.servlet-api' + testImplementation 'org.apache.httpcomponents:httpasyncclient' + testImplementation 'org.apache.maven.shared:maven-invoker:3.0.0' + testImplementation 'org.awaitility:awaitility' + testImplementation('org.eclipse.jetty:jetty-webapp') { + exclude group: 'javax.servlet', module: 'javax-servlet-api' + } + testImplementation 'org.springframework:spring-web' + + testRepository project(path: ':spring-boot-project:spring-boot-dependencies', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-tools:spring-boot-maven-plugin', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-parent', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-undertow', configuration: 'mavenRepository') + + testRuntimeOnly project(':spring-boot-project:spring-boot-starters:spring-boot-starter-logging') +} + +task prepareMavenBinaries(type: org.springframework.boot.build.mavenplugin.PrepareMavenBinaries) { + outputDir = file("$buildDir/maven-binaries") + versions '3.6.2' +} + +task syncTestRepository(type: Sync) { + destinationDir = file("${buildDir}/test-repository") + from { + configurations.testRepository + } +} + +test { + dependsOn prepareMavenBinaries, syncTestRepository +} diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/pom.xml b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/pom.xml deleted file mode 100644 index 95ddd77d9c5..00000000000 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/pom.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-integration-tests - ${revision} - - spring-boot-server-tests - jar - Spring Boot Server Tests - - ${basedir}/../../.. - - - - org.springframework.boot - spring-boot-starter-logging - test - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-test-support - test - - - com.samskivert - jmustache - test - - - jakarta.servlet - jakarta.servlet-api - test - - - org.apache.maven.shared - maven-invoker - 3.0.0 - test - - - org.awaitility - awaitility - test - - - org.eclipse.jetty - jetty-webapp - test - - - javax.servlet - javax.servlet-api - - - - - org.springframework - spring-web - test - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${maven.home} - ${repository} - - - - - - diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/AbstractApplicationLauncher.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/AbstractApplicationLauncher.java index 42caaae4d62..d22fa9c8805 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/AbstractApplicationLauncher.java +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/AbstractApplicationLauncher.java @@ -95,7 +95,7 @@ abstract class AbstractApplicationLauncher implements BeforeEachCallback, AfterE } private int awaitServerPort(Process process, File serverPortFile) throws Exception { - Awaitility.waitAtMost(Duration.ofSeconds(30)).until(serverPortFile::length, (length) -> { + Awaitility.waitAtMost(Duration.ofSeconds(180)).until(serverPortFile::length, (length) -> { if (!process.isAlive()) { throw new IllegalStateException("Application failed to start"); } diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/ApplicationBuilder.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/ApplicationBuilder.java index 198c8ec420a..2b028435464 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/ApplicationBuilder.java +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/ApplicationBuilder.java @@ -36,13 +36,11 @@ import org.apache.maven.shared.invoker.InvocationResult; import org.apache.maven.shared.invoker.MavenInvocationException; import org.springframework.util.FileCopyUtils; -import org.springframework.util.StringUtils; import static org.assertj.core.api.Assertions.assertThat; /** - * Builds a Spring Boot application using Maven. To use this class, the {@code maven.home} - * system property must be set. + * Builds a Spring Boot application using Maven. * * @author Andy Wilkinson */ @@ -121,12 +119,9 @@ class ApplicationBuilder { } private File writeSettingsXml(File appFolder) throws IOException { - String repository = System.getProperty("repository"); - if (!StringUtils.hasText(repository)) { - return null; - } Map context = new HashMap<>(); - context.put("repository", repository); + context.put("repository", new File("build/test-repository").toURI().toURL()); + context.put("localRepository", new File("build/local-m2-repository").getAbsolutePath()); File settingsXml = new File(appFolder, "settings.xml"); try (FileWriter out = new FileWriter(settingsXml); FileReader templateReader = new FileReader("src/test/resources/settings-template.xml")) { @@ -160,7 +155,9 @@ class ApplicationBuilder { if (settingsXml != null) { invocation.setUserSettingsFile(settingsXml); } - InvocationResult execute = new DefaultInvoker().execute(invocation); + DefaultInvoker invoker = new DefaultInvoker(); + invoker.setMavenHome(new File("build/maven-binaries/apache-maven-3.6.2")); + InvocationResult execute = invoker.execute(invocation); assertThat(execute.getExitCode()).isEqualTo(0); } diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/EmbeddedServerContainerInvocationContextProvider.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/EmbeddedServerContainerInvocationContextProvider.java index cf09b7fb049..083d0ad3b7c 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/EmbeddedServerContainerInvocationContextProvider.java +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/EmbeddedServerContainerInvocationContextProvider.java @@ -27,6 +27,8 @@ import java.util.Map; import java.util.Set; import java.util.stream.Stream; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.client.StandardHttpRequestRetryHandler; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.Extension; import org.junit.jupiter.api.extension.ExtensionContext; @@ -39,6 +41,7 @@ import org.junit.platform.commons.util.ReflectionUtils; import org.springframework.boot.testsupport.BuildOutput; import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.util.FileSystemUtils; import org.springframework.util.StringUtils; import org.springframework.web.client.ResponseErrorHandler; @@ -154,7 +157,8 @@ class EmbeddedServerContainerInvocationContextProvider @Override public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - RestTemplate rest = new RestTemplate(); + RestTemplate rest = new RestTemplate(new HttpComponentsClientHttpRequestFactory( + HttpClients.custom().setRetryHandler(new StandardHttpRequestRetryHandler(10, false)).build())); rest.setErrorHandler(new ResponseErrorHandler() { @Override diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/ExplodedApplicationLauncher.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/ExplodedApplicationLauncher.java index 2370caa7d11..5e9be691a2d 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/ExplodedApplicationLauncher.java +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/ExplodedApplicationLauncher.java @@ -80,6 +80,7 @@ class ExplodedApplicationLauncher extends AbstractApplicationLauncher { extracted.mkdirs(); } else { + extracted.getParentFile().mkdirs(); FileOutputStream extractedOutputStream = new FileOutputStream(extracted); StreamUtils.copy(jarFile.getInputStream(jarEntry), extractedOutputStream); extractedOutputStream.close(); diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/Versions.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/Versions.java index 5d7a5fbc021..4028cd0255c 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/Versions.java +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/Versions.java @@ -16,43 +16,28 @@ package org.springframework.boot.context.embedded; -import java.io.File; -import java.io.FileReader; - -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathFactory; - -import org.xml.sax.InputSource; - -import org.springframework.util.StringUtils; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Properties; /** - * Provides access to dependency versions by querying the project's pom. + * Provides access to the current Boot version by referring to {@code gradle.properties}. * * @author Andy Wilkinson */ final class Versions { - private static final String PROPERTIES = "/*[local-name()='project']/*[local-name()='properties']"; - private Versions() { } static String getBootVersion() { - String baseDir = StringUtils.cleanPath(new File(".").getAbsolutePath()); - String mainBaseDir = evaluateExpression("pom.xml", PROPERTIES + "/*[local-name()='main.basedir']/text()"); - mainBaseDir = mainBaseDir.replace("${basedir}", baseDir); - return evaluateExpression(mainBaseDir + "/pom.xml", PROPERTIES + "/*[local-name()='revision']/text()"); - } - - private static String evaluateExpression(String file, String expression) { - try { - InputSource source = new InputSource(new FileReader(file)); - XPath xpath = XPathFactory.newInstance().newXPath(); - return xpath.compile(expression).evaluate(source); + Properties gradleProperties = new Properties(); + try (FileInputStream input = new FileInputStream("../../../gradle.properties")) { + gradleProperties.load(input); + return gradleProperties.getProperty("version"); } - catch (Exception ex) { - throw new IllegalStateException("Failed to evaluate expression", ex); + catch (IOException ex) { + throw new RuntimeException(ex); } } diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/resources/settings-template.xml b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/resources/settings-template.xml index 5cf9a073f98..8f5030fac96 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/resources/settings-template.xml +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/resources/settings-template.xml @@ -1,6 +1,7 @@ + {{localRepository}} repository diff --git a/spring-boot-tests/spring-boot-smoke-tests-invoker/pom.xml b/spring-boot-tests/spring-boot-smoke-tests-invoker/pom.xml deleted file mode 100644 index 9dc633c60c3..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests-invoker/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-parent - ${revision} - ../../spring-boot-project/spring-boot-parent - - spring-boot-smoke-tests-invoker - pom - Spring Boot Smoke Tests Invoker - Spring Boot Smoke Tests Invoker - - ${basedir}/../.. - - - - - - org.apache.maven.plugins - maven-invoker-plugin - false - - ${main.basedir}/spring-boot-tests/spring-boot-smoke-tests - ${skipTests} - true - - pom.xml - - - - - integration-test - install - - run - - - - - - org.apache.maven.plugins - maven-antrun-plugin - false - - - clean-smoke-tests - clean - - run - - - - - - - - - - - - - org.apache.maven.plugins - maven-clean-plugin - false - - - clean-smoke-tests - clean - - clean - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/pom.xml deleted file mode 100644 index 10de667638f..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/pom.xml +++ /dev/null @@ -1,206 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - ${revision} - ../../spring-boot-project/spring-boot-starters/spring-boot-starter-parent - - spring-boot-smoke-tests - pom - Spring Boot Smoke Tests - Spring Boot Smoke Tests - - ${basedir}/../.. - 1.8 - false - - - spring-boot-smoke-test-ant - spring-boot-smoke-test-activemq - spring-boot-smoke-test-actuator - spring-boot-smoke-test-actuator-log4j2 - spring-boot-smoke-test-actuator-noweb - spring-boot-smoke-test-actuator-ui - spring-boot-smoke-test-actuator-custom-security - spring-boot-smoke-test-amqp - spring-boot-smoke-test-animated-banner - spring-boot-smoke-test-aop - spring-boot-smoke-test-atmosphere - spring-boot-smoke-test-batch - spring-boot-smoke-test-cache - spring-boot-smoke-test-custom-layout - spring-boot-smoke-test-data-cassandra - spring-boot-smoke-test-data-couchbase - spring-boot-smoke-test-data-elasticsearch - spring-boot-smoke-test-data-jdbc - spring-boot-smoke-test-data-jpa - spring-boot-smoke-test-data-ldap - spring-boot-smoke-test-data-mongodb - spring-boot-smoke-test-data-neo4j - spring-boot-smoke-test-data-redis - spring-boot-smoke-test-data-rest - spring-boot-smoke-test-data-solr - spring-boot-smoke-test-devtools - spring-boot-smoke-test-flyway - spring-boot-smoke-test-hateoas - spring-boot-smoke-test-hibernate52 - spring-boot-smoke-test-integration - spring-boot-smoke-test-jersey - spring-boot-smoke-test-jetty - spring-boot-smoke-test-jetty-jsp - spring-boot-smoke-test-jetty-ssl - spring-boot-smoke-test-jooq - spring-boot-smoke-test-jpa - spring-boot-smoke-test-jta-atomikos - spring-boot-smoke-test-jta-bitronix - spring-boot-smoke-test-jta-jndi - spring-boot-smoke-test-junit-jupiter - spring-boot-smoke-test-junit-vintage - spring-boot-smoke-test-kafka - spring-boot-smoke-test-liquibase - spring-boot-smoke-test-logback - spring-boot-smoke-test-oauth2-client - spring-boot-smoke-test-oauth2-resource-server - spring-boot-smoke-test-parent-context - spring-boot-smoke-test-profile - spring-boot-smoke-test-property-validation - spring-boot-smoke-test-quartz - spring-boot-smoke-test-reactive-oauth2-client - spring-boot-smoke-test-reactive-oauth2-resource-server - spring-boot-smoke-test-rsocket - spring-boot-smoke-test-saml2-service-provider - spring-boot-smoke-test-secure - spring-boot-smoke-test-secure-jersey - spring-boot-smoke-test-secure-webflux - spring-boot-smoke-test-servlet - spring-boot-smoke-test-session - spring-boot-smoke-test-session-webflux - spring-boot-smoke-test-simple - spring-boot-smoke-test-test - spring-boot-smoke-test-test-nomockito - spring-boot-smoke-test-testng - spring-boot-smoke-test-tomcat - spring-boot-smoke-test-tomcat-jsp - spring-boot-smoke-test-tomcat-ssl - spring-boot-smoke-test-tomcat-multi-connectors - spring-boot-smoke-test-traditional - spring-boot-smoke-test-undertow - spring-boot-smoke-test-undertow-ssl - spring-boot-smoke-test-war - spring-boot-smoke-test-web-freemarker - spring-boot-smoke-test-web-groovy-templates - spring-boot-smoke-test-web-jsp - spring-boot-smoke-test-web-method-security - spring-boot-smoke-test-web-mustache - spring-boot-smoke-test-web-secure - spring-boot-smoke-test-web-secure-custom - spring-boot-smoke-test-web-secure-jdbc - spring-boot-smoke-test-web-static - spring-boot-smoke-test-web-ui - spring-boot-smoke-test-webflux - spring-boot-smoke-test-webflux-coroutines - spring-boot-smoke-test-websocket-jetty - spring-boot-smoke-test-websocket-tomcat - spring-boot-smoke-test-websocket-undertow - spring-boot-smoke-test-webservices - spring-boot-smoke-test-xml - - - - - - - org.codehaus.mojo - flatten-maven-plugin - true - - - flatten - process-resources - - flatten - - - true - oss - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*Tests.java - - - **/Abstract*.java - - - file:/dev/./urandom - true - - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - enforce-rules - - enforce - - - - - - commons-logging:*:* - - true - - - true - - - - - - org.apache.maven.plugins - maven-install-plugin - - true - - - - org.apache.maven.plugins - maven-javadoc-plugin - - true - - true - - - - - - fast - - - fast - - - - true - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-activemq/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-activemq/build.gradle new file mode 100644 index 00000000000..b1de23afa16 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-activemq/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Actuator ActiveMQ smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-activemq') + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-activemq/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-activemq/pom.xml deleted file mode 100644 index 94d0db4ada2..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-activemq/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-activemq - Spring Boot ActiveMQ Smoke Test - Spring Boot ActiveMQ Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-activemq - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-custom-security/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-custom-security/build.gradle new file mode 100644 index 00000000000..02c2597511a --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-custom-security/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Actuator custom security smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-freemarker') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + runtimeOnly 'org.jolokia:jolokia-core' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testRuntimeOnly 'org.apache.httpcomponents:httpclient' +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-custom-security/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-custom-security/pom.xml deleted file mode 100644 index de0f0b25f87..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-custom-security/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-actuator-custom-security - Spring Boot Actuator Custom Security Smoke Test - Spring Boot Actuator Custom Security Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-freemarker - - - org.springframework.boot - spring-boot-starter-security - - - org.jolokia - jolokia-core - - - - org.apache.httpcomponents - httpclient - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-log4j2/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-log4j2/build.gradle new file mode 100644 index 00000000000..25f853b4288 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-log4j2/build.gradle @@ -0,0 +1,20 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Actuator Log4j 2 smoke test' + +configurations.all { + exclude module: 'spring-boot-starter-logging' +} + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-log4j2') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-log4j2/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-log4j2/pom.xml deleted file mode 100644 index a697d566f9d..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-log4j2/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-actuator-log4j2 - Spring Boot Actuator Log4j 2 Smoke Test - Spring Boot Actuator Log4j 2 Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-logging - - - - - org.springframework.boot - spring-boot-starter-log4j2 - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-noweb/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-noweb/build.gradle new file mode 100644 index 00000000000..c031508fc06 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-noweb/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Actuator non-web smoke test' + +dependencies { + annotationProcessor project(':spring-boot-project:spring-boot-tools:spring-boot-configuration-processor') + + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-noweb/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-noweb/pom.xml deleted file mode 100644 index 863864bd577..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-noweb/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-actuator-noweb - Spring Boot Actuator Non-Web Smoke Test - Spring Boot Actuator Non-Web Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-actuator - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-ui/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-ui/build.gradle new file mode 100644 index 00000000000..65379711f04 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-ui/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Actuator UI smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-freemarker') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-ui/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-ui/pom.xml deleted file mode 100644 index d53df3d9018..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator-ui/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-actuator-ui - Spring Boot Actuator UI Smoke Test - Spring Boot Actuator UI Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-freemarker - - - org.springframework.boot - spring-boot-starter-security - - - org.jolokia - jolokia-core - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/build.gradle new file mode 100644 index 00000000000..6626aa97dc4 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Actuator smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testRuntimeOnly 'org.apache.httpcomponents:httpclient' +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/pom.xml deleted file mode 100644 index 4093b2cb40c..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-actuator - Spring Boot Actuator Smoke Test - Spring Boot Actuator Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-jdbc - - - - org.apache.httpcomponents - httpclient - runtime - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - true - - - - generate build info - - build-info - - - - ${project.build.sourceEncoding} - ${project.reporting.outputEncoding} - ${maven.compiler.source} - ${maven.compiler.target} - - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/src/main/resources/META-INF/build-info.properties b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/src/main/resources/META-INF/build-info.properties new file mode 100644 index 00000000000..1ca9f928048 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-actuator/src/main/resources/META-INF/build-info.properties @@ -0,0 +1,5 @@ +build.artifact=spring-boot-smoke-test-actuator +build.encoding.source=UTF-8 +build.encoding.reporting=UTF-8 +build.java.source=1.8 +build.java.target=1.8 \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-amqp/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-amqp/build.gradle new file mode 100644 index 00000000000..0d4dbfb422e --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-amqp/build.gradle @@ -0,0 +1,10 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot AMQP smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-amqp') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-amqp/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-amqp/pom.xml deleted file mode 100644 index 66e0dd896ca..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-amqp/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-amqp - Spring Boot AMQP Smoke Test - Spring Boot AMQP Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-amqp - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-animated-banner/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-animated-banner/build.gradle new file mode 100644 index 00000000000..2b04032ab97 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-animated-banner/build.gradle @@ -0,0 +1,10 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot animated banner smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-animated-banner/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-animated-banner/pom.xml deleted file mode 100644 index b62aff03760..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-animated-banner/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-animated-banner - Spring Boot Animated Banner Smoke Test - Spring Boot Animated Banner Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/build.gradle new file mode 100644 index 00000000000..9b26aae89d8 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/build.gradle @@ -0,0 +1,69 @@ +plugins { + id 'org.springframework.boot.conventions' + id 'java-base' +} + +description = 'Spring Boot Ant smoke test' + +configurations { + antDependencies + testRepository +} + +sourceSets { + test +} + +plugins.withType(EclipsePlugin) { + eclipse { + classpath { + plusConfigurations = [configurations.testRuntimeClasspath] + } + } +} + +dependencies { + antDependencies 'org.apache.ivy:ivy:2.4.0' + antDependencies project(path: ':spring-boot-project:spring-boot-tools:spring-boot-antlib') + + testRepository project(path: ':spring-boot-project:spring-boot-tools:spring-boot-loader', configuration: 'mavenRepository') + testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter', configuration: 'mavenRepository') + + testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + testImplementation project(path: ':spring-boot-project:spring-boot-tools:spring-boot-loader-tools') + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.springframework:spring-core' +} + +task syncTestRepository(type: Sync) { + destinationDir = file("${buildDir}/test-repository") + from configurations.testRepository + rename { + it.replaceAll('-[0-9]+\\.[0-9]+-[0-9]+\\.', '-SNAPSHOT.') + } +} + +ant.importBuild('build.xml') { + 'ant' + it +} +ant.properties['ant-spring-boot.version'] = project.version +ant.properties['projectDir'] = project.layout.projectDirectory + +antresolve { + dependsOn syncTestRepository, configurations.antDependencies + doFirst { + ClassLoader antClassLoader = org.apache.tools.ant.Project.class.classLoader + configurations.antDependencies.each { antClassLoader.addURL it.toURI().toURL() } + } +} + +task test(type: Test) { + dependsOn antbuild + testClassesDirs = sourceSets.test.output.classesDirs + classpath = sourceSets.test.runtimeClasspath +} + +check { + dependsOn test +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/build.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/build.xml index 31e50181959..1cc4fcae347 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/build.xml +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/build.xml @@ -11,7 +11,6 @@ actual jars). Run with '$ java -jar target/*.jar'. - @@ -26,11 +25,11 @@ - + - + @@ -38,7 +37,7 @@ - + @@ -48,7 +47,7 @@ - + diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml index a96e5a5c7fb..37ccec0280f 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml @@ -4,8 +4,8 @@ - - + + diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/pom.xml deleted file mode 100644 index cf2a8c96754..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/pom.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-ant - Spring Boot Ant Smoke Test - Spring Boot Ant Smoke Test - - ${basedir}/../../.. - 1.9.3 - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-loader - - - org.springframework.boot - spring-boot-starter-test - - - org.springframework.boot - spring-boot-antlib - ${project.version} - - - - org.springframework.boot - spring-boot-loader-tools - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - default-compile - none - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - antbuild - package - - - - - - - - run - - - - - - org.apache.ant - ant - ${ant.version} - - - org.apache.ivy - ivy - 2.4.0 - - - org.springframework.boot - spring-boot-antlib - ${revision} - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - - integration-test - verify - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/src/test/java/smoketest/ant/SampleAntApplicationIT.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/src/test/java/smoketest/ant/SampleAntApplicationIT.java index 51e870bff40..9d0f7cde7b1 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/src/test/java/smoketest/ant/SampleAntApplicationIT.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/src/test/java/smoketest/ant/SampleAntApplicationIT.java @@ -38,7 +38,7 @@ public class SampleAntApplicationIT { @Test void runJar() throws Exception { - File target = new File("target"); + File target = new File("build/ant/libs"); File[] jarFiles = target.listFiles(new FileFilter() { @Override diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-aop/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-aop/build.gradle new file mode 100644 index 00000000000..7c7c7fa9d33 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-aop/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot AOP smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-aop') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-aop/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-aop/pom.xml deleted file mode 100644 index 8a47c6a21a7..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-aop/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-aop - Spring Boot AOP Smoke Test - Spring Boot AOP Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-aop - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-atmosphere/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-atmosphere/build.gradle new file mode 100644 index 00000000000..75edfaedf15 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-atmosphere/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Atmosphere smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + implementation 'org.atmosphere:atmosphere-runtime:2.4.14' + runtimeOnly 'org.webjars:atmosphere-javascript:2.3.4' + + testImplementation enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.springframework:spring-websocket' +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-atmosphere/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-atmosphere/pom.xml deleted file mode 100644 index d3b7058a5c7..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-atmosphere/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-atmosphere - Spring Boot Atmosphere Smoke Test - Spring Boot Atmosphere Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - javax.inject - javax.inject - 1 - - - org.atmosphere - atmosphere-runtime - 2.4.14 - - - org.webjars - atmosphere-javascript - 2.3.4 - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework - spring-websocket - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-batch/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-batch/build.gradle new file mode 100644 index 00000000000..2af7bc92de8 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-batch/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Batch smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-batch') + runtimeOnly 'org.hsqldb:hsqldb' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-batch/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-batch/pom.xml deleted file mode 100644 index 3249ad312ee..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-batch/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-batch - Spring Boot Batch Smoke Test - Spring Boot Batch Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-batch - - - - org.hsqldb - hsqldb - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/build.gradle new file mode 100644 index 00000000000..3f1c4074360 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/build.gradle @@ -0,0 +1,46 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot cache smoke test' + +def caches = [ + 'caffeine': [ + 'com.github.ben-manes.caffeine:caffeine' + ], + 'couchbase': [ + 'com.couchbase.client:java-client', + 'com.couchbase.client:couchbase-spring-cache' + ], + 'ehcache': [ + 'javax.cache:cache-api', + 'org.ehcache:ehcache' + ], + 'ehcache2': [ + 'net.sf.ehcache:ehcache' + ], + 'hazelcast': [ + 'com.hazelcast:hazelcast', + 'com.hazelcast:hazelcast-spring' + ], + 'infinispan': [ + 'org.infinispan:infinispan-jcache', + 'org.infinispan:infinispan-spring5-embedded' + ], + 'redis': [ + project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-redis') + ] +] + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-cache') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + if (project.hasProperty('cache')) { + caches[project.getProperty('cache')].each { runtimeOnly it } + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/pom.xml deleted file mode 100644 index 79e99e6b2f9..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-cache - Spring Boot Cache Smoke Test - Spring Boot Cache Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-cache - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - - javax.cache - cache-api - - - org.ehcache - ehcache - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/pom.xml deleted file mode 100644 index a87f8d0575b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-custom-layout - Spring Boot Custom Layout Smoke Test - Spring Boot Custom Layout Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-loader-tools - - - - - - org.apache.maven.plugins - maven-invoker-plugin - - ${project.build.directory}/local-repo - - - - prepare-integration-test - pre-integration-test - - install - - - - integration-test - integration-test - - run - - - ${project.build.directory}/it - src/it/settings.xml - verify - true - ${skipTests} - true - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - cleanup-local-integration-repo - pre-integration-test - - run - - - - - - - - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/verify.groovy b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/verify.groovy deleted file mode 100644 index 7da68e56a2e..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/custom/verify.groovy +++ /dev/null @@ -1,6 +0,0 @@ -import java.io.*; -import smoketest.layout.*; - -Verify.verify( - new File(basedir, "target/custom-0.0.1.BUILD-SNAPSHOT.jar"), "custom" -) diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/src/main/java/org/test/SampleApplication.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/src/main/java/org/test/SampleApplication.java deleted file mode 100644 index 672d96a2a60..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/src/main/java/org/test/SampleApplication.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2012-2019 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; - -public class SampleApplication { - - public static void main(String[] args) { - } - -} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/verify.groovy b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/verify.groovy deleted file mode 100644 index aca02ce428a..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/default/verify.groovy +++ /dev/null @@ -1,6 +0,0 @@ -import java.io.*; -import smoketest.layout.*; - -Verify.verify( - new File(basedir, "target/default-0.0.1.BUILD-SNAPSHOT.jar"), "sample" -) diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/settings.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/settings.xml deleted file mode 100644 index e1e0ace341b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/it/settings.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - it-repo - - true - - - - local.central - @localRepositoryUrl@ - - true - - - true - - - - - - local.central - @localRepositoryUrl@ - - true - - - true - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/test/java/smoketest/layout/Verify.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/test/java/smoketest/layout/Verify.java deleted file mode 100644 index f7d5c924e86..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-custom-layout/src/test/java/smoketest/layout/Verify.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2012-2019 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 smoketest.layout; - -import java.io.File; -import java.util.Enumeration; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -public final class Verify { - - private Verify() { - } - - public static void verify(File file, String entry) throws Exception { - try (ZipFile zipFile = new ZipFile(file)) { - Enumeration entries = zipFile.entries(); - while (entries.hasMoreElements()) { - if (entries.nextElement().getName().equals(entry)) { - return; - } - } - throw new AssertionError("No entry " + entry); - } - } - -} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-cassandra/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-cassandra/build.gradle new file mode 100644 index 00000000000..34c0983d74e --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-cassandra/build.gradle @@ -0,0 +1,40 @@ +buildscript { + dependencies { + classpath 'org.springframework:spring-core:5.2.2.RELEASE' + } +} + +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data Cassandra smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-cassandra') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation('org.cassandraunit:cassandra-unit-spring:3.5.0.1') { + exclude group: 'org.slf4j', module: 'jcl-over-slf4j' + } +} + +test { + jvmArgumentProviders.add new CassandraPortsProvider() + enabled = !JavaVersion.current().java9Compatible +} + +class CassandraPortsProvider implements CommandLineArgumentProvider { + + @Override + Iterable asArguments() { + def ports = org.springframework.util.SocketUtils.findAvailableTcpPorts(2) + return [ + "-Dspring.data.cassandra.port=${ports[0]}", + "-Dcassandra.native_transport_port=${ports[0]}", + "-Dcassandra.port.storage=${ports[1]}" + ] + } + +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-cassandra/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-cassandra/pom.xml deleted file mode 100644 index 607cc194ee5..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-cassandra/pom.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-cassandra - Spring Boot Data Cassandra Smoke Test - Spring Boot Data Cassandra Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-data-cassandra - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.cassandraunit - cassandra-unit-spring - 3.5.0.1 - test - - - org.slf4j - jcl-over-slf4j - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - reserve-cassandra-port - - reserve-network-port - - process-resources - - - cassandra.port.native-transport - cassandra.port.storage - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${cassandra.port.native-transport} - ${cassandra.port.native-transport} - ${cassandra.port.storage} - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java9+ - - [9,) - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-couchbase/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-couchbase/build.gradle new file mode 100644 index 00000000000..8480164a8eb --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-couchbase/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data Couchbase smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-couchbase') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-couchbase/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-couchbase/pom.xml deleted file mode 100644 index 58a8b51d99b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-couchbase/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - spring-boot-smoke-tests - org.springframework.boot - ${revision} - - spring-boot-smoke-test-data-couchbase - Spring Boot Data Couchbase Smoke Test - Spring Boot Data Couchbase Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-data-couchbase - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-elasticsearch/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-elasticsearch/build.gradle new file mode 100644 index 00000000000..fa4759b3108 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-elasticsearch/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data Elasticsearch smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-elasticsearch') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-elasticsearch/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-elasticsearch/pom.xml deleted file mode 100644 index a7e1a393692..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-elasticsearch/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-elasticsearch - Spring Boot Data Elasticsearch Smoke Test - Spring Boot Data Elasticsearch Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-data-elasticsearch - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jdbc/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jdbc/build.gradle new file mode 100644 index 00000000000..b91d1d72fb2 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jdbc/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data JDBC smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jdbc') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jdbc/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jdbc/pom.xml deleted file mode 100755 index d631952f915..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jdbc/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-jdbc - Spring Boot Data JDBC Smoke Test - Spring Boot Data JDBC Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-data-jdbc - - - org.springframework.boot - spring-boot-starter-web - - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jpa/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jpa/build.gradle new file mode 100644 index 00000000000..01abdb2150b --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jpa/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data JPA smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jpa/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jpa/pom.xml deleted file mode 100755 index 6a616898b38..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-jpa/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-jpa - Spring Boot Data JPA Smoke Test - Spring Boot Data JPA Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-web - - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-ldap/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-ldap/build.gradle new file mode 100644 index 00000000000..abcf5208e94 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-ldap/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data LDAP smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-ldap') + runtimeOnly 'com.unboundid:unboundid-ldapsdk' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-ldap/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-ldap/pom.xml deleted file mode 100644 index 5dd86ff90bf..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-ldap/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-ldap - Spring Boot Data LDAP Smoke Test - Spring Boot Data LDAP Smoke Test - - ${basedir}/../../.. - - - - - com.unboundid - unboundid-ldapsdk - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-data-ldap - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongodb/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongodb/build.gradle new file mode 100644 index 00000000000..9d31618775a --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongodb/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data MongoDB smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-mongodb') + runtimeOnly 'de.flapdoodle.embed:de.flapdoodle.embed.mongo' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongodb/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongodb/pom.xml deleted file mode 100644 index 5b6c9509c0d..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongodb/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-mongodb - Spring Boot Data MongoDB Smoke Test - Spring Boot Data MongoDB Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-data-mongodb - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-neo4j/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-neo4j/build.gradle new file mode 100644 index 00000000000..0a5d557bdde --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-neo4j/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data Neo4j smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-neo4j') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-neo4j/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-neo4j/pom.xml deleted file mode 100644 index 071ef996195..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-neo4j/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-neo4j - Spring Boot Data Neo4j Smoke Test - Spring Boot Data Neo4j Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-data-neo4j - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-redis/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-redis/build.gradle new file mode 100644 index 00000000000..9fb80910086 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-redis/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data Redis smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-redis') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-redis/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-redis/pom.xml deleted file mode 100644 index f354ac153ee..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-redis/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-redis - Spring Boot Data Redis Smoke Test - Spring Boot Data Redis Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - production - - - - commons-pool - commons-pool - pom.lastUpdated - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-rest/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-rest/build.gradle new file mode 100644 index 00000000000..5eb48573187 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-rest/build.gradle @@ -0,0 +1,19 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data REST smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa') + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-rest')) { + exclude module: 'spring-boot-starter-tomcat' + } + implementation 'com.h2database:h2' + + runtimeOnly project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testRuntimeOnly 'com.jayway.jsonpath:json-path' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-rest/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-rest/pom.xml deleted file mode 100644 index 8268687c67a..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-rest/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-rest - Spring Boot Data REST Smoke Test - Spring Boot Data REST Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-jetty - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-data-rest - - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - com.jayway.jsonpath - json-path - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java9+ - - [9,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-solr/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-solr/build.gradle new file mode 100644 index 00000000000..9575c1022e7 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-solr/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Data Solr smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-solr') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-solr/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-solr/pom.xml deleted file mode 100644 index 69ba3dfcead..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-solr/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-data-solr - Spring Boot Data Solr Smoke Test - Spring Boot Data Solr Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-data-solr - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-devtools/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-devtools/build.gradle new file mode 100644 index 00000000000..f451df2412a --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-devtools/build.gradle @@ -0,0 +1,20 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot DevTools smoke test' + +configurations { + developmentOnly + runtimeClasspath.extendsFrom developmentOnly +} + +dependencies { + developmentOnly project(':spring-boot-project:spring-boot-devtools') + + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-thymeleaf') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-devtools/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-devtools/pom.xml deleted file mode 100644 index bdab3466c04..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-devtools/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-devtools - Spring Boot Developer Tools Smoke Test - Spring Boot Developer Tools Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-devtools - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-flyway/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-flyway/build.gradle new file mode 100644 index 00000000000..408d0ff3eaf --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-flyway/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Flyway smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + runtimeOnly 'com.h2database:h2' + runtimeOnly 'org.flywaydb:flyway-core' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-flyway/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-flyway/pom.xml deleted file mode 100644 index 8bf6446af77..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-flyway/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-flyway - Spring Boot Flyway Smoke Test - Spring Boot Flyway Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - org.flywaydb - flyway-core - - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java9+ - - [9,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hateoas/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hateoas/build.gradle new file mode 100644 index 00000000000..8b8163d1508 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hateoas/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot HATEOAS smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-hateoas') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hateoas/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hateoas/pom.xml deleted file mode 100644 index b1249779340..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hateoas/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-hateoas - Spring Boot Hateoas Smoke Test - Spring Boot Hateoas Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-hateoas - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate52/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate52/build.gradle new file mode 100644 index 00000000000..25972c05c17 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate52/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Hibernate 5.2 smoke test' + +configurations.all { + resolutionStrategy { + force 'org.hibernate:hibernate-core:5.2.17.Final' + } +} + +dependencies { + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa')) { + exclude group: 'org.hibernate.javax.persistence', module: 'hibernate-jpa-2.1-api' + } + + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate52/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate52/pom.xml deleted file mode 100755 index 526fd2f360c..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate52/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-hibernate52 - Spring Boot Hibernate 5.2 Smoke Tests - ${project.name} - - ${basedir}/../../.. - 5.2.17.Final - - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-integration/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-integration/build.gradle new file mode 100644 index 00000000000..960f09ca564 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-integration/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Integration smoke test' + +dependencies { + annotationProcessor project(':spring-boot-project:spring-boot-tools:spring-boot-configuration-processor') + + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-integration') + implementation 'org.springframework.integration:spring-integration-file' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.awaitility:awaitility' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-integration/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-integration/pom.xml deleted file mode 100644 index 9c2026d12b6..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-integration/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-integration - Spring Boot Integration Smoke Test - Spring Boot Integration Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-integration - - - org.springframework.integration - spring-integration-file - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.awaitility - awaitility - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jersey/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jersey/build.gradle new file mode 100644 index 00000000000..7a3b3c2a2e2 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jersey/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Jersey smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jersey') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + + if (JavaVersion.current().java9Compatible) { + runtimeOnly 'jakarta.xml.bind:jakarta.xml.bind-api' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jersey/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jersey/pom.xml deleted file mode 100644 index d2d2b2164a6..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jersey/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jersey - Spring Boot Jersey Smoke Test - Spring Boot Jersey Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-jersey - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-tomcat - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - generate build info - - build-info - - - - - - - - - java9+ - - [9,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-jsp/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-jsp/build.gradle new file mode 100644 index 00000000000..75490b6c9c3 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-jsp/build.gradle @@ -0,0 +1,25 @@ +plugins { + id 'war' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Jetty JSP smoke test' + +dependencies { + compileOnly 'jakarta.servlet:jakarta.servlet-api' + compileOnly project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty') + + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')) { + exclude module: 'spring-boot-starter-tomcat' + } + + providedRuntime enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + providedRuntime('org.eclipse.jetty:apache-jsp') { + exclude group: 'javax.annotation', module: 'javax.annotation-api' + } + + runtimeOnly 'javax.servlet:jstl' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-jsp/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-jsp/pom.xml deleted file mode 100644 index 795f4ddc70d..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-jsp/pom.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jetty-jsp - war - Spring Boot Jetty JSP Smoke Test - Spring Boot Jetty JSP Smoke Test - - ${basedir}/../../.. - / - 3.1.0 - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - javax.servlet - jstl - - - - org.springframework.boot - spring-boot-starter-jetty - provided - - - jakarta.servlet - jakarta.servlet-api - - - - - org.eclipse.jetty - apache-jsp - provided - - - javax.annotation - javax.annotation-api - - - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - true - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - enforce-rules - - enforce - - - - - - javax.servlet:javax.servlet-api:* - - true - - - true - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - - - - java9+ - - [9,) - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-ssl/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-ssl/build.gradle new file mode 100644 index 00000000000..5c52b3e364b --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-ssl/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Jetty SSL smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty') + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')) { + exclude module: 'spring-boot-starter-tomcat' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testRuntimeOnly 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-ssl/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-ssl/pom.xml deleted file mode 100644 index fffed290700..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty-ssl/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jetty-ssl - Spring Boot Jetty SSL Smoke Test - Spring Boot Jetty SSL Smoke Test - - ${basedir}/../../.. - 3.1.0 - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-jetty - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.apache.httpcomponents - httpclient - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty/build.gradle new file mode 100644 index 00000000000..ae3b1c1f49d --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Jetty smoke test' + +dependencies { + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')) { + exclude module: 'spring-boot-starter-tomcat' + } + + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty/pom.xml deleted file mode 100644 index d36c7dbe1b3..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jetty/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jetty - Spring Boot Jetty Smoke Test - Spring Boot Jetty Smoke Test - - ${basedir}/../../.. - 3.1.0 - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-jetty - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jooq/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jooq/build.gradle new file mode 100644 index 00000000000..790d9fd6a27 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jooq/build.gradle @@ -0,0 +1,43 @@ +// plugins { +// id 'java' +// id 'nu.studer.jooq' version '3.0.3' +// id 'org.springframework.boot.conventions' +// } +// +// description = 'Spring Boot JOOQ smoke test' +// +// dependencies { +// implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jooq') +// jooqRuntime enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) +// jooqRuntime 'com.h2database:h2' +// runtimeOnly 'com.h2database:h2' +// +// testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +// } +// +// jooq { +// version = '3.12.3' +// smokeTest(sourceSets.main) { +// jdbc { +// driver = 'org.h2.Driver' +// url = 'jdbc:h2:~/springbootjooq' +// } +// generator { +// name = 'org.jooq.codegen.DefaultGenerator' +// database { +// name = 'org.jooq.meta.h2.H2Database' +// includes = '.*' +// inputSchema = 'PUBLIC' +// } +// strategy { +// // name = 'smoketest.jooq.util.TangleFreeGeneratorStrategy' +// } +// target { +// packageName = 'smoketest.jooq.domain' +// } +// generate { +// records = false +// } +// } +// } +// } diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jooq/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jooq/pom.xml deleted file mode 100644 index e6e5c10cac4..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jooq/pom.xml +++ /dev/null @@ -1,164 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jooq - Spring Boot jOOQ Smoke Test - Spring Boot jOOQ Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-jooq - - - - com.h2database - h2 - runtime - - - - org.jooq - jooq-codegen - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - generate-sources - - add-source - - - - gensrc/main/java - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - generate - - - - maven-compiler-plugin - - - generate-jooq-utils - generate-sources - - compile - - false - - - smoketest/jooq/util/** - - - - - - - org.codehaus.mojo - sql-maven-plugin - 1.5 - - - generate-sources - - execute - - - - - - com.h2database - h2 - ${h2.version} - - - - org.h2.Driver - jdbc:h2:~/springbootjooq - - ${basedir}/src/main/resources/reset.sql - ${basedir}/src/main/resources/schema.sql - - - - - org.jooq - jooq-codegen-maven - - - - generate - - - - - - com.h2database - h2 - ${h2.version} - - - - - org.h2.Driver - jdbc:h2:~/springbootjooq - - - org.jooq.util.DefaultGenerator - - org.jooq.util.h2.H2Database - .* - - PUBLIC - - - smoketest.jooq.util.TangleFreeGeneratorStrategy - - - smoketest.jooq.domain - ${basedir}/gensrc/main/java - - - false - - - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/build.gradle new file mode 100644 index 00000000000..b6e319a8a83 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/build.gradle @@ -0,0 +1,25 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot JPA smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-freemarker') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + implementation 'jakarta.persistence:jakarta.persistence-api' + if (JavaVersion.current().java9Compatible) { + implementation 'jakarta.xml.bind:jakarta.xml.bind-api' + } + implementation('org.hibernate:hibernate-core') { + exclude group: 'javax.activation', module: 'javax.activation-api' + exclude group: 'javax.persistence', module: 'javax.persistence-api' + exclude group: 'javax.xml.bind', module: 'jaxb-api' + } + implementation 'org.springframework:spring-orm' + + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/pom.xml deleted file mode 100644 index 3a718411f58..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/pom.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jpa - Spring Boot JPA Smoke Test - Spring Boot JPA Smoke Test - - ${basedir}/../../.. - - - - - jakarta.persistence - jakarta.persistence-api - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-freemarker - - - org.springframework - spring-orm - - - org.hibernate - hibernate-core - - - javax.xml.bind - jaxb-api - - - javax.persistence - javax.persistence-api - - - javax.activation - javax.activation-api - - - - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java9+ - - [9,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-atomikos/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-atomikos/build.gradle new file mode 100644 index 00000000000..46979b6018c --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-atomikos/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Atomikos JTA smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-artemis') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jta-atomikos') + if (JavaVersion.current().java9Compatible) { + implementation 'jakarta.xml.bind:jakarta.xml.bind-api' + } + implementation 'org.springframework:spring-jms' + + runtimeOnly 'com.h2database:h2' + runtimeOnly('org.apache.activemq:artemis-jms-server') { + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jms_2.0_spec' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-atomikos/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-atomikos/pom.xml deleted file mode 100644 index b117c9ec0a6..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-atomikos/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jta-atomikos - Spring Boot Atomikos JTA Smoke Test - Spring Boot Atomikos JTA Smoke Test - - ${basedir}/../../.. - - - - - org.springframework - spring-jms - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-jta-atomikos - - - org.springframework.boot - spring-boot-starter-artemis - - - org.apache.activemq - artemis-jms-server - - - geronimo-jms_2.0_spec - org.apache.geronimo.specs - - - - - com.h2database - h2 - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java9+ - - [9,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-bitronix/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-bitronix/build.gradle new file mode 100644 index 00000000000..c30bea68d42 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-bitronix/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Bitronix JTA smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-artemis') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jta-bitronix') + if (JavaVersion.current().java9Compatible) { + implementation 'jakarta.xml.bind:jakarta.xml.bind-api' + } + implementation 'org.springframework:spring-jms' + + runtimeOnly 'com.h2database:h2' + runtimeOnly('org.apache.activemq:artemis-jms-server') { + exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jms_2.0_spec' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-bitronix/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-bitronix/pom.xml deleted file mode 100644 index fbc875808f9..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-bitronix/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jta-bitronix - Spring Boot Bitronix JTA Smoke Test - Spring Boot Bitronix JTA Smoke Test - - ${basedir}/../../.. - - - - - org.springframework - spring-jms - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-jta-bitronix - - - org.springframework.boot - spring-boot-starter-artemis - - - org.apache.activemq - artemis-jms-server - - - geronimo-jms_2.0_spec - org.apache.geronimo.specs - - - - - com.h2database - h2 - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java9+ - - [9,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-jndi/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-jndi/pom.xml deleted file mode 100644 index d69a7e7d7f7..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jta-jndi/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-jta-jndi - Spring Boot JNDI JTA Smoke Test - war - Spring Boot JNDI JTA Smoke Test - - ${basedir}/../../.. - - - - - org.springframework - spring-jms - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - jakarta.servlet - jakarta.servlet-api - provided - - - jakarta.jms - jakarta.jms-api - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - - spring-boot-smoke-test-jta-jndi - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-jupiter/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-jupiter/build.gradle new file mode 100644 index 00000000000..d48beca8ba3 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-jupiter/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot JUnit Jupiter smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test')) { + exclude group: 'org.junit.vintage' + } +} + +test { + testLogging { + afterSuite { description, result -> + if (!description.parent) { + if (!result.testCount) { + throw new GradleException('No tests were executed') + } + } + } + } +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-jupiter/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-jupiter/pom.xml deleted file mode 100644 index 1c661d1f349..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-jupiter/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-junit-jupiter - Spring Boot JUnit Jupiter Smoke Test - Spring Boot JUnit Jupiter Smoke Test - - ${basedir}/../../.. - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.vintage - junit-vintage-engine - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-vintage/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-vintage/build.gradle new file mode 100644 index 00000000000..2ae43e941a1 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-vintage/build.gradle @@ -0,0 +1,24 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot JUnit Vintage smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test')) +} + +test { + testLogging { + afterSuite { description, result -> + if (!description.parent) { + if (!result.testCount) { + throw new GradleException('No tests were executed') + } + } + } + } +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-vintage/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-vintage/pom.xml deleted file mode 100644 index 6452cb757f7..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-junit-vintage/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-junit-vintage - Spring Boot JUnit Vintage Smoke Test - Spring Boot JUnit Vintage Smoke Test - - ${basedir}/../../.. - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/build.gradle new file mode 100644 index 00000000000..2abfa04180e --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Kafka smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-json') + implementation 'org.springframework.kafka:spring-kafka' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.awaitility:awaitility' + testImplementation 'org.springframework.kafka:spring-kafka-test' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/pom.xml deleted file mode 100644 index 2b0b0fd109a..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-kafka/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-kafka - Spring Boot Kafka Smoke Test - Spring Boot Kafka Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-json - - - org.springframework.kafka - spring-kafka - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.awaitility - awaitility - test - - - org.springframework.kafka - spring-kafka-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-liquibase/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-liquibase/build.gradle new file mode 100644 index 00000000000..9ca130e1eea --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-liquibase/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Liquibase smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + implementation 'org.liquibase:liquibase-core' + + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-liquibase/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-liquibase/pom.xml deleted file mode 100644 index 04541350985..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-liquibase/pom.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-liquibase - Spring Boot Liquibase Smoke Test - Spring Boot Liquibase Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - org.liquibase - liquibase-core - - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-logback/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-logback/build.gradle new file mode 100644 index 00000000000..98895564996 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-logback/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Logback smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-logback/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-logback/pom.xml deleted file mode 100644 index fe1daa14a10..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-logback/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-logback - Spring Boot Logback Smoke Test - Spring Boot Logback Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/build.gradle new file mode 100644 index 00000000000..3d14d0b45b0 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot OAuth2 Client smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-oauth2-client') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/pom.xml deleted file mode 100644 index 4682992ad35..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-client/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-oauth2-client - Spring Boot OAuth2 Client Smoke Test - Spring Boot OAuth2 Client Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-oauth2-client - - - org.springframework.boot - spring-boot-starter-web - - - - org.apache.httpcomponents - httpclient - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-resource-server/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-resource-server/build.gradle new file mode 100644 index 00000000000..ff995cdfe21 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-resource-server/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot OAuth2 Resource Server smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-oauth2-resource-server') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'com.squareup.okhttp3:mockwebserver:3.9.0' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-resource-server/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-resource-server/pom.xml deleted file mode 100644 index 08064623a6c..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-oauth2-resource-server/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-oauth2-resource-server - Spring Boot OAuth2 Resource Server Smoke Test - Spring Boot OAuth2 Resource Server Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-oauth2-resource-server - - - org.springframework.boot - spring-boot-starter-web - - - - com.squareup.okhttp3 - mockwebserver - 3.9.0 - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-parent-context/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-parent-context/build.gradle new file mode 100644 index 00000000000..4596ddac2b0 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-parent-context/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot parent context smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-integration') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation 'org.springframework.integration:spring-integration-file' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.awaitility:awaitility' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-parent-context/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-parent-context/pom.xml deleted file mode 100644 index 970261a078c..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-parent-context/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-parent-context - Spring Boot Parent Context Smoke Test - Spring Boot Parent Context Smoke Test - - smoketest.parent.SampleParentContextApplication - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-integration - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.integration - spring-integration-file - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.awaitility - awaitility - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-profile/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-profile/build.gradle new file mode 100644 index 00000000000..70937058ffa --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-profile/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot profile smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-profile/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-profile/pom.xml deleted file mode 100644 index c450b9540ab..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-profile/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-profile - Spring Boot Profile Smoke Test - Spring Boot Profile Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-property-validation/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-property-validation/build.gradle new file mode 100644 index 00000000000..e430ee65d90 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-property-validation/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot property validation smoke test' + +dependencies { + annotationProcessor project(':spring-boot-project:spring-boot-tools:spring-boot-configuration-processor') + + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-property-validation/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-property-validation/pom.xml deleted file mode 100644 index 772aac45c5f..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-property-validation/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-property-validation - Spring Boot Property Validation Smoke Test - Spring Boot Property Validation Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-quartz/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-quartz/build.gradle new file mode 100644 index 00000000000..792ce334e83 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-quartz/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Quartz smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-quartz') + + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.awaitility:awaitility' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-quartz/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-quartz/pom.xml deleted file mode 100644 index a31b639a035..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-quartz/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-quartz - Spring Boot Quartz Smoke Test - Spring Boot Quartz Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-quartz - - - - com.h2database - h2 - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.awaitility - awaitility - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-client/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-client/build.gradle new file mode 100644 index 00000000000..7415212766f --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-client/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot reactive OAuth 2 client smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-oauth2-client') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-webflux') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-client/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-client/pom.xml deleted file mode 100644 index 4ea448e9d63..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-client/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-reactive-oauth2-client - Spring Boot Reactive OAuth2 Client Smoke Test - Spring Boot Reactive OAuth2 Client Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-oauth2-client - - - org.springframework.boot - spring-boot-starter-webflux - - - - org.apache.httpcomponents - httpclient - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-resource-server/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-resource-server/build.gradle new file mode 100644 index 00000000000..0aee1a03c48 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-resource-server/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot reactive OAuth 2 resource server smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-oauth2-resource-server') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-webflux') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'com.squareup.okhttp3:mockwebserver:3.9.0' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-resource-server/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-resource-server/pom.xml deleted file mode 100644 index 89056132a73..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-reactive-oauth2-resource-server/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-reactive-oauth2-resource-server - Spring Boot Reactive OAuth2 Resource Server Smoke Test - Spring Boot OAuth2 Reactive Resource Server Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-oauth2-resource-server - - - org.springframework.boot - spring-boot-starter-webflux - - - - com.squareup.okhttp3 - mockwebserver - 3.9.0 - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-rsocket/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-rsocket/build.gradle new file mode 100644 index 00000000000..6176f9e03a0 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-rsocket/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot RSocket smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-rsocket') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation 'org.springframework.security:spring-security-rsocket' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'io.projectreactor:reactor-test' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-rsocket/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-rsocket/pom.xml deleted file mode 100644 index 99bfae491f9..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-rsocket/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-rsocket - Spring Boot RSocket Smoke Test - Spring Boot RSocket Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter-rsocket - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.security - spring-security-rsocket - - - - org.springframework.boot - spring-boot-starter-test - test - - - io.projectreactor - reactor-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/build.gradle new file mode 100644 index 00000000000..9cf22b2ea34 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot SAML 2 service provider smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + implementation 'org.springframework.security:spring-security-config' + implementation 'org.springframework.security:spring-security-saml2-service-provider' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/pom.xml deleted file mode 100644 index a09b044368b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-saml2-service-provider/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-saml2-service-provider - Spring Boot SAML2 Service Provider Smoke Test - Spring Boot SAML2 Service Provider Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.security - spring-security-config - - - org.springframework.security - spring-security-saml2-service-provider - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-jersey/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-jersey/build.gradle new file mode 100644 index 00000000000..c8d2548a58b --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-jersey/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot secure Jersey smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jersey') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation 'org.jolokia:jolokia-core' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-jersey/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-jersey/pom.xml deleted file mode 100644 index 5ad8da0f5d6..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-jersey/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-secure-jersey - jar - Spring Boot Secure Jersey Smoke Test - Spring Boot Secure Jersey Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-jersey - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-security - - - org.jolokia - jolokia-core - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - generate build info - - build-info - - - - - - - - - java9+ - - [9,) - - - - javax.xml.bind - jaxb-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-webflux/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-webflux/build.gradle new file mode 100644 index 00000000000..66f73aedce8 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-webflux/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot secure WebFlux smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-webflux') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'io.projectreactor:reactor-test' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-webflux/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-webflux/pom.xml deleted file mode 100644 index c92dcf50529..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure-webflux/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-secure-webflux - Spring Boot Secure WebFlux Smoke Test - Spring Boot Secure WebFlux Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter-webflux - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-test - test - - - io.projectreactor - reactor-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - generate build info - - build-info - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure/build.gradle new file mode 100644 index 00000000000..e4bd622b0be --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Security smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure/pom.xml deleted file mode 100644 index 8e3eec4a94b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-secure/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-secure - Spring Boot Security Smoke Test - Spring Boot Security Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-servlet/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-servlet/build.gradle new file mode 100644 index 00000000000..3cd180ab430 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-servlet/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'war' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Servlet smoke test' + +dependencies { + compileOnly project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testRuntimeOnly project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-servlet/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-servlet/pom.xml deleted file mode 100644 index e40be5a1b08..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-servlet/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-servlet - war - Spring Boot Servlet Smoke Test - Spring Boot Servlet Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/build.gradle new file mode 100644 index 00000000000..4fee4d429f0 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/build.gradle @@ -0,0 +1,27 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Session WebFlux smoke test' + +def sessionStores = [ + 'mongodb': [ + project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-mongodb-reactive'), + 'de.flapdoodle.embed:de.flapdoodle.embed.mongo', + 'org.springframework.session:spring-session-data-mongodb' + ], + 'redis': [ + project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-redis-reactive'), + 'org.springframework.session:spring-session-data-redis' + ] +] + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-webflux') + + sessionStores[project.findProperty('sessionStore') ?: 'mongodb'].each { runtimeOnly it } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/pom.xml deleted file mode 100644 index 4028c68679b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-session-webflux - Spring Boot Session WebFlux Smoke Test - Spring Boot Session WebFlux Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-webflux - - - org.springframework.boot - spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - redis - - - org.springframework.session - spring-session-data-redis - - - org.springframework.boot - spring-boot-starter-data-redis-reactive - - - - - mongodb - - true - - - - org.springframework.session - spring-session-data-mongodb - - - org.springframework.boot - spring-boot-starter-data-mongodb-reactive - - - de.flapdoodle.embed - de.flapdoodle.embed.mongo - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/build.gradle new file mode 100644 index 00000000000..46cc84d54a8 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/build.gradle @@ -0,0 +1,36 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Session smoke test' + +def sessionStores = [ + 'hazelcast': [ + 'com.hazelcast:hazelcast', + 'org.springframework.session:spring-session-hazelcast' + ], + 'jdbc': [ + project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc'), + 'org.springframework.session:spring-session-jdbc' , + 'com.h2database:h2' + ], + 'mongodb': [ + project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-mongodb'), + 'org.springframework.session:spring-session-data-mongodb' + ], + 'redis': [ + project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-redis'), + 'org.springframework.session:spring-session-data-redis' + ] +] + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + sessionStores[project.findProperty('sessionStore') ?: 'jdbc'].each { runtimeOnly it } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/pom.xml deleted file mode 100644 index a806f3a0065..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/pom.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-session - Spring Boot Session Smoke Test - Spring Boot Session Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-actuator - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - redis - - - org.springframework.session - spring-session-data-redis - - - org.springframework.boot - spring-boot-starter-data-redis - - - - - jdbc - - true - - - - org.springframework.session - spring-session-jdbc - - - org.springframework.boot - spring-boot-starter-jdbc - - - com.h2database - h2 - - - - - hazelcast - - - org.springframework.session - spring-session-hazelcast - - - com.hazelcast - hazelcast - - - - - mongodb - - - org.springframework.session - spring-session-data-mongodb - - - org.springframework.boot - spring-boot-starter-data-mongodb - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-simple/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-simple/build.gradle new file mode 100644 index 00000000000..c038dfeb9a6 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-simple/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Simple smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + implementation 'jakarta.validation:jakarta.validation-api' + implementation('org.hibernate.validator:hibernate-validator') { + exclude group: 'javax.validation' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-simple/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-simple/pom.xml deleted file mode 100644 index 7fca8bb43a1..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-simple/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-simple - Spring Boot Simple Smoke Test - Spring Boot Simple Smoke Test - - ${basedir}/../../.. - - - - - jakarta.validation - jakarta.validation-api - - - org.springframework.boot - spring-boot-starter - - - org.hibernate.validator - hibernate-validator - - - javax.validation - validation-api - - - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test-nomockito/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test-nomockito/build.gradle new file mode 100644 index 00000000000..88d23d3fa89 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test-nomockito/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Test no Mockito smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-test') + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation 'org.springframework:spring-test' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test-nomockito/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test-nomockito/pom.xml deleted file mode 100644 index 6f239374fdf..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test-nomockito/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-test-nomockito - Spring Boot Test No Mockito Smoke Test - Spring Boot Test No Mockito Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-test - test - - - org.assertj - assertj-core - test - - - org.junit.jupiter - junit-jupiter-engine - test - - - org.springframework - spring-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/build.gradle new file mode 100644 index 00000000000..b4470ce1263 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Test smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.seleniumhq.selenium:selenium-api' + testImplementation 'org.seleniumhq.selenium:htmlunit-driver' + testImplementation 'net.sourceforge.htmlunit:htmlunit' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/pom.xml deleted file mode 100644 index fc6c5a58d8e..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-test/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-test - Spring Boot Test Smoke Test - Spring Boot Test Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.seleniumhq.selenium - selenium-api - - - com.h2database - h2 - - - mysql - mysql-connector-java - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.seleniumhq.selenium - htmlunit-driver - test - - - net.sourceforge.htmlunit - htmlunit - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java9+ - - [9,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/build.gradle new file mode 100644 index 00000000000..0bfa9d67c6c --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'java' +// id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot TestNG smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + implementation 'org.springframework:spring-webmvc' + + testImplementation project(':spring-boot-project:spring-boot-test') + testImplementation 'org.assertj:assertj-core' + testImplementation 'org.springframework:spring-test' + testImplementation 'org.testng:testng:6.8.13' +} + +test { + useTestNG() +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/pom.xml deleted file mode 100644 index 28c4100b31b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-testng - Spring Boot TestNG Smoke Test - Spring Boot TestNG Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework - spring-webmvc - - - - org.springframework - spring-test - test - - - org.springframework.boot - spring-boot-test - test - - - org.testng - testng - 6.8.13 - test - - - org.assertj - assertj-core - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/src/test/java/smoketest/testng/SampleTestNGApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/src/test/java/smoketest/testng/SampleTestNGApplicationTests.java index 84cf1b164bb..0d382dbc088 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/src/test/java/smoketest/testng/SampleTestNGApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-testng/src/test/java/smoketest/testng/SampleTestNGApplicationTests.java @@ -34,13 +34,13 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Phillip Webb */ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -class SampleTestNGApplicationTests extends AbstractTestNGSpringContextTests { +public class SampleTestNGApplicationTests extends AbstractTestNGSpringContextTests { @Autowired private TestRestTemplate restTemplate; @Test - void testHome() { + public void testHome() { ResponseEntity entity = this.restTemplate.getForEntity("/", String.class); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(entity.getBody()).isEqualTo("Hello World"); diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-jsp/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-jsp/build.gradle new file mode 100644 index 00000000000..e7b096cfccb --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-jsp/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'war' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Tomcat JSP smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + providedRuntime project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + providedRuntime 'javax.servlet:jstl' + providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-jsp/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-jsp/pom.xml deleted file mode 100644 index 09a70d9579c..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-jsp/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-tomcat-jsp - war - Spring Boot Tomcat JSP Smoke Test - Spring Boot Tomcat JSP Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter-web - - - javax.servlet - jstl - - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-multi-connectors/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-multi-connectors/build.gradle new file mode 100644 index 00000000000..5079c8f8a01 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-multi-connectors/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Tomcat multi-connectors smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-multi-connectors/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-multi-connectors/pom.xml deleted file mode 100644 index 7aef1489a83..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-multi-connectors/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-tomcat-multi-connectors - Spring Boot Multi-Connector Tomcat Smoke Test - Spring Boot Multi-Connector Tomcat Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.apache.httpcomponents - httpclient - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-ssl/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-ssl/build.gradle new file mode 100644 index 00000000000..08d55bdb6cf --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-ssl/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Tomcat SSL smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-ssl/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-ssl/pom.xml deleted file mode 100644 index 4b9acb73d44..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat-ssl/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-tomcat-ssl - Spring Boot Tomcat SSL Smoke Test - Spring Boot Tomcat SSL Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.apache.httpcomponents - httpclient - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat/build.gradle new file mode 100644 index 00000000000..befc755c958 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Tomcat smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + implementation 'org.springframework:spring-webmvc' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat/pom.xml deleted file mode 100644 index 1be0cce0f22..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-tomcat/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-tomcat - Spring Boot Tomcat Smoke Test - Spring Boot Tomcat Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework - spring-webmvc - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-traditional/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-traditional/build.gradle new file mode 100644 index 00000000000..a5268753148 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-traditional/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'war' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot traditional deployment smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + implementation 'org.springframework:spring-webmvc' + + providedRuntime project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-traditional/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-traditional/pom.xml deleted file mode 100644 index be279b47f7b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-traditional/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-traditional - war - Spring Boot Traditional Smoke Test - Spring Boot Traditional Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework - spring-webmvc - - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow-ssl/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow-ssl/build.gradle new file mode 100644 index 00000000000..0af2b289b4c --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow-ssl/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Undertow SSL smoke test' + +dependencies { + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')) { + exclude module: 'spring-boot-starter-tomcat' + } + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-undertow') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow-ssl/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow-ssl/pom.xml deleted file mode 100644 index bf42c115058..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow-ssl/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-undertow-ssl - Spring Boot Undertow SSL Smoke Test - Spring Boot Undertow SSL Smoke Test - - ${basedir}/../../.. - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-undertow - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.apache.httpcomponents - httpclient - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow/build.gradle new file mode 100644 index 00000000000..1296d950eb6 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Undertow smoke test' + +dependencies { + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')) { + exclude module: 'spring-boot-starter-tomcat' + } + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-undertow') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow/pom.xml deleted file mode 100644 index 6596725af76..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-undertow/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-undertow - Spring Boot Undertow Smoke Test - Spring Boot Undertow Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-undertow - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-war/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-war/build.gradle new file mode 100644 index 00000000000..dc133506d38 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-war/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'war' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot war smoke test' + +dependencies { + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web')) { + exclude module: 'spring-boot-starter-tomcat' + } + providedCompile enforcedPlatform(project(':spring-boot-project:spring-boot-dependencies')) + providedCompile 'jakarta.servlet:jakarta.servlet-api' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-war/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-war/pom.xml deleted file mode 100644 index 4c3dcf6e747..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-war/pom.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-war - war - Spring Boot War Smoke Test - Spring Boot War Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter - - - - jakarta.servlet - jakarta.servlet-api - provided - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - org.springframework.boot - spring-boot-devtools - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - tomcat - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - - - jetty - - - org.springframework.boot - spring-boot-starter-jetty - provided - - - - - undertow - - - org.springframework.boot - spring-boot-starter-undertow - provided - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-freemarker/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-freemarker/build.gradle new file mode 100644 index 00000000000..5a509586ca3 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-freemarker/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web FreeMarker smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-freemarker') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-freemarker/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-freemarker/pom.xml deleted file mode 100644 index 290e34877aa..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-freemarker/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-freemarker - Spring Boot Web FreeMarker Smoke Test - Spring Boot Web FreeMarker Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-freemarker - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - true - - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-groovy-templates/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-groovy-templates/build.gradle new file mode 100644 index 00000000000..5079cdb18e9 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-groovy-templates/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web Groovy Templates smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-groovy-templates') + if (JavaVersion.current().java9Compatible) { + implementation 'jakarta.xml.bind:jakarta.xml.bind-api' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-groovy-templates/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-groovy-templates/pom.xml deleted file mode 100755 index b383378db9b..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-groovy-templates/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-groovy-templates - Spring Boot Web Groovy Templates Smoke Test - Spring Boot Web Groovy Templates Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-groovy-templates - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java9+ - - [9,) - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-jsp/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-jsp/build.gradle new file mode 100644 index 00000000000..259deb0cdd6 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-jsp/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'war' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web JSP smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + providedRuntime project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + providedRuntime 'javax.servlet:jstl' + providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-jsp/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-jsp/pom.xml deleted file mode 100644 index 1d98da24807..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-jsp/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-jsp - war - Spring Boot Web JSP Smoke Test - Spring Boot Web JSP Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter-web - - - javax.servlet - jstl - - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-method-security/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-method-security/build.gradle new file mode 100644 index 00000000000..4aaafa2627e --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-method-security/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web method security smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-thymeleaf') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-method-security/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-method-security/pom.xml deleted file mode 100644 index acaceaa0523..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-method-security/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-method-security - Spring Boot Web Method Security Smoke Test - Spring Boot Web Method Security Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-mustache/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-mustache/build.gradle new file mode 100644 index 00000000000..6153f7d1481 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-mustache/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web Mustache smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-mustache') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-mustache/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-mustache/pom.xml deleted file mode 100644 index 4e37f23b7d0..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-mustache/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-mustache - Spring Boot Web Mustache Smoke Test - Spring Boot Web Mustache Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-mustache - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/build.gradle new file mode 100644 index 00000000000..00bb73374d3 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web secure custom smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-thymeleaf') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/pom.xml deleted file mode 100644 index 14b8eed03b8..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-custom/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-secure-custom - Spring Boot Web Secure Custom Smoke Test - Spring Boot Web Secure Custom Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - - org.apache.httpcomponents - httpclient - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/build.gradle new file mode 100644 index 00000000000..38a45ceeaec --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web secure JDBC smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-thymeleaf') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + runtimeOnly 'com.h2database:h2' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/pom.xml deleted file mode 100644 index 2cdd189e060..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure-jdbc/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-secure-jdbc - Spring Boot Web Secure JDBC Smoke Test - Spring Boot Web Secure JDBC Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-jdbc - - - com.h2database - h2 - - - - org.apache.httpcomponents - httpclient - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/build.gradle new file mode 100644 index 00000000000..6c37b1940c5 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web secure smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-security') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-thymeleaf') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'org.apache.httpcomponents:httpclient' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/pom.xml deleted file mode 100644 index 23c5128793d..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-secure/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-secure - Spring Boot Web Secure Smoke Test - Spring Boot Web Secure Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - - org.apache.httpcomponents - httpclient - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-static/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-static/build.gradle new file mode 100644 index 00000000000..36752d7f4b2 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-static/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'war' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web static smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + providedRuntime project(':spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat') + + runtimeOnly 'org.webjars:bootstrap:3.0.3' + runtimeOnly 'org.webjars:jquery:2.0.3-1' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-static/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-static/pom.xml deleted file mode 100644 index 026ed3c5d11..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-static/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-static - war - Spring Boot Web Static Smoke Test - Spring Boot Web Static Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.webjars - bootstrap - 3.0.3 - - - org.webjars - jquery - 2.0.3-1 - - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-ui/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-ui/build.gradle new file mode 100644 index 00000000000..bececbfb5d1 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-ui/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot web UI smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-thymeleaf') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-ui/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-ui/pom.xml deleted file mode 100755 index e7eb2462056..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-web-ui/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-web-ui - Spring Boot Web UI Smoke Test - Spring Boot Web UI Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-devtools - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux-coroutines/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux-coroutines/build.gradle new file mode 100644 index 00000000000..c9303314ef0 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux-coroutines/build.gradle @@ -0,0 +1,30 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' + id 'org.jetbrains.kotlin.plugin.spring' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot WebFlux coroutines smoke test' + +compileKotlin { + kotlinOptions { + jvmTarget = '1.8' + } +} + +compileTestKotlin { + kotlinOptions { + jvmTarget = '1.8' + } +} + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-webflux') + implementation 'com.fasterxml.jackson.module:jackson-module-kotlin' + implementation 'org.jetbrains.kotlin:kotlin-reflect' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-reactor' + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'io.projectreactor:reactor-test' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux-coroutines/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux-coroutines/pom.xml deleted file mode 100644 index a7396bfd16e..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux-coroutines/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-webflux-coroutines - Spring Boot WebFlux Coroutines Smoke Test - Spring Boot WebFlux Coroutines Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter-webflux - - - - org.jetbrains.kotlin - kotlin-reflect - - - org.jetbrains.kotlin - kotlin-stdlib-jdk8 - - - org.jetbrains.kotlinx - kotlinx-coroutines-reactor - - - - com.fasterxml.jackson.module - jackson-module-kotlin - - - - org.springframework.boot - spring-boot-starter-test - test - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/test/kotlin - - - org.springframework.boot - spring-boot-maven-plugin - - - org.jetbrains.kotlin - kotlin-maven-plugin - - - -Xjsr305=strict - - - spring - - - - - org.jetbrains.kotlin - kotlin-maven-allopen - ${kotlin.version} - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux/build.gradle new file mode 100644 index 00000000000..75a3810821b --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot WebFlux smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator') + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-webflux') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') + testImplementation 'io.projectreactor:reactor-test' +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux/pom.xml deleted file mode 100644 index 92f01fbcefd..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webflux/pom.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-webflux - Spring Boot WebFlux Smoke Test - Spring Boot WebFlux Smoke Test - - ${basedir}/../../.. - / - - - - - org.springframework.boot - spring-boot-starter-webflux - - - org.springframework.boot - spring-boot-starter-actuator - - - - org.springframework.boot - spring-boot-starter-test - test - - - io.projectreactor - reactor-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - generate build info - - build-info - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webservices/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webservices/build.gradle new file mode 100644 index 00000000000..3de88c8ed97 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webservices/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot Web Services smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-web-services') + implementation 'org.jdom:jdom2' + + runtimeOnly 'jaxen:jaxen' + runtimeOnly 'wsdl4j:wsdl4j' + + if (JavaVersion.current().java11Compatible) { + runtimeOnly 'jakarta.activation:jakarta.activation-api' + runtimeOnly 'org.glassfish.jaxb:jaxb-runtime' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webservices/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webservices/pom.xml deleted file mode 100644 index ca75ff62fed..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-webservices/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-webservices - Spring Boot Web Services Smoke Test - Spring Boot Web Services Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-web-services - - - jaxen - jaxen - - - org.jdom - jdom2 - - - wsdl4j - wsdl4j - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - java11+ - - [11,) - - - - jakarta.activation - jakarta.activation-api - - - org.glassfish.jaxb - jaxb-runtime - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/build.gradle new file mode 100644 index 00000000000..1adb130385d --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot WebSocket Jetty smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-jetty') + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-websocket')) { + exclude module: 'spring-boot-starter-tomcat' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/pom.xml deleted file mode 100755 index 1c03905144a..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-websocket-jetty - Spring Boot WebSocket Jetty Smoke Test - Spring Boot WebSocket Jetty Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-websocket - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-jetty - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-tomcat/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-tomcat/build.gradle new file mode 100644 index 00000000000..36f289fc466 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-tomcat/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot WebSocket Tomcat smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-websocket') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-tomcat/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-tomcat/pom.xml deleted file mode 100755 index fed614e0c89..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-tomcat/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-websocket-tomcat - Spring Boot WebSocket Tomcat Smoke Test - Spring Boot WebSocket Tomcat Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-websocket - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-undertow/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-undertow/build.gradle new file mode 100644 index 00000000000..4d6e98bd4a2 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-undertow/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot WebSocket Undertow smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-undertow') + implementation(project(':spring-boot-project:spring-boot-starters:spring-boot-starter-websocket')) { + exclude module: 'spring-boot-starter-tomcat' + } + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-undertow/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-undertow/pom.xml deleted file mode 100755 index cf44c04ed72..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-undertow/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-websocket-undertow - Spring Boot WebSocket Undertow Smoke Test - Spring Boot WebSocket Undertow Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter-websocket - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-undertow - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-xml/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-xml/build.gradle new file mode 100644 index 00000000000..86c2cc77cb7 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-xml/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'java' + id 'org.springframework.boot.conventions' +} + +description = 'Spring Boot XML smoke test' + +dependencies { + implementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter') + + testImplementation project(':spring-boot-project:spring-boot-starters:spring-boot-starter-test') +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-xml/pom.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-xml/pom.xml deleted file mode 100644 index d4a9abb4d9d..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-xml/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-smoke-tests - ${revision} - - spring-boot-smoke-test-xml - Spring Boot XML Smoke Test - Spring Boot XML Smoke Test - - ${basedir}/../../.. - - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/src/checkstyle/checkstyle-suppressions.xml b/src/checkstyle/checkstyle-suppressions.xml index 1f7a85c5474..8361ff02ee1 100644 --- a/src/checkstyle/checkstyle-suppressions.xml +++ b/src/checkstyle/checkstyle-suppressions.xml @@ -42,4 +42,6 @@ + + diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 22449bf7540..e759f663af0 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -3,8 +3,11 @@ "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd"> + + + - + @@ -20,7 +23,7 @@ + value="${config_loc}/import-control.xml" />