diff --git a/.github/renovate.json b/.github/renovate.json index eb3ed0af..59d87c4e 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -20,14 +20,6 @@ ], "groupName": "junit-jupiter monorepo" }, - { - "matchPackageNames": [ - "io.netty:netty-transport", - "io.netty:netty-handler", - "io.netty:netty-codec" - ], - "groupName": "netty monorepo" - }, { "matchPackageNames": [ "org.grails:grails-datastore-core", diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index d0868396..13b1475a 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -37,7 +37,7 @@ jobs: env: GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} with: - arguments: build -Dgeb.env=chromeHeadless -x test -x integrationTest + arguments: build publish: runs-on: ubuntu-latest if: github.event_name == 'push' diff --git a/.github/workflows/groovy-joint-workflow.yml b/.github/workflows/groovy-joint-workflow.yml index 05f16106..637a14dc 100644 --- a/.github/workflows/groovy-joint-workflow.yml +++ b/.github/workflows/groovy-joint-workflow.yml @@ -161,7 +161,4 @@ jobs: with: arguments: | build - -Dgeb.env=chromeHeadless - -x groovydoc - -x test - -x integrationTest \ No newline at end of file + -x groovydoc \ No newline at end of file diff --git a/boot-plugin/build.gradle b/boot-plugin/build.gradle index 951ea675..6c939fe0 100644 --- a/boot-plugin/build.gradle +++ b/boot-plugin/build.gradle @@ -1,18 +1,19 @@ dependencies { - compileOnly "org.grails:grails-shell:$grailsShellVersion", { + implementation platform("org.grails:grails-bom:$grailsVersion") + compileOnly "org.grails:grails-shell", { exclude group:'org.apache.groovy', module:'groovy' } - api "org.springframework.boot:spring-boot-autoconfigure:$springBootVersion" - api "org.apache.groovy:groovy:$groovyVersion" + api "org.springframework.boot:spring-boot-autoconfigure" + api "org.apache.groovy:groovy" api project(":grails-datastore-gorm-mongodb"), { exclude group:'org.grails', module:'grails-datastore-gorm-plugin-support' } api project(":grails-datastore-gorm-mongodb-ext"), { exclude group:'org.grails', module:'grails-datastore-gorm-mongodb' } - api "org.springframework:spring-tx:$springVersion" - testImplementation "org.grails:grails-shell:$grailsShellVersion", { + api "org.springframework:spring-tx" + testImplementation "org.grails:grails-shell", { exclude group:'org.apache.groovy', module:'groovy' } } diff --git a/build.gradle b/build.gradle index 90ab4f36..44997948 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,6 @@ buildscript { dependencies { classpath "org.grails:grails-gradle-plugin:$grailsGradlePluginVersion" classpath "org.asciidoctor:asciidoctor-gradle-jvm:$asciidoctorGradleVersion" - classpath "com.github.erdi:webdriver-binaries-gradle-plugin:$webdriverBinariesPluginVersion" classpath "io.github.gradle-nexus:publish-plugin:$gradleNexusPublishPluginVersion" } } @@ -17,7 +16,6 @@ group "org.grails" version project.projectVersion ext { - hibernatePluginVersion = project.hibernatePluginVersion isCiBuild = project.hasProperty("isCiBuild") || System.getenv().get("CI") as Boolean isBuildSnapshot = project.version.endsWith("-SNAPSHOT") isReleaseVersion = !isBuildSnapshot @@ -56,7 +54,6 @@ allprojects { ext.groovyVersion = System.getenv('CI_GROOVY_VERSION') ?: project.groovyVersion repositories { - mavenLocal() mavenCentral() maven { url = 'https://repo.grails.org/grails/core' } maven { url = 'https://oss.sonatype.org/content/repositories/snapshots' } @@ -69,18 +66,11 @@ allprojects { url = 'https://repository.apache.org/content/repositories/snapshots' } } +// mavenLocal() // do not commit uncommented, for local testing only } } subprojects { Project subproject -> - - ext['h2.version'] = h2Version - ext['gorm.version'] = datastoreVersion - ext['gorm.hibernate5.version'] = hibernatePluginVersion - ext['junit-jupiter.version'] = junitJupiterVersion - ext['spock.version'] = spockVersion - ext['mongodb.version'] = mongodbDriverVersion - if (project.name.startsWith("examples")) { apply plugin: 'groovy' @@ -91,39 +81,19 @@ subprojects { Project subproject -> apply plugin:"org.grails.grails-gsp" } - boolean usesGeb = project.name.contains('grails3-hibernate5-mongodb') || project.name.contains('grails3-mongodb') || project.name.contains('grails3-mongodb-database-per-tenant')|| project.name.contains('grails3-rxmongodb') - - if (usesGeb) { - apply plugin:"com.github.erdi.webdriver-binaries" - } - if (project.name == "examples-test-data-service") { apply plugin:"org.grails.grails-web" } - configurations.configureEach { - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - if(details.requested.group == 'org.apache.groovy' && details.requested.name.startsWith('groovy')) { - details.useVersion(groovyVersion) - } else if (details.requested.group == 'org.mongodb' && details.requested.module.name != 'mongodb-driver-rx') { - details.useVersion(mongodbDriverVersion) - } else if (details.requested.group == 'org.springframework') { - details.useVersion(springVersion) - } else if (details.requested.group == "org.springframework.boot") { - details.useVersion(springBootVersion) - } - } - } - dependencies { - testImplementation "jakarta.annotation:jakarta.annotation-api:$jakartaAnnotationApiVersion" + implementation platform("org.grails:grails-bom:$grailsVersion") testImplementation "io.micrometer:micrometer-core:latest.integration" - testImplementation "org.hibernate:hibernate-validator:$hibernateValidatorVersion" - testImplementation "org.apache.groovy:groovy-test-junit5:$groovyVersion" - testImplementation "org.spockframework:spock-core:$spockVersion", { transitive = false } - testImplementation "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion" - testImplementation "org.junit.platform:junit-platform-runner:$junitJupiterPlatformVersion" - testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion" + testImplementation "org.hibernate.validator:hibernate-validator" + testImplementation "org.apache.groovy:groovy-test-junit5" + testImplementation "org.spockframework:spock-core", { transitive = false } + testImplementation "org.junit.jupiter:junit-jupiter-api" + testImplementation "org.junit.platform:junit-platform-runner" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine" } tasks.withType(Test) { @@ -220,56 +190,17 @@ subprojects { Project subproject -> withSourcesJar() } - configurations { - all { - resolutionStrategy { - force "org.apache.groovy:groovy:$groovyVersion" - force "org.apache.groovy:groovy-dateutil:$groovyVersion" - force "org.apache.groovy:groovy-xml:$groovyVersion" - force "org.apache.groovy:groovy-templates:$groovyVersion" - } - } - } - - configurations.all { - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - def dependencyName = details.requested.name - if (dependencyName.startsWith('mongodb-driver') && !dependencyName.contains('-rx')) { - details.useVersion(mongodbDriverVersion) - } else if( details.requested.group == 'org.grails' && - details.requested.name in ['grails-datastore-core', - 'grails-datastore-async', - 'grails-datastore-gorm', - 'grails-datastore-gorm-async', - 'grails-datastore-gorm-rx', - 'grails-datastore-gorm-support', - 'grails-datastore-gorm-tck', - 'grails-datastore-gorm-test', - 'grails-datastore-gorm-validation', - 'grails-datastore-web'] - ) { - details.useVersion(datastoreVersion) - } else if (details.requested.group == 'org.mongodb' && details.requested.module.name != 'mongodb-driver-rx') { - details.useVersion(mongodbDriverVersion) - } else if(details.requested.group == 'org.springframework') { - details.useVersion(springVersion) - } else if (details.requested.group == 'org.springframework.boot') { - details.useVersion(springBootVersion) - } - } - } - dependencies { - api "org.apache.groovy:groovy:$groovyVersion" - api "org.apache.groovy:groovy-templates:$groovyVersion" - - testImplementation "org.apache.groovy:groovy-json:$groovyVersion" - testImplementation "org.apache.groovy:groovy-templates:$groovyVersion" - testImplementation "org.apache.groovy:groovy-test-junit5:$groovyVersion" - testImplementation "org.spockframework:spock-core:$spockVersion", { transitive = false } - testImplementation "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion" - testImplementation "org.junit.platform:junit-platform-runner:$junitJupiterPlatformVersion" - testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion" + api "org.apache.groovy:groovy" + api "org.apache.groovy:groovy-templates" + + testImplementation "org.apache.groovy:groovy-json" + testImplementation "org.apache.groovy:groovy-templates" + testImplementation "org.apache.groovy:groovy-test-junit5" + testImplementation "org.spockframework:spock-core", { transitive = false } + testImplementation "org.junit.jupiter:junit-jupiter-api" + testImplementation "org.junit.platform:junit-platform-runner" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine" } publishing { diff --git a/docs/build.gradle b/docs/build.gradle index 24b23396..b9eb3bc2 100644 --- a/docs/build.gradle +++ b/docs/build.gradle @@ -25,28 +25,15 @@ configurations { } } -configurations.all { - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - if (details.requested.group == 'org.apache.groovy' && details.requested.name.startsWith('groovy')) { - details.useVersion(groovyVersion) - } else if (details.requested.group == 'org.springframework') { - details.useVersion(springVersion) - } else if (details.requested.group == "org.springframework.boot") { - details.useVersion(springBootVersion) - } else if (details.requested.group == 'org.springframework.boot') { - details.useVersion(springBootVersion) - } - } -} dependencies { - documentation "org.fusesource.jansi:jansi:$jansiVersion" - documentation "org.apache.groovy:groovy:$groovyVersion" - documentation "org.apache.groovy:groovy-templates:$groovyVersion" - documentation "org.apache.groovy:groovy-dateutil:$groovyVersion" - documentation "com.github.javaparser:javaparser-core:$javaParserCoreVersion" + documentation "org.fusesource.jansi:jansi" + documentation "org.apache.groovy:groovy" + documentation "org.apache.groovy:groovy-templates" + documentation "org.apache.groovy:groovy-dateutil" + documentation "com.github.javaparser:javaparser-core" for(p in coreProjects) { - documentation "org.grails:grails-datastore-$p:$datastoreVersion" + documentation "org.grails:grails-datastore-$p" } project.rootProject.subprojects.findAll { !it.name.contains('-rx-') }.each { subproject -> if(subproject.name != "docs" && !subproject.name.startsWith('examples')) { diff --git a/examples/grails3-hibernate5-mongodb/build.gradle b/examples/grails3-hibernate5-mongodb/build.gradle index cb7306ab..11a278e9 100644 --- a/examples/grails3-hibernate5-mongodb/build.gradle +++ b/examples/grails3-hibernate5-mongodb/build.gradle @@ -1,70 +1,42 @@ +plugins { + id "com.bertramlabs.asset-pipeline" version "5.0.4" +} + group "examples" dependencies { - implementation "org.springframework.boot:spring-boot-starter-logging" + + implementation project(":grails-plugin") + implementation "org.mongodb:mongodb-driver-sync" + testImplementation "org.testcontainers:mongodb:$testcontainersMongodbVersion" + implementation "org.grails.plugins:hibernate5" + + implementation "org.grails:grails-core" + implementation "org.grails:grails-logging" + implementation "org.grails:grails-plugin-databinding" + implementation "org.grails:grails-plugin-i18n" + implementation "org.grails:grails-plugin-interceptors" + implementation "org.grails:grails-plugin-rest" + implementation "org.grails:grails-plugin-services" + implementation "org.grails:grails-plugin-url-mappings" + implementation "org.grails:grails-web-boot" + implementation "org.grails.plugins:gsp" + implementation "org.grails.plugins:scaffolding" implementation "org.springframework.boot:spring-boot-autoconfigure" + implementation "org.springframework.boot:spring-boot-starter" implementation "org.springframework.boot:spring-boot-starter-actuator" + implementation "org.springframework.boot:spring-boot-starter-logging" implementation "org.springframework.boot:spring-boot-starter-tomcat" - implementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion" - implementation "org.grails:grails-core:$grailsVersion" - implementation "org.grails:grails-dependencies:$grailsVersion", { - exclude module:'grails-datastore-simple' - } - implementation "org.grails:grails-web-boot:$grailsVersion" - implementation "org.mongodb:mongodb-driver-sync:$mongodbDriverVersion" - implementation project(":grails-plugin") - implementation "org.grails.plugins:hibernate5:$hibernatePluginVersion" - implementation "org.hibernate:hibernate-ehcache:$hibernateCoreVersion" - - runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails:$assetPipelineVersion" - runtimeOnly "com.h2database:h2:$h2Version" - runtimeOnly "org.apache.tomcat:tomcat-jdbc:$tomcatVersion" - runtimeOnly "org.grails.plugins:scaffolding:$scaffoldingVersion" - runtimeOnly "org.grails.plugins:fields:$fieldsVersion" - - testImplementation "org.grails:grails-gorm-testing-support:$grailsTestingSupportVersion" - testImplementation "org.grails:grails-web-testing-support:$grailsTestingSupportVersion" - testImplementation "org.testcontainers:mongodb:$testcontainersMongodbVersion" - testImplementation "io.netty:netty-transport:$nettyVersion" - testImplementation "io.netty:netty-codec:$nettyVersion" - testImplementation "io.netty:netty-handler:$nettyVersion" - testImplementation "org.grails.plugins:geb:$gebPluginVersion", { - exclude group: 'org.gebish', module: 'geb-spock' - } - implementation "com.github.erdi:webdriver-binaries-gradle-plugin:$webdriverBinariesPluginVersion" - testImplementation("org.grails.plugins:geb:$gebPluginVersion") { - exclude group: 'org.gebish', module: 'geb-spock' - } - testImplementation "org.gebish:geb-spock:$gebVersion" - - testRuntimeOnly "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion" - testRuntimeOnly "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion" - testRuntimeOnly "org.seleniumhq.selenium:selenium-safari-driver:$seleniumSafariDriverVersion" - - testImplementation "org.seleniumhq.selenium:selenium-remote-driver:$seleniumVersion" - testImplementation "org.seleniumhq.selenium:selenium-api:$seleniumVersion" - testImplementation "org.seleniumhq.selenium:selenium-support:$seleniumVersion" -} - -tasks.withType(Test) { - systemProperty "geb.env", System.getProperty('geb.env') - systemProperty "geb.build.reportsDir", reporting.file("geb/integrationTest") - if (!System.getenv().containsKey('CI')) { - systemProperty 'webdriver.chrome.driver', System.getProperty('webdriver.chrome.driver') - systemProperty 'webdriver.gecko.driver', System.getProperty('webdriver.gecko.driver') - } else { - systemProperty 'webdriver.chrome.driver', "${System.getenv('CHROMEWEBDRIVER')}/chromedriver" - systemProperty 'webdriver.gecko.driver', "${System.getenv('GECKOWEBDRIVER')}/geckodriver" - } + implementation "org.springframework.boot:spring-boot-starter-validation" + console "org.grails:grails-console" + runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails" + runtimeOnly "com.h2database:h2" + runtimeOnly "org.apache.tomcat:tomcat-jdbc" + runtimeOnly "org.fusesource.jansi:jansi" + integrationTestImplementation testFixtures("org.grails.plugins:geb") + testImplementation "org.grails:grails-gorm-testing-support" + testImplementation "org.grails:grails-web-testing-support" + testImplementation "org.spockframework:spock-core" } -webdriverBinaries { - if (!System.getenv().containsKey('CI')) { - chromedriver "$chromeDriverVersion" - geckodriver "$geckodriverVersion" - } -} -//compileGroovy.groovyOptions.forkOptions.jvmArgs = ['-Xdebug','-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'] - - - +//compileGroovy.groovyOptions.forkOptions.jvmArgs = ['-Xdebug','-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'] \ No newline at end of file diff --git a/examples/grails3-hibernate5-mongodb/src/integration-test/groovy/functional/tests/AuthorControllerSpec.groovy b/examples/grails3-hibernate5-mongodb/src/integration-test/groovy/functional/tests/AuthorControllerSpec.groovy index e43343be..73b1d4f4 100644 --- a/examples/grails3-hibernate5-mongodb/src/integration-test/groovy/functional/tests/AuthorControllerSpec.groovy +++ b/examples/grails3-hibernate5-mongodb/src/integration-test/groovy/functional/tests/AuthorControllerSpec.groovy @@ -1,10 +1,10 @@ package functional.tests -import geb.spock.GebSpec +import grails.plugin.geb.ContainerGebSpec import grails.testing.mixin.integration.Integration @Integration(applicationClass = Application) -class AuthorControllerSpec extends GebSpec { +class AuthorControllerSpec extends ContainerGebSpec { void "Test list authors"() { when:"The home page is visited" diff --git a/examples/grails3-hibernate5-mongodb/src/integration-test/groovy/functional/tests/BookControllerSpec.groovy b/examples/grails3-hibernate5-mongodb/src/integration-test/groovy/functional/tests/BookControllerSpec.groovy index e2b1ec33..0d4fbf05 100644 --- a/examples/grails3-hibernate5-mongodb/src/integration-test/groovy/functional/tests/BookControllerSpec.groovy +++ b/examples/grails3-hibernate5-mongodb/src/integration-test/groovy/functional/tests/BookControllerSpec.groovy @@ -1,10 +1,10 @@ package functional.tests -import geb.spock.GebSpec +import grails.plugin.geb.ContainerGebSpec import grails.testing.mixin.integration.Integration @Integration(applicationClass = Application) -class BookControllerSpec extends GebSpec { +class BookControllerSpec extends ContainerGebSpec { void "Test list books"() { when:"The home page is visited" diff --git a/examples/grails3-hibernate5-mongodb/src/integration-test/resources/GebConfig.groovy b/examples/grails3-hibernate5-mongodb/src/integration-test/resources/GebConfig.groovy deleted file mode 100644 index adb480e3..00000000 --- a/examples/grails3-hibernate5-mongodb/src/integration-test/resources/GebConfig.groovy +++ /dev/null @@ -1,41 +0,0 @@ -import org.openqa.selenium.chrome.ChromeDriver -import org.openqa.selenium.chrome.ChromeOptions -import org.openqa.selenium.firefox.FirefoxDriver -import org.openqa.selenium.firefox.FirefoxOptions -import org.openqa.selenium.safari.SafariDriver - -environments { - - // You need to configure in Safari -> Develop -> Allowed Remote Automation - safari { - driver = { new SafariDriver() } - } - - // run via “./gradlew -Dgeb.env=chrome iT” - chrome { - driver = { new ChromeDriver() } - } - - // run via “./gradlew -Dgeb.env=chromeHeadless iT” - chromeHeadless { - driver = { - ChromeOptions o = new ChromeOptions() - o.addArguments('headless') - new ChromeDriver(o) - } - } - - // run via “./gradlew -Dgeb.env=firefoxHeadless iT” - firefoxHeadless { - driver = { - FirefoxOptions o = new FirefoxOptions() - o.addArguments('-headless') - new FirefoxDriver(o) - } - } - - // run via “./gradlew -Dgeb.env=firefox iT” - firefox { - driver = { new FirefoxDriver() } - } -} \ No newline at end of file diff --git a/examples/grails3-mongodb-database-per-tenant/build.gradle b/examples/grails3-mongodb-database-per-tenant/build.gradle index f0ecc2c9..2652d6c1 100644 --- a/examples/grails3-mongodb-database-per-tenant/build.gradle +++ b/examples/grails3-mongodb-database-per-tenant/build.gradle @@ -1,54 +1,35 @@ +plugins { + id "com.bertramlabs.asset-pipeline" version "5.0.4" +} + dependencies { - implementation "org.springframework.boot:spring-boot-starter-logging" + implementation project(":grails-plugin") + implementation "org.mongodb:mongodb-driver-sync" + + implementation "org.grails:grails-core" + implementation "org.grails:grails-logging" + implementation "org.grails:grails-plugin-databinding" + implementation "org.grails:grails-plugin-i18n" + implementation "org.grails:grails-plugin-interceptors" + implementation "org.grails:grails-plugin-rest" + implementation "org.grails:grails-plugin-services" + implementation "org.grails:grails-plugin-url-mappings" + implementation "org.grails:grails-web-boot" + implementation "org.grails.plugins:gsp" + implementation "org.grails.plugins:scaffolding" implementation "org.springframework.boot:spring-boot-autoconfigure" + implementation "org.springframework.boot:spring-boot-starter" implementation "org.springframework.boot:spring-boot-starter-actuator" + implementation "org.springframework.boot:spring-boot-starter-logging" implementation "org.springframework.boot:spring-boot-starter-tomcat" - implementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion" - implementation "org.grails:grails-core:$grailsVersion" - implementation "org.grails:grails-dependencies:$grailsVersion", { - exclude module:'grails-datastore-simple' - } - implementation "org.grails:grails-web-boot:$grailsVersion" - implementation project(":grails-plugin") - implementation("org.ysb33r.gradle:grolifant80:$grolifantVersion") - - runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails:$assetPipelineVersion" - runtimeOnly "com.h2database:h2:$h2Version" - - implementation "org.mongodb:mongodb-driver-sync:$mongodbDriverVersion" - runtimeOnly "org.grails.plugins:scaffolding:$scaffoldingVersion" - runtimeOnly "org.grails.plugins:fields:$fieldsVersion" - - testImplementation "org.grails:grails-gorm-testing-support:$grailsTestingSupportVersion" - testImplementation "org.grails:grails-web-testing-support:$grailsTestingSupportVersion" - testImplementation("org.grails.plugins:geb:$gebPluginVersion") { - exclude group: 'org.gebish', module: 'geb-spock' - } - testImplementation "org.gebish:geb-spock:$gebVersion" - testRuntimeOnly "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion" - testRuntimeOnly "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion" - testRuntimeOnly "org.seleniumhq.selenium:selenium-safari-driver:$seleniumSafariDriverVersion" - - testImplementation "org.seleniumhq.selenium:selenium-remote-driver:$seleniumVersion" - testImplementation "org.seleniumhq.selenium:selenium-api:$seleniumVersion" - testImplementation "org.seleniumhq.selenium:selenium-support:$seleniumVersion" -} - -tasks.withType(Test) { - systemProperty "geb.env", System.getProperty('geb.env') - systemProperty "geb.build.reportsDir", reporting.file("geb/integrationTest") - if (!System.getenv().containsKey('CI')) { - systemProperty 'webdriver.chrome.driver', System.getProperty('webdriver.chrome.driver') - systemProperty 'webdriver.gecko.driver', System.getProperty('webdriver.gecko.driver') - } else { - systemProperty 'webdriver.chrome.driver', "${System.getenv('CHROMEWEBDRIVER')}/chromedriver" - systemProperty 'webdriver.gecko.driver', "${System.getenv('GECKOWEBDRIVER')}/geckodriver" - } -} - -webdriverBinaries { - if (!System.getenv().containsKey('CI')) { - chromedriver "$chromeDriverVersion" - geckodriver "$geckodriverVersion" - } + implementation "org.springframework.boot:spring-boot-starter-validation" + console "org.grails:grails-console" + runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails" + runtimeOnly "com.h2database:h2" + runtimeOnly "org.apache.tomcat:tomcat-jdbc" + runtimeOnly "org.fusesource.jansi:jansi" + integrationTestImplementation testFixtures("org.grails.plugins:geb") + testImplementation "org.grails:grails-gorm-testing-support" + testImplementation "org.grails:grails-web-testing-support" + testImplementation "org.spockframework:spock-core" } diff --git a/examples/grails3-mongodb-database-per-tenant/src/integration-test/resources/GebConfig.groovy b/examples/grails3-mongodb-database-per-tenant/src/integration-test/resources/GebConfig.groovy deleted file mode 100644 index adb480e3..00000000 --- a/examples/grails3-mongodb-database-per-tenant/src/integration-test/resources/GebConfig.groovy +++ /dev/null @@ -1,41 +0,0 @@ -import org.openqa.selenium.chrome.ChromeDriver -import org.openqa.selenium.chrome.ChromeOptions -import org.openqa.selenium.firefox.FirefoxDriver -import org.openqa.selenium.firefox.FirefoxOptions -import org.openqa.selenium.safari.SafariDriver - -environments { - - // You need to configure in Safari -> Develop -> Allowed Remote Automation - safari { - driver = { new SafariDriver() } - } - - // run via “./gradlew -Dgeb.env=chrome iT” - chrome { - driver = { new ChromeDriver() } - } - - // run via “./gradlew -Dgeb.env=chromeHeadless iT” - chromeHeadless { - driver = { - ChromeOptions o = new ChromeOptions() - o.addArguments('headless') - new ChromeDriver(o) - } - } - - // run via “./gradlew -Dgeb.env=firefoxHeadless iT” - firefoxHeadless { - driver = { - FirefoxOptions o = new FirefoxOptions() - o.addArguments('-headless') - new FirefoxDriver(o) - } - } - - // run via “./gradlew -Dgeb.env=firefox iT” - firefox { - driver = { new FirefoxDriver() } - } -} \ No newline at end of file diff --git a/examples/grails3-mongodb/build.gradle b/examples/grails3-mongodb/build.gradle index 829ad608..1c06aff3 100644 --- a/examples/grails3-mongodb/build.gradle +++ b/examples/grails3-mongodb/build.gradle @@ -1,61 +1,42 @@ +plugins { + id "com.bertramlabs.asset-pipeline" version "5.0.4" +} + group "examples" dependencies { - implementation "org.springframework.boot:spring-boot-starter-logging" + + implementation project(":grails-plugin") + implementation "org.mongodb:mongodb-driver-sync" + + implementation "org.grails:grails-core" + implementation "org.grails:grails-logging" + implementation "org.grails:grails-plugin-databinding" + implementation "org.grails:grails-plugin-i18n" + implementation "org.grails:grails-plugin-interceptors" + implementation "org.grails:grails-plugin-rest" + implementation "org.grails:grails-plugin-services" + implementation "org.grails:grails-plugin-url-mappings" + implementation "org.grails:grails-web-boot" + implementation "org.grails.plugins:gsp" + implementation "org.grails.plugins:scaffolding" implementation "org.springframework.boot:spring-boot-autoconfigure" + implementation "org.springframework.boot:spring-boot-starter" implementation "org.springframework.boot:spring-boot-starter-actuator" + implementation "org.springframework.boot:spring-boot-starter-logging" implementation "org.springframework.boot:spring-boot-starter-tomcat" - implementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion" - implementation "org.grails:grails-core:$grailsVersion" - implementation "org.grails:grails-dependencies:$grailsVersion", { - exclude module:'grails-datastore-simple' - } - implementation "org.grails:grails-web-boot:$grailsVersion" - implementation project(":grails-plugin") - implementation "org.mongodb:mongodb-driver-sync:$mongodbDriverVersion" - - runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails:$assetPipelineVersion" + implementation "org.springframework.boot:spring-boot-starter-validation" + console "org.grails:grails-console" + runtimeOnly "com.bertramlabs.plugins:asset-pipeline-grails" runtimeOnly "com.h2database:h2" - runtimeOnly "org.grails.plugins:scaffolding:$scaffoldingVersion" - runtimeOnly "org.grails.plugins:fields:$fieldsVersion" - - testImplementation "org.grails:grails-gorm-testing-support:$grailsTestingSupportVersion" - testImplementation "org.grails:grails-web-testing-support:$grailsTestingSupportVersion" - testImplementation "io.netty:netty-transport:$nettyVersion" - testImplementation "io.netty:netty-codec:$nettyVersion" - testImplementation "io.netty:netty-handler:$nettyVersion" - testImplementation "org.testcontainers:mongodb:$testcontainersMongodbVersion" - - testImplementation("org.grails.plugins:geb:$gebPluginVersion") { - exclude group: 'org.gebish', module: 'geb-spock' - } - testImplementation "org.gebish:geb-spock:$gebVersion" - testImplementation "org.seleniumhq.selenium:selenium-remote-driver:$seleniumVersion" - testImplementation "org.seleniumhq.selenium:selenium-api:$seleniumVersion" - testImplementation "org.seleniumhq.selenium:selenium-support:$seleniumVersion" - - testRuntimeOnly "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion" - testRuntimeOnly "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion" - testRuntimeOnly "org.seleniumhq.selenium:selenium-safari-driver:$seleniumSafariDriverVersion" -} + runtimeOnly "org.apache.tomcat:tomcat-jdbc" + runtimeOnly "org.fusesource.jansi:jansi" + integrationTestImplementation testFixtures("org.grails.plugins:geb") + testImplementation "org.grails:grails-gorm-testing-support" + testImplementation "org.grails:grails-web-testing-support" + testImplementation "org.spockframework:spock-core" -tasks.withType(Test) { - systemProperty "geb.env", System.getProperty('geb.env') - systemProperty "geb.build.reportsDir", reporting.file("geb/integrationTest") - if (!System.getenv().containsKey('CI')) { - systemProperty 'webdriver.chrome.driver', System.getProperty('webdriver.chrome.driver') - systemProperty 'webdriver.gecko.driver', System.getProperty('webdriver.gecko.driver') - } else { - systemProperty 'webdriver.chrome.driver', "${System.getenv('CHROMEWEBDRIVER')}/chromedriver" - systemProperty 'webdriver.gecko.driver', "${System.getenv('GECKOWEBDRIVER')}/geckodriver" - } -} - -webdriverBinaries { - if (!System.getenv().containsKey('CI')) { - chromedriver "$chromeDriverVersion" - geckodriver "$geckodriverVersion" - } + testImplementation "org.testcontainers:mongodb:$testcontainersMongodbVersion" } diff --git a/examples/grails3-mongodb/src/integration-test/groovy/functional/tests/BookControllerSpec.groovy b/examples/grails3-mongodb/src/integration-test/groovy/functional/tests/BookControllerSpec.groovy index b4ec5cef..0d4fbf05 100644 --- a/examples/grails3-mongodb/src/integration-test/groovy/functional/tests/BookControllerSpec.groovy +++ b/examples/grails3-mongodb/src/integration-test/groovy/functional/tests/BookControllerSpec.groovy @@ -1,11 +1,10 @@ package functional.tests +import grails.plugin.geb.ContainerGebSpec import grails.testing.mixin.integration.Integration -import geb.spock.GebSpec - @Integration(applicationClass = Application) -class BookControllerSpec extends GebSpec { +class BookControllerSpec extends ContainerGebSpec { void "Test list books"() { when:"The home page is visited" diff --git a/examples/grails3-mongodb/src/integration-test/resources/GebConfig.groovy b/examples/grails3-mongodb/src/integration-test/resources/GebConfig.groovy deleted file mode 100644 index adb480e3..00000000 --- a/examples/grails3-mongodb/src/integration-test/resources/GebConfig.groovy +++ /dev/null @@ -1,41 +0,0 @@ -import org.openqa.selenium.chrome.ChromeDriver -import org.openqa.selenium.chrome.ChromeOptions -import org.openqa.selenium.firefox.FirefoxDriver -import org.openqa.selenium.firefox.FirefoxOptions -import org.openqa.selenium.safari.SafariDriver - -environments { - - // You need to configure in Safari -> Develop -> Allowed Remote Automation - safari { - driver = { new SafariDriver() } - } - - // run via “./gradlew -Dgeb.env=chrome iT” - chrome { - driver = { new ChromeDriver() } - } - - // run via “./gradlew -Dgeb.env=chromeHeadless iT” - chromeHeadless { - driver = { - ChromeOptions o = new ChromeOptions() - o.addArguments('headless') - new ChromeDriver(o) - } - } - - // run via “./gradlew -Dgeb.env=firefoxHeadless iT” - firefoxHeadless { - driver = { - FirefoxOptions o = new FirefoxOptions() - o.addArguments('-headless') - new FirefoxDriver(o) - } - } - - // run via “./gradlew -Dgeb.env=firefox iT” - firefox { - driver = { new FirefoxDriver() } - } -} \ No newline at end of file diff --git a/examples/springboot-mongodb/build.gradle b/examples/springboot-mongodb/build.gradle index 878a5c53..3cf9361c 100644 --- a/examples/springboot-mongodb/build.gradle +++ b/examples/springboot-mongodb/build.gradle @@ -1,29 +1,12 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion") - } -} - apply plugin: 'org.springframework.boot' ext['groovy.version'] = "$groovyVersion" dependencies { - implementation "org.springframework.boot:spring-boot-starter-web:$springBootVersion" - implementation "org.mongodb:mongodb-driver-sync:$mongodbDriverVersion" + implementation "org.springframework.boot:spring-boot-starter-web" + implementation "org.mongodb:mongodb-driver-sync" implementation project(":gorm-mongodb-spring-boot") - testImplementation"org.springframework.boot:spring-boot-starter-test:$springBootVersion" - testImplementation"org.spockframework:spock-core:$spockVersion" -} - -configurations.all { - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - if(details.requested.group == 'jakarta.validation' && details.requested.name.equals('validation-api')) { - details.useVersion("2.0.1.Final") - } - } + testImplementation"org.springframework.boot:spring-boot-starter-test" + testImplementation"org.spockframework:spock-core" } diff --git a/examples/test-data-service/build.gradle b/examples/test-data-service/build.gradle index d4edf5e7..55b0f9ac 100644 --- a/examples/test-data-service/build.gradle +++ b/examples/test-data-service/build.gradle @@ -4,6 +4,7 @@ buildscript { maven { url "https://plugins.gradle.org/m2/" } } dependencies { + classpath "org.grails:grails-gradle-plugin:$grailsGradlePluginVersion" classpath "org.grails.plugins:views-gradle:$grailsViewsVersion" } } @@ -11,28 +12,39 @@ buildscript { apply plugin: "java" dependencies { - profile "org.grails.profiles:rest-api" - implementation "org.springframework.boot:spring-boot-starter-logging" - implementation "org.springframework.boot:spring-boot-autoconfigure" - implementation "org.grails:grails-core:$grailsVersion" - implementation "org.springframework.boot:spring-boot-starter-actuator" - implementation "org.springframework.boot:spring-boot-starter-tomcat" - implementation ("org.grails:grails-dependencies") { - exclude module:'grails-datastore-simple' - } implementation "org.grails:grails-plugin-codecs" - implementation "org.grails:grails-plugin-services" implementation "org.grails:grails-plugin-datasource" - implementation "org.grails:grails-web-boot" - implementation "org.grails:grails-logging" implementation "org.grails.plugins:cache" implementation "org.grails.plugins:events" implementation project(":grails-plugin") - implementation "org.mongodb:mongodb-driver-sync:$mongodbDriverVersion" - implementation "org.grails.plugins:views-json:$grailsViewsVersion" - implementation "org.grails.plugins:views-json-templates:$grailsViewsVersion" + implementation "org.mongodb:mongodb-driver-sync" implementation "org.grails.plugins:spring-security-core:$grailsSpringSecurityCoreVersion" implementation "org.grails.plugins:spring-security-rest:$grailsSpringSecurityRestVersion" - testImplementation "org.grails:grails-gorm-testing-support:$grailsTestingSupportVersion" - testImplementation "org.grails:grails-web-testing-support" + + profile "org.grails.profiles:rest-api" + implementation "org.grails:grails-core" + implementation "org.grails:grails-logging" + implementation "org.grails:grails-plugin-databinding" + implementation "org.grails:grails-plugin-i18n" + implementation "org.grails:grails-plugin-interceptors" + implementation "org.grails:grails-plugin-rest" + implementation "org.grails:grails-plugin-services" + implementation "org.grails:grails-plugin-url-mappings" + implementation "org.grails:grails-web-boot" + implementation "org.grails.plugins:views-json" + implementation "org.grails.plugins:views-json-templates" + implementation "org.springframework.boot:spring-boot-autoconfigure" + implementation "org.springframework.boot:spring-boot-starter" + implementation "org.springframework.boot:spring-boot-starter-actuator" + implementation "org.springframework.boot:spring-boot-starter-logging" + implementation "org.springframework.boot:spring-boot-starter-tomcat" + implementation "org.springframework.boot:spring-boot-starter-validation" + console "org.grails:grails-console" + runtimeOnly "com.h2database:h2" + runtimeOnly "org.apache.tomcat:tomcat-jdbc" + testImplementation "org.grails:grails-gorm-testing-support" + testImplementation "org.grails:views-json-testing-support" + testImplementation "org.spockframework:spock-core" + + } diff --git a/gradle.properties b/gradle.properties index f2b67f6b..6ddc002a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,55 +1,15 @@ projectVersion=9.0.0-SNAPSHOT -#4.0.2-4.0.3 breaks org.ysb33r.gradle:grolifant for chromedriver -asciidoctorGradleVersion=4.0.1 -assetPipelineVersion=5.0.1 -caffeineVersion=3.1.8 +asciidoctorGradleVersion=4.0.3 datastoreVersion=9.0.0-SNAPSHOT -fieldsVersion=6.0.0-SNAPSHOT -gebVersion=7.0 -gebPluginVersion=5.0.0-SNAPSHOT -gormVersion=9.0.0-SNAPSHOT gradleNexusPublishPluginVersion=1.3.0 grailsGradlePluginVersion=7.0.0-SNAPSHOT -grailsShellVersion=7.0.0-SNAPSHOT -grailsSpringSecurityCoreVersion=6.0.0-SNAPSHOT -grailsSpringSecurityRestVersion=3.0.1 -grailsTestingSupportVersion=4.0.0-SNAPSHOT +grailsSpringSecurityCoreVersion=7.0.0-SNAPSHOT +grailsSpringSecurityRestVersion=6.0.0-SNAPSHOT grailsVersion=7.0.0-SNAPSHOT grailsViewsVersion=4.0.0-SNAPSHOT -grolifantVersion=4.0.0 -groovyVersion=4.0.23 -h2Version=1.4.200 -hibernateCoreVersion=5.6.15.Final -hibernatePluginVersion=9.0.0-SNAPSHOT -hibernateValidatorVersion=7.0.5.Final -jakartaElVersion=4.0.0 -jakartaValidationVersion=3.0.2 -jakartaPersistenceVersion=3.1.0 -jakartaTransactionVersion=2.0.1 -jakartaAnnotationApiVersion=3.0.0 -jakartaXmlBindVersion=4.0.2 -jansiVersion=2.4.1 -javaParserCoreVersion=3.26.2 -junitJupiterVersion=5.11.0 -junitJupiterPlatformVersion=1.11.0 -micrometer.version=1.8.0 -micronautVersion=4.6.5 +groovyVersion=4.0.24 mongodbDriverVersion=5.1.4 -nettyVersion=4.1.112.Final -pluginGrailsVersion=7.0.0-SNAPSHOT -seleniumSafariDriverVersion=4.23.1 -seleniumVersion=4.23.1 -servletApiVersion=6.0.0 -scaffoldingVersion=6.0.0-SNAPSHOT -spockVersion=2.3-groovy-4.0 -springBootVersion=3.3.4 -springVersion=6.1.13 testcontainersMongodbVersion=1.20.1 -tomcatVersion=10.1.25 -webdriverBinariesPluginVersion=3.2 -chromeDriverVersion=126.0.6478.126 -geckodriverVersion=0.32.2 -edgeDriverVersion=110.0.1587.57 org.gradle.caching=true org.gradle.parallel=false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9355b415..e2847c82 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/grails-datastore-gorm-bson/build.gradle b/grails-datastore-gorm-bson/build.gradle index 87986132..ce4fe868 100644 --- a/grails-datastore-gorm-bson/build.gradle +++ b/grails-datastore-gorm-bson/build.gradle @@ -1,4 +1,5 @@ dependencies { - api "org.grails:grails-datastore-gorm:$datastoreVersion" - api "org.mongodb:bson:$mongodbDriverVersion" + implementation platform("org.grails:grails-bom:$grailsVersion") + api "org.grails:grails-datastore-gorm" + api "org.mongodb:bson" } diff --git a/grails-datastore-gorm-bson/src/main/groovy/org/grails/datastore/bson/json/JsonWriter.java b/grails-datastore-gorm-bson/src/main/groovy/org/grails/datastore/bson/json/JsonWriter.java index cc0834ec..147c5ece 100644 --- a/grails-datastore-gorm-bson/src/main/groovy/org/grails/datastore/bson/json/JsonWriter.java +++ b/grails-datastore-gorm-bson/src/main/groovy/org/grails/datastore/bson/json/JsonWriter.java @@ -20,12 +20,12 @@ import org.bson.json.JsonWriterSettings; import org.bson.types.Decimal128; import org.bson.types.ObjectId; -import org.springframework.util.Base64Utils; import java.io.IOException; import java.io.Writer; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.Base64; import java.util.Date; import java.util.TimeZone; @@ -111,7 +111,7 @@ protected void doWriteBinaryData(BsonBinary value) { try { writeNameHelper(getName()); byte[] data = value.getData(); - writer.write(Base64Utils.encodeToString(data)); + writer.write(Base64.getEncoder().encodeToString(data)); setState(getNextState()); } catch (IOException e) { throwBsonException(e); diff --git a/grails-datastore-gorm-mongodb-ext/build.gradle b/grails-datastore-gorm-mongodb-ext/build.gradle index bd2dc8e0..b2f95569 100644 --- a/grails-datastore-gorm-mongodb-ext/build.gradle +++ b/grails-datastore-gorm-mongodb-ext/build.gradle @@ -1,4 +1,5 @@ dependencies { - api "org.mongodb:mongodb-driver-sync:$mongodbDriverVersion" + implementation platform("org.grails:grails-bom:$grailsVersion") + api "org.mongodb:mongodb-driver-sync" api project(":grails-datastore-gorm-mongodb") } diff --git a/grails-datastore-gorm-mongodb/build.gradle b/grails-datastore-gorm-mongodb/build.gradle index ccf74264..b299b59e 100644 --- a/grails-datastore-gorm-mongodb/build.gradle +++ b/grails-datastore-gorm-mongodb/build.gradle @@ -1,26 +1,27 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat dependencies { - api "org.mongodb:mongodb-driver-sync:$mongodbDriverVersion" - api "org.grails:grails-datastore-gorm-validation:$datastoreVersion" - api "org.grails:grails-datastore-gorm:$datastoreVersion" + implementation platform("org.grails:grails-bom:$grailsVersion") + api "org.mongodb:mongodb-driver-sync" + api "org.grails:grails-datastore-gorm-validation" + api "org.grails:grails-datastore-gorm" api project(":grails-datastore-gorm-bson") - implementation "org.grails:grails-core:$grailsVersion" - implementation "com.github.ben-manes.caffeine:caffeine:$caffeineVersion" + implementation "org.grails:grails-core" + implementation "com.github.ben-manes.caffeine:caffeine" - compileOnly "org.grails:grails-datastore-gorm-support:$datastoreVersion", { + compileOnly "org.grails:grails-datastore-gorm-support", { exclude group:'org.grails', module:'grails-datastore-gorm-hibernate-core' } - compileOnly "jakarta.servlet:jakarta.servlet-api:$servletApiVersion" + compileOnly "jakarta.servlet:jakarta.servlet-api" testImplementation "org.grails:grails-datastore-gorm-tck:$datastoreVersion" - testImplementation "org.grails:grails-gorm-testing-support:$grailsTestingSupportVersion" - testImplementation "org.hibernate:hibernate-validator:$hibernateValidatorVersion" - testImplementation "org.grails:grails-datastore-gorm-support:$datastoreVersion", { + testImplementation "org.grails:grails-gorm-testing-support" + testImplementation "org.hibernate.validator:hibernate-validator" + testImplementation "org.grails:grails-datastore-gorm-support", { exclude group: "org.grails", module:"grails-datastore-gorm-hibernate-core" } - testRuntimeOnly "org.springframework:spring-aop:$springVersion" + testRuntimeOnly "org.springframework:spring-aop" } @@ -61,30 +62,29 @@ test.doFirst { else { null } - } + } def tckClassesFile = project - .configurations - .testCompileClasspath - .resolvedConfiguration - .getResolvedArtifacts() - .find { resolved -> - resolved.moduleVersion.id.name == 'grails-datastore-gorm-tck' - }.file + .configurations + .testCompileClasspath + .resolvedConfiguration + .getResolvedArtifacts() + .find { resolved -> + resolved.moduleVersion.id.name == 'grails-datastore-gorm-tck' + }.file - def tckClassesDir = project.file("${project.buildDir}/tck") + def tckClassesDir = project.file("${project.buildDir}/tck") copy { from zipTree(tckClassesFile) - into tckClassesDir + into tckClassesDir } copy { from tckClassesDir - into sourceSets.test.output.classesDirs.find { it.path.contains('classes/groovy') } + into sourceSets.test.output.classesDirs.find { it.path.contains('classes' + File.separator + 'groovy') } include "**/*.class" exclude { details -> // Do not copy across any TCK class (or nested classes of that class) // If there is a corresponding source file in the particular modules // test source tree. Allows a module to override a test/helper. - if (!details.file.isFile()) { return false } diff --git a/grails-plugin/build.gradle b/grails-plugin/build.gradle index 5595f44b..c8eb9d77 100644 --- a/grails-plugin/build.gradle +++ b/grails-plugin/build.gradle @@ -1,33 +1,13 @@ -dependencyManagement { - imports { - mavenBom "org.grails:grails-bom:$pluginGrailsVersion" - } - applyMavenExclusions false -} -configurations.all { - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - if(details.requested.group == 'org.grails' && - details.requested.name.startsWith('grails-datastore') && - !details.requested.name.contains('mongodb') && - !details.requested.name.contains('bson')) { - details.useVersion(datastoreVersion) - } else if(details.requested.group == 'org.apache.groovy' && details.requested.name.startsWith('groovy')) { - details.useVersion(groovyVersion) - } else if(details.requested.group == 'org.springframework') { - details.useVersion(springVersion) - } - } -} dependencies { - compileOnly "org.grails:grails-core:$grailsVersion" - compileOnly "org.grails:grails-bootstrap:$grailsVersion" - compileOnly "org.spockframework:spock-core:$spockVersion", { + compileOnly "org.grails:grails-core" + compileOnly "org.grails:grails-bootstrap" + compileOnly "org.spockframework:spock-core", { exclude group: "junit", module: "junit-dep" exclude group: 'org.hamcrest', module: 'hamcrest-core' } - api "org.grails:grails-datastore-web:$datastoreVersion" - api "org.grails:grails-datastore-gorm-support:$datastoreVersion", { + api "org.grails:grails-datastore-web" + api "org.grails:grails-datastore-gorm-support", { exclude group:'org.springframework', module:'spring-context' exclude group:'org.springframework', module:'spring-core' exclude group:'org.springframework', module:'spring-beans'