From 534cbde50d0e844a8d4f5e9a03a6ef0028bc649f Mon Sep 17 00:00:00 2001 From: Shannon Pamperl Date: Tue, 3 Sep 2019 12:15:32 -0500 Subject: [PATCH] Switch to plugins{} apply syntax Now that Spring Cloud Contract is generating a plugin marker, it's much easier to functionally test using Gradle TestKit by utilizing the withPluginClasspath() and the 'java-gradle-plugin' Gradle plugin. Since Gradle recommends new users, as well as new plugin authors, to use the plugin markers and plugins{} syntax we should also follow that same path. Especially given that there has been feature parity with the buildscirpt{} block some releases ago. --- .../ContractVerifierIntegrationSpec.groovy | 26 ++----------------- .../scenarioProject/build.gradle | 17 +++--------- .../scenarioProject/settings.gradle | 18 +++++++++++++ .../scenarioProjectKotlin/build.gradle.kts | 20 +++----------- .../scenarioProjectKotlin/settings.gradle.kts | 20 ++++++++++++++ 5 files changed, 47 insertions(+), 54 deletions(-) diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierIntegrationSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierIntegrationSpec.groovy index 023da8748e..05ce181641 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierIntegrationSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierIntegrationSpec.groovy @@ -51,21 +51,6 @@ abstract class ContractVerifierIntegrationSpec extends Specification { protected void setupForProject(String projectRoot) { copyResourcesToRoot(projectRoot) - Properties pluginClasspathProperties = new Properties() - pluginClasspathProperties.load(this.class.getResourceAsStream("/plugin-under-test-metadata.properties")) - List classpath = pluginClasspathProperties.getProperty("implementation-classpath").split(";").collect { it.replaceAll("\\\\", "/") } - - initFile.write """ - allprojects { - buildscript { - dependencies { - classpath(files(\"${classpath.join("\",\"")}\")) - } - } - } - """ - // Extending buildscript is required when 'apply' is used. - // 'GradleRunner#withPluginClasspath' can be used when plugin is added using 'plugins { id...' } protected void switchToJunitTestFramework() { @@ -105,13 +90,10 @@ abstract class ContractVerifierIntegrationSpec extends Specification { } protected BuildResult run(String... tasks) { - List arguments = new ArrayList<>() - arguments.addAll(tasks) - arguments.add("-I" + getInitFile().absolutePath) - return GradleRunner.create() .withProjectDir(testProjectDir) - .withArguments(arguments) + .withArguments(tasks) + .withPluginClasspath() // .withDebug(true) .forwardOutput() .build() @@ -151,10 +133,6 @@ abstract class ContractVerifierIntegrationSpec extends Specification { return new File(testProjectDir, 'build.gradle') } - protected File getInitFile() { - return new File(testProjectDir, 'init.gradle') - } - protected boolean jarContainsContractVerifierContracts(String path) { assert fileExists(path) File rootFile = file(path) diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle index 0b4d5ae3f6..fd45f024c8 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle @@ -14,18 +14,9 @@ * limitations under the License. */ - -buildscript { - repositories { - mavenCentral() - mavenLocal() - maven { url "https://repo.spring.io/snapshot" } - maven { url "https://repo.spring.io/milestone" } - maven { url "https://repo.spring.io/release" } - } - dependencies { - classpath("org.springframework.boot:spring-boot-gradle-plugin:${bootVersion}") - } +plugins { + id("org.springframework.boot") apply false + id("org.springframework.cloud.contract") apply false } ext { @@ -69,7 +60,7 @@ subprojects { configure([project(':fraudDetectionService'), project(':loanApplicationService')]) { apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' - apply plugin: 'spring-cloud-contract' + apply plugin: 'org.springframework.cloud.contract' // tag::jar_setup[] ext { diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/settings.gradle b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/settings.gradle index 22aab22cb1..1f2b6325c9 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/settings.gradle +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/settings.gradle @@ -14,6 +14,24 @@ * limitations under the License. */ +pluginManagement { + repositories { + mavenCentral() + mavenLocal() + maven { url "https://repo.spring.io/snapshot" } + maven { url "https://repo.spring.io/milestone" } + maven { url "https://repo.spring.io/release" } + } + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.springframework.boot") { + useModule("org.springframework.boot:spring-boot-gradle-plugin:${bootVersion}") + } else if (requested.id.id == "org.springframework.cloud.contract") { + useModule("org.springframework.cloud:spring-cloud-contract-gradle-plugin:${verifierVersion}") + } + } + } +} include ':fraudDetectionService' include ':loanApplicationService' diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/build.gradle.kts b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/build.gradle.kts index 8a8f750372..f86ff12e96 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/build.gradle.kts +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/build.gradle.kts @@ -14,21 +14,6 @@ * limitations under the License. */ -buildscript { - val bootVersion: String by extra - - repositories { - mavenCentral() - mavenLocal() - maven(url = "https://repo.spring.io/snapshot") - maven(url = "https://repo.spring.io/milestone") - maven(url = "https://repo.spring.io/release") - } - dependencies { - classpath("org.springframework.boot:spring-boot-gradle-plugin:$bootVersion") - } -} - import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties import org.springframework.cloud.contract.verifier.config.TestFramework import org.springframework.cloud.contract.verifier.config.TestMode @@ -36,7 +21,8 @@ import org.springframework.cloud.contract.verifier.plugin.ContractVerifierExtens plugins { groovy -// id("org.springframework.cloud.contract") + id("org.springframework.boot") apply false + id("org.springframework.cloud.contract") apply false } val restAssuredVersion by extra("3.0.7") @@ -78,7 +64,7 @@ subprojects { configure(listOf(project(":fraudDetectionService"), project(":loanApplicationService"))) { apply(plugin = "org.springframework.boot") apply(plugin = "io.spring.dependency-management") - apply(plugin = "spring-cloud-contract") + apply(plugin = "org.springframework.cloud.contract") apply(plugin = "maven-publish") configure { diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/settings.gradle.kts b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/settings.gradle.kts index 8d278951af..7402ba3052 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/settings.gradle.kts +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/settings.gradle.kts @@ -14,6 +14,26 @@ * limitations under the License. */ +pluginManagement { + repositories { + mavenCentral() + mavenLocal() + maven(url = "https://repo.spring.io/snapshot") + maven(url = "https://repo.spring.io/milestone") + maven(url = "https://repo.spring.io/release") + } + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.springframework.boot") { + val bootVersion: String by extra + useModule("org.springframework.boot:spring-boot-gradle-plugin:$bootVersion") + } else if (requested.id.id == "org.springframework.cloud.contract") { + val verifierVersion: String by extra + useModule("org.springframework.cloud:spring-cloud-contract-gradle-plugin:$verifierVersion") + } + } + } +} include(":fraudDetectionService") include(":loanApplicationService")