diff --git a/.sdkmanrc b/.sdkmanrc index e2a1d58..215786f 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1 +1 @@ -java=11.0.24-librca +java=17.0.12-librca diff --git a/build.gradle b/build.gradle index 86aec88..d85a1c6 100644 --- a/build.gradle +++ b/build.gradle @@ -5,11 +5,5 @@ plugins { allprojects { group = 'org.grails' - compileJava.options.release = 11 - - repositories { - mavenLocal() - mavenCentral() - maven { url "https://repo.grails.org/grails/core/" } - } + compileJava.options.release = 17 } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 7dc1277..986ecca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version=6.2.2-SNAPSHOT -grailsVersion=6.2.2-SNAPSHOT \ No newline at end of file +version=7.0.0-SNAPSHOT +grailsVersion=7.0.0-SNAPSHOT \ No newline at end of file diff --git a/grails-gsp-spring-boot/build.gradle b/grails-gsp-spring-boot/build.gradle index 5567c5a..ac23ef0 100644 --- a/grails-gsp-spring-boot/build.gradle +++ b/grails-gsp-spring-boot/build.gradle @@ -3,7 +3,7 @@ buildscript { maven { url = 'https://repo.grails.org/grails/core' } } dependencies { - classpath "org.grails:grails-gradle-plugin:6.2.2-SNAPSHOT" + classpath "org.grails:grails-gradle-plugin:7.0.0-SNAPSHOT" } } @@ -14,9 +14,13 @@ plugins { apply plugin: 'org.grails.grails-plugin' apply plugin: "org.grails.internal.grails-plugin-publish" +repositories { + mavenCentral() + maven { url "https://repo.grails.org/grails/core/" } +} + dependencies { - api "org.sitemesh:grails-plugin-sitemesh3:6.2.0" - compileOnly "javax.servlet.jsp:javax.servlet.jsp-api:2.3.3" + api "org.sitemesh:grails-plugin-sitemesh3:7.0.0-SNAPSHOT" } grailsPublish { diff --git a/grails-gsp-spring-boot/src/main/java/grails/gsp/boot/GspAutoConfiguration.java b/grails-gsp-spring-boot/src/main/java/grails/gsp/boot/GspAutoConfiguration.java index 2e9eb53..1ee30c0 100644 --- a/grails-gsp-spring-boot/src/main/java/grails/gsp/boot/GspAutoConfiguration.java +++ b/grails-gsp-spring-boot/src/main/java/grails/gsp/boot/GspAutoConfiguration.java @@ -28,15 +28,15 @@ import org.grails.encoder.CodecLookup; import org.grails.gsp.GroovyPagesTemplateEngine; import org.grails.gsp.io.GroovyPageScriptSource; +import org.grails.gsp.jsp.TagLibraryResolver; import org.grails.plugins.web.taglib.RenderSitemeshTagLib; +import org.grails.taglib.TagLibraryLookup; import org.grails.web.gsp.GroovyPagesTemplateRenderer; import org.grails.web.pages.StandaloneTagLibraryLookup; import org.grails.web.gsp.io.CachingGrailsConventionGroovyPageLocator; import org.grails.web.gsp.io.GrailsConventionGroovyPageLocator; import org.grails.gsp.jsp.TagLibraryResolverImpl; -import org.grails.web.servlet.view.GrailsLayoutViewResolver; import org.grails.web.servlet.view.GroovyPageViewResolver; -import org.grails.web.sitemesh.GroovyPageLayoutFinder; import org.sitemesh.autoconfigure.SiteMeshAutoConfiguration; import org.sitemesh.grails.plugins.sitemesh3.GrailsLayoutHandlerMapping; import org.sitemesh.grails.plugins.sitemesh3.Sitemesh3GrailsPlugin; @@ -69,7 +69,7 @@ import org.grails.plugins.web.taglib.SitemeshTagLib; import org.grails.plugins.web.taglib.RenderTagLib; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; @Configuration @AutoConfigureAfter(WebMvcAutoConfiguration.class) @@ -111,15 +111,17 @@ protected static class GspTemplateEngineAutoConfiguration extends AbstractGspCon @Value("${sitemesh.decorator.default:}") String defaultLayoutName; - @Bean(autowire=Autowire.BY_NAME) + @Bean @ConditionalOnMissingBean(name="groovyPagesTemplateEngine") - GroovyPagesTemplateEngine groovyPagesTemplateEngine() { + GroovyPagesTemplateEngine groovyPagesTemplateEngine(TagLibraryResolver tagLibraryResolver, TagLibraryLookup tagLibraryLookup) { GroovyPagesTemplateEngine templateEngine = new GroovyPagesTemplateEngine(); templateEngine.setReloadEnabled(gspReloadingEnabled); + templateEngine.setJspTagLibraryResolver(tagLibraryResolver); + templateEngine.setTagLibraryLookup(tagLibraryLookup); return templateEngine; } - @Bean(autowire=Autowire.BY_NAME) + @Bean @ConditionalOnMissingBean(name="groovyPageLocator") GrailsConventionGroovyPageLocator groovyPageLocator() { final List templateRootsCleaned=resolveTemplateRoots(); @@ -175,17 +177,6 @@ protected List resolveTemplateRoots() { } @Bean - @ConditionalOnMissingBean(name = "groovyPageLayoutFinder") - public GroovyPageLayoutFinder groovyPageLayoutFinder() { - GroovyPageLayoutFinder groovyPageLayoutFinder = new GroovyPageLayoutFinder(); - groovyPageLayoutFinder.setGspReloadEnabled(gspReloadingEnabled); - groovyPageLayoutFinder.setCacheEnabled(gspLayoutCaching); - groovyPageLayoutFinder.setEnableNonGspViews(false); - groovyPageLayoutFinder.setDefaultDecoratorName(defaultLayoutName); - return groovyPageLayoutFinder; - } - - @Bean(autowire=Autowire.BY_NAME) @ConditionalOnMissingBean(name = "groovyPagesTemplateRenderer") GroovyPagesTemplateRenderer groovyPagesTemplateRenderer() { GroovyPagesTemplateRenderer groovyPagesTemplateRenderer = new GroovyPagesTemplateRenderer(); @@ -217,16 +208,12 @@ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) protected static class GspViewResolverConfiguration extends AbstractGspConfig { @Bean @ConditionalOnMissingBean(name = "gspViewResolver") - public ViewResolver gspViewResolver(GroovyPagesTemplateEngine groovyPagesTemplateEngine, GrailsConventionGroovyPageLocator groovyPageLocator, GroovyPageLayoutFinder groovyPageLayoutFinder) { + public ViewResolver gspViewResolver(GroovyPagesTemplateEngine groovyPagesTemplateEngine, GrailsConventionGroovyPageLocator groovyPageLocator) { GroovyPageViewResolver groovyPageViewResolver = new GroovyPageViewResolver(groovyPagesTemplateEngine, groovyPageLocator); groovyPageViewResolver.setResolveJspView(jspEnabled); groovyPageViewResolver.setAllowGrailsViewCaching(!gspReloadingEnabled || viewCacheTimeout != 0); groovyPageViewResolver.setCacheTimeout(gspReloadingEnabled ? viewCacheTimeout : -1); - if (!sitemesh3) { - return new GrailsLayoutViewResolver(groovyPageViewResolver, groovyPageLayoutFinder); - } else { - return groovyPageViewResolver; - } + return groovyPageViewResolver; } } @@ -317,10 +304,10 @@ public void setEnvironment(Environment environment) { } } - @ConditionalOnClass({javax.servlet.jsp.tagext.JspTag.class, TagLibraryResolverImpl.class}) + @ConditionalOnClass({TagLibraryResolverImpl.class}) @Configuration protected static class GspJspIntegrationConfiguration implements EnvironmentAware { - @Bean(autowire = Autowire.BY_NAME) + @Bean public TagLibraryResolverImpl jspTagLibraryResolver() { return new TagLibraryResolverImpl(); } diff --git a/grails-gsp-spring-boot/src/main/resources/META-INF/spring.factories b/grails-gsp-spring-boot/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 2c3eed0..0000000 --- a/grails-gsp-spring-boot/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -grails.gsp.boot.GspAutoConfiguration diff --git a/grails-gsp-spring-boot/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/grails-gsp-spring-boot/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..f4764fd --- /dev/null +++ b/grails-gsp-spring-boot/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +grails.gsp.boot.GspAutoConfiguration \ No newline at end of file diff --git a/sample-apps/gsp/gsp-example/build.gradle b/sample-apps/gsp/gsp-example/build.gradle index 3eb8755..76ed3ce 100644 --- a/sample-apps/gsp/gsp-example/build.gradle +++ b/sample-apps/gsp/gsp-example/build.gradle @@ -3,22 +3,21 @@ buildscript { maven { url "https://repo.grails.org/grails/core/" } } dependencies { - classpath "org.grails:grails-gradle-plugin:6.2.2-SNAPSHOT" + classpath "org.grails:grails-gradle-plugin:7.0.0-SNAPSHOT" } } plugins { id 'java' id 'war' - id 'org.springframework.boot' version "2.7.18" - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'org.springframework.boot' version "3.3.5" + id 'io.spring.dependency-management' version '1.1.6' id "groovy" } apply plugin: "org.grails.grails-gsp" repositories { - mavenLocal() mavenCentral() maven { url "https://repo.grails.org/grails/core/" } } @@ -34,13 +33,11 @@ compileGroovyPages { dependencies { implementation project(':grails-gsp-spring-boot') - implementation("org.springframework.boot:spring-boot-starter-web:2.7.18") + implementation "org.hibernate.validator:hibernate-validator:8.0.0.Final" // validation - implementation("org.hibernate:hibernate-validator:6.0.10.Final") // validation + implementation "org.grails:grails-web-jsp:7.0.0-SNAPSHOT" + implementation "org.grails:grails-plugin-controllers:7.0.0-SNAPSHOT" // only needed for GrailsFilters - implementation("org.grails:grails-web-jsp:6.2.2-SNAPSHOT") - implementation("javax.servlet.jsp:javax.servlet.jsp-api:2.3.3") - implementation("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.2") implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' // jsp - implementation("org.apache.tomcat.embed:tomcat-embed-el") + implementation "org.apache.tomcat.embed:tomcat-embed-el" } \ No newline at end of file diff --git a/sample-apps/gsp/gsp-example/src/main/java/hello/Person.java b/sample-apps/gsp/gsp-example/src/main/java/hello/Person.java index 29aac9c..43eb07a 100644 --- a/sample-apps/gsp/gsp-example/src/main/java/hello/Person.java +++ b/sample-apps/gsp/gsp-example/src/main/java/hello/Person.java @@ -1,8 +1,8 @@ package hello; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; public class Person { diff --git a/sample-apps/gsp/gsp-example/src/main/java/hello/WebController.java b/sample-apps/gsp/gsp-example/src/main/java/hello/WebController.java index 8d91647..1e20f9b 100644 --- a/sample-apps/gsp/gsp-example/src/main/java/hello/WebController.java +++ b/sample-apps/gsp/gsp-example/src/main/java/hello/WebController.java @@ -1,5 +1,7 @@ package hello; +import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; @@ -8,9 +10,6 @@ import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import javax.servlet.http.HttpSession; -import javax.validation.Valid; - @Controller public class WebController implements WebMvcConfigurer { diff --git a/sample-apps/gsp/gsp-example/src/main/resources/application.properties b/sample-apps/gsp/gsp-example/src/main/resources/application.properties index 0e5f1d9..3892ef0 100644 --- a/sample-apps/gsp/gsp-example/src/main/resources/application.properties +++ b/sample-apps/gsp/gsp-example/src/main/resources/application.properties @@ -1,5 +1,4 @@ grails.gsp.tldScanPattern=classpath*:/META-INF/spring*.tld spring.main.allow-circular-references=true logging.level.web=trace -grails.views.gsp.sitemesh.preprocess=false sitemesh.decorator.default=main \ No newline at end of file diff --git a/sample-apps/gsp/script/.sdkmanrc b/sample-apps/gsp/script/.sdkmanrc index de12f8b..27e639c 100644 --- a/sample-apps/gsp/script/.sdkmanrc +++ b/sample-apps/gsp/script/.sdkmanrc @@ -1,2 +1,2 @@ -java=11.0.24-librca -springboot=2.7.18 +java=17.0.12-librca +springboot=3.3.5 diff --git a/sample-apps/gsp/script/app.groovy b/sample-apps/gsp/script/app.groovy index 7bbe71c..0522e5b 100644 --- a/sample-apps/gsp/script/app.groovy +++ b/sample-apps/gsp/script/app.groovy @@ -1,5 +1,5 @@ @GrabResolver(name='grails-repo', root='https://repo.grails.org/grails/core/') -@Grab("org.grails:grails-gsp-spring-boot:6.2.2-SNAPSHOT") +@Grab("org.grails:grails-gsp-spring-boot:7.0.0-SNAPSHOT") import grails.gsp.TagLib import org.springframework.web.servlet.ModelAndView