From 5659d2c8a2ecf60e9f8a073bf2bb711d643192d2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 19 Mar 2025 21:08:10 -0700 Subject: [PATCH] Create spring-boot-groovy-templates module Closes gh-46089 --- settings.gradle | 1 + .../build.gradle | 7 -- ...itional-spring-configuration-metadata.json | 104 ----------------- .../main/resources/META-INF/spring.factories | 1 - .../resources/META-INF/spring/aot.factories | 3 +- ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../spring-boot-dependencies/build.gradle | 1 + .../spring-boot-groovy-templates/build.gradle | 40 +++++++ .../GroovyTemplateAutoConfiguration.java | 7 +- .../GroovyTemplateAvailabilityProvider.java | 4 +- .../GroovyTemplateProperties.java | 4 +- .../template/autoconfigure}/package-info.java | 2 +- ...itional-spring-configuration-metadata.json | 108 ++++++++++++++++++ .../main/resources/META-INF/spring.factories | 3 + .../resources/META-INF/spring/aot.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../GroovyTemplateAutoConfigurationTests.java | 2 +- ...oovyTemplateAvailabilityProviderTests.java | 6 +- .../GroovyTemplatePropertiesTests.java | 2 +- .../build.gradle | 2 +- .../build.gradle | 1 + ...re.web.servlet.AutoConfigureWebMvc.imports | 2 +- ...TestAutoConfigurationIntegrationTests.java | 2 +- 23 files changed, 174 insertions(+), 132 deletions(-) create mode 100644 spring-boot-project/spring-boot-groovy-templates/build.gradle rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template => spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure}/GroovyTemplateAutoConfiguration.java (96%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template => spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure}/GroovyTemplateAvailabilityProvider.java (97%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template => spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure}/GroovyTemplateProperties.java (99%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template => spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure}/package-info.java (91%) create mode 100644 spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/additional-spring-configuration-metadata.json create mode 100644 spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring.factories create mode 100644 spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring/aot.factories create mode 100644 spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template => spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure}/GroovyTemplateAutoConfigurationTests.java (99%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template => spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure}/GroovyTemplateAvailabilityProviderTests.java (95%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template => spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure}/GroovyTemplatePropertiesTests.java (97%) diff --git a/settings.gradle b/settings.gradle index 444b776c258..509d019357a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -68,6 +68,7 @@ include "spring-boot-project:spring-boot-devtools" include "spring-boot-project:spring-boot-docker-compose" include "spring-boot-project:spring-boot-docs" include "spring-boot-project:spring-boot-flyway" +include "spring-boot-project:spring-boot-groovy-templates" include "spring-boot-project:spring-boot-jackson" include "spring-boot-project:spring-boot-jdbc" include "spring-boot-project:spring-boot-jetty" diff --git a/spring-boot-project/spring-boot-autoconfigure-all/build.gradle b/spring-boot-project/spring-boot-autoconfigure-all/build.gradle index b6435cb6087..8ab14602362 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/build.gradle +++ b/spring-boot-project/spring-boot-autoconfigure-all/build.gradle @@ -114,7 +114,6 @@ dependencies { optional("org.apache.tomcat.embed:tomcat-embed-websocket") optional("org.apache.tomcat:tomcat-jdbc") optional("org.apiguardian:apiguardian-api") - optional("org.apache.groovy:groovy-templates") optional("org.eclipse.angus:angus-mail") optional("com.github.ben-manes.caffeine:caffeine") optional("com.github.mxab.thymeleaf.extras:thymeleaf-extras-data-attribute") @@ -273,12 +272,6 @@ dependencies { testRuntimeOnly("org.jetbrains.kotlin:kotlin-reflect") } -tasks.named("checkSpringConfigurationMetadata").configure { - exclusions = [ - "spring.groovy.template.configuration.*" - ] -} - test { jvmArgs += "--add-opens=java.base/java.net=ALL-UNNAMED" } diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 7c2d775933b..fe29995842e 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -803,110 +803,6 @@ "name": "spring.graphql.schema.locations", "defaultValue": "classpath:graphql/**/" }, - { - "name": "spring.groovy.template.configuration.auto-escape", - "deprecation": { - "replacement": "spring.groovy.template.auto-escape", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.auto-indent", - "deprecation": { - "replacement": "spring.groovy.template.auto-indent", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.auto-indent-string", - "deprecation": { - "replacement": "spring.groovy.template.auto-indent-string", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.auto-new-line", - "deprecation": { - "replacement": "spring.groovy.template.auto-new-line", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.base-template-class", - "deprecation": { - "replacement": "spring.groovy.template.base-template-class", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.cache-templates", - "deprecation": { - "replacement": "spring.groovy.template.cache", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.declaration-encoding", - "deprecation": { - "replacement": "spring.groovy.template.declaration-encoding", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.expand-empty-elements", - "deprecation": { - "replacement": "spring.groovy.template.expand-empty-elements", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.locale", - "deprecation": { - "replacement": "spring.groovy.template.locale", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.new-line-string", - "deprecation": { - "replacement": "spring.groovy.template.new-line-string", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.resource-loader-path", - "deprecation": { - "replacement": "spring.groovy.template.resource-loader-path", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.configuration.use-double-quotes", - "deprecation": { - "replacement": "spring.groovy.template.use-double-quotes", - "level": "warning", - "since": "3.5.0" - } - }, - { - "name": "spring.groovy.template.prefix", - "defaultValue": "" - }, - { - "name": "spring.groovy.template.suffix", - "defaultValue": ".tpl" - }, { "name": "spring.http.converters.preferred-json-mapper", "type": "java.lang.String", diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring.factories b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring.factories index 1e94e3e2654..dda0d42049b 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring.factories +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring.factories @@ -19,7 +19,6 @@ org.springframework.boot.autoconfigure.r2dbc.NoConnectionFactoryBeanFailureAnaly # Template Availability Providers org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider=\ org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider,\ -org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAvailabilityProvider,\ org.springframework.boot.autoconfigure.mustache.MustacheTemplateAvailabilityProvider,\ org.springframework.boot.autoconfigure.thymeleaf.ThymeleafTemplateAvailabilityProvider,\ org.springframework.boot.autoconfigure.web.servlet.JspTemplateAvailabilityProvider diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/aot.factories b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/aot.factories index c32163383f3..ca3cf091a22 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/aot.factories +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/aot.factories @@ -1,3 +1,2 @@ org.springframework.aot.hint.RuntimeHintsRegistrar=\ -org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider$FreeMarkerTemplateAvailabilityRuntimeHints,\ -org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAvailabilityProvider$GroovyTemplateAvailabilityRuntimeHints +org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider$FreeMarkerTemplateAvailabilityRuntimeHints diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index d725ad2dca7..791c0715895 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -48,7 +48,6 @@ org.springframework.boot.autoconfigure.graphql.rsocket.RSocketGraphQlClientAutoC org.springframework.boot.autoconfigure.graphql.security.GraphQlWebFluxSecurityAutoConfiguration org.springframework.boot.autoconfigure.graphql.security.GraphQlWebMvcSecurityAutoConfiguration org.springframework.boot.autoconfigure.graphql.servlet.GraphQlWebMvcAutoConfiguration -org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index 896a6f97756..70c5d0a935f 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1996,6 +1996,7 @@ bom { "spring-boot-devtools", "spring-boot-docker-compose", "spring-boot-flyway", + "spring-boot-groovy-templates", "spring-boot-jackson", "spring-boot-jarmode-tools", "spring-boot-jdbc", diff --git a/spring-boot-project/spring-boot-groovy-templates/build.gradle b/spring-boot-project/spring-boot-groovy-templates/build.gradle new file mode 100644 index 00000000000..10c2aa747f9 --- /dev/null +++ b/spring-boot-project/spring-boot-groovy-templates/build.gradle @@ -0,0 +1,40 @@ +/* + * Copyright 2012-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +plugins { + id "java-library" + id "org.springframework.boot.auto-configuration" + id "org.springframework.boot.configuration-properties" + id "org.springframework.boot.deployed" + id "org.springframework.boot.optional-dependencies" +} + +description = "Spring Boot Groovy Templates" + +dependencies { + api(project(":spring-boot-project:spring-boot")) + api("org.apache.groovy:groovy-templates") + + optional(project(":spring-boot-project:spring-boot-autoconfigure")) + optional("org.springframework:spring-webmvc") + optional("jakarta.servlet:jakarta.servlet-api") + + testImplementation(project(":spring-boot-project:spring-boot-test")) + testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) + + testRuntimeOnly("ch.qos.logback:logback-classic") +} diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfiguration.java b/spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAutoConfiguration.java similarity index 96% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfiguration.java rename to spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAutoConfiguration.java index 23ff2793c35..abeb1316a9c 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfiguration.java +++ b/spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.groovy.template; +package org.springframework.boot.groovy.template.autoconfigure; import java.security.CodeSource; import java.security.ProtectionDomain; @@ -32,7 +32,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; import org.springframework.boot.autoconfigure.template.TemplateLocation; -import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.PropertyMapper; import org.springframework.boot.context.properties.bind.Bindable; @@ -57,9 +56,9 @@ import org.springframework.web.servlet.view.groovy.GroovyMarkupViewResolver; * @author Dave Syer * @author Andy Wilkinson * @author Brian Clozel - * @since 1.1.0 + * @since 4.0.0 */ -@AutoConfiguration(after = WebMvcAutoConfiguration.class) +@AutoConfiguration @ConditionalOnClass(MarkupTemplateEngine.class) @EnableConfigurationProperties(GroovyTemplateProperties.class) public class GroovyTemplateAutoConfiguration { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProvider.java b/spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAvailabilityProvider.java similarity index 97% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProvider.java rename to spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAvailabilityProvider.java index 4db461d7765..6ed52c2b1b2 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProvider.java +++ b/spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAvailabilityProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.groovy.template; +package org.springframework.boot.groovy.template.autoconfigure; import java.util.ArrayList; import java.util.Arrays; @@ -32,7 +32,7 @@ import org.springframework.util.ClassUtils; * view templates. * * @author Dave Syer - * @since 1.1.0 + * @since 4.0.0 */ public class GroovyTemplateAvailabilityProvider extends PathBasedTemplateAvailabilityProvider { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateProperties.java b/spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateProperties.java similarity index 99% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateProperties.java rename to spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateProperties.java index 9e14c6aeb94..1ff9cd05573 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateProperties.java +++ b/spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.groovy.template; +package org.springframework.boot.groovy.template.autoconfigure; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -36,7 +36,7 @@ import org.springframework.web.servlet.view.AbstractTemplateViewResolver; * * @author Dave Syer * @author Marten Deinum - * @since 1.1.0 + * @since 4.0.0 */ @ConfigurationProperties("spring.groovy.template") public class GroovyTemplateProperties { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/package-info.java b/spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/package-info.java similarity index 91% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/package-info.java rename to spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/package-info.java index 2cad38841fc..ad65a8e623b 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/groovy/template/package-info.java +++ b/spring-boot-project/spring-boot-groovy-templates/src/main/java/org/springframework/boot/groovy/template/autoconfigure/package-info.java @@ -17,4 +17,4 @@ /** * Auto-configuration for Groovy templates. */ -package org.springframework.boot.autoconfigure.groovy.template; +package org.springframework.boot.groovy.template.autoconfigure; diff --git a/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 00000000000..8941721d7be --- /dev/null +++ b/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,108 @@ +{ + "properties": [ + { + "name": "spring.groovy.template.configuration.auto-escape", + "deprecation": { + "replacement": "spring.groovy.template.auto-escape", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.auto-indent", + "deprecation": { + "replacement": "spring.groovy.template.auto-indent", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.auto-indent-string", + "deprecation": { + "replacement": "spring.groovy.template.auto-indent-string", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.auto-new-line", + "deprecation": { + "replacement": "spring.groovy.template.auto-new-line", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.base-template-class", + "deprecation": { + "replacement": "spring.groovy.template.base-template-class", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.cache-templates", + "deprecation": { + "replacement": "spring.groovy.template.cache", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.declaration-encoding", + "deprecation": { + "replacement": "spring.groovy.template.declaration-encoding", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.expand-empty-elements", + "deprecation": { + "replacement": "spring.groovy.template.expand-empty-elements", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.locale", + "deprecation": { + "replacement": "spring.groovy.template.locale", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.new-line-string", + "deprecation": { + "replacement": "spring.groovy.template.new-line-string", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.resource-loader-path", + "deprecation": { + "replacement": "spring.groovy.template.resource-loader-path", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.configuration.use-double-quotes", + "deprecation": { + "replacement": "spring.groovy.template.use-double-quotes", + "level": "warning", + "since": "3.5.0" + } + }, + { + "name": "spring.groovy.template.prefix", + "defaultValue": "" + }, + { + "name": "spring.groovy.template.suffix", + "defaultValue": ".tpl" + } + ] +} diff --git a/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring.factories b/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000000..27bc1e17f87 --- /dev/null +++ b/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +# Template Availability Providers +org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider=\ +org.springframework.boot.groovy.template.autoconfigure.GroovyTemplateAvailabilityProvider diff --git a/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring/aot.factories b/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring/aot.factories new file mode 100644 index 00000000000..70997c536cf --- /dev/null +++ b/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring/aot.factories @@ -0,0 +1,2 @@ +org.springframework.aot.hint.RuntimeHintsRegistrar=\ +org.springframework.boot.groovy.template.autoconfigure.GroovyTemplateAvailabilityProvider$GroovyTemplateAvailabilityRuntimeHints diff --git a/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000000..ec807a494e2 --- /dev/null +++ b/spring-boot-project/spring-boot-groovy-templates/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.springframework.boot.groovy.template.autoconfigure.GroovyTemplateAutoConfiguration diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfigurationTests.java b/spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAutoConfigurationTests.java similarity index 99% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfigurationTests.java rename to spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAutoConfigurationTests.java index 159161a008a..ac0097014d5 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.groovy.template; +package org.springframework.boot.groovy.template.autoconfigure; import java.io.File; import java.io.StringWriter; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProviderTests.java b/spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAvailabilityProviderTests.java similarity index 95% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProviderTests.java rename to spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAvailabilityProviderTests.java index 751c63e1b7e..33e912e78be 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProviderTests.java +++ b/spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplateAvailabilityProviderTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.groovy.template; +package org.springframework.boot.groovy.template.autoconfigure; import org.junit.jupiter.api.Test; @@ -22,9 +22,9 @@ import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeHint; import org.springframework.beans.factory.aot.AotServices; -import org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAvailabilityProvider.GroovyTemplateAvailabilityProperties; -import org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAvailabilityProvider.GroovyTemplateAvailabilityRuntimeHints; import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider; +import org.springframework.boot.groovy.template.autoconfigure.GroovyTemplateAvailabilityProvider.GroovyTemplateAvailabilityProperties; +import org.springframework.boot.groovy.template.autoconfigure.GroovyTemplateAvailabilityProvider.GroovyTemplateAvailabilityRuntimeHints; import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplatePropertiesTests.java b/spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplatePropertiesTests.java similarity index 97% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplatePropertiesTests.java rename to spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplatePropertiesTests.java index 4576c99c03b..841b3f4e207 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplatePropertiesTests.java +++ b/spring-boot-project/spring-boot-groovy-templates/src/test/java/org/springframework/boot/groovy/template/autoconfigure/GroovyTemplatePropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.groovy.template; +package org.springframework.boot.groovy.template.autoconfigure; import java.nio.charset.StandardCharsets; 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 index f85008f79f3..6dea3799ba7 100644 --- 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 @@ -21,6 +21,6 @@ plugins { description = "Starter for building MVC web applications using Groovy Templates views" dependencies { + api(project(":spring-boot-project:spring-boot-groovy-templates")) api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web")) - api("org.apache.groovy:groovy-templates") } diff --git a/spring-boot-project/spring-boot-test-autoconfigure/build.gradle b/spring-boot-project/spring-boot-test-autoconfigure/build.gradle index 561147135a6..94ac9b24202 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/build.gradle +++ b/spring-boot-project/spring-boot-test-autoconfigure/build.gradle @@ -54,6 +54,7 @@ dependencies { dockerTestRuntimeOnly("org.springframework.data:spring-data-redis") optional(project(":spring-boot-project:spring-boot-flyway")) + optional(project(":spring-boot-project:spring-boot-groovy-templates")) optional(project(":spring-boot-project:spring-boot-jackson")) optional(project(":spring-boot-project:spring-boot-jdbc")) optional(project(":spring-boot-project:spring-boot-jsonb")) diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc.imports b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc.imports index fdb4a66b464..db5431f52bb 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc.imports +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc.imports @@ -2,12 +2,12 @@ org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration -org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration +optional:org.springframework.boot.groovy.template.autoconfigure.GroovyTemplateAutoConfiguration optional:org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTestAutoConfigurationIntegrationTests.java b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTestAutoConfigurationIntegrationTests.java index d149720fee5..09296427bb5 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTestAutoConfigurationIntegrationTests.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTestAutoConfigurationIntegrationTests.java @@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration; -import org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration; import org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration; import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration; import org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration; import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration; import org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration; +import org.springframework.boot.groovy.template.autoconfigure.GroovyTemplateAutoConfiguration; import org.springframework.context.ApplicationContext; import org.springframework.core.task.AsyncTaskExecutor; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;