diff --git a/docs/src/main/asciidoc/gradle-project.adoc b/docs/src/main/asciidoc/gradle-project.adoc index 515bc76437..8fe268c6a2 100644 --- a/docs/src/main/asciidoc/gradle-project.adoc +++ b/docs/src/main/asciidoc/gradle-project.adoc @@ -15,6 +15,7 @@ following sections: * <> * <> * <> +* <> * <> * <> @@ -251,25 +252,12 @@ tasks.create(type: Jar, name: 'verifierStubsJar', dependsOn: 'generateClientStub from contractVerifier.stubsOutputDir } -project.artifacts { - archives task -} - tasks.create(type: Copy, name: 'copyContracts') { from contracts.contractsDslDir into contracts.stubsOutputDir } verifierStubsJar.dependsOn 'copyContracts' - -publishing { - publications { - stubs(MavenPublication) { - artifactId project.name - artifact verifierStubsJar - } - } -} ---- ==== @@ -446,6 +434,35 @@ the following command: ---- ==== +[[gradle-publishing-stubs-to-artifact-repo]] +== Publishing Stubs to Artifact Repository + +If you use an binary artifact repository to keep the stubs, +you will need to configure the publishing section for Gradle to +include the `verifierStubsJar`. To do that, you can use the +example configuration below: + +==== +[source,groovy,indent=0] +---- +apply plugin: 'maven-publish' + +publishing { + publications { + maven(MavenPublication) { + // other configuration + + artifact verifierStubsJar + } + } +} +---- +==== + +Since 3.0.0, the internal stubs publication has been deprecated +and disabled by default. It is recommended to include the +`verifierStubsJar` with one of your own publications. + [[gradle-pushing-stubs-to-scm]] == Pushing Stubs to SCM diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierExtension.java b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierExtension.java index 992ae48770..c2791fc036 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierExtension.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierExtension.java @@ -233,7 +233,10 @@ public class ContractVerifierExtension implements Serializable { /** * Is set to true will not provide the default publication task + * + * @deprecated - with 3.0.0, the user should include stubs with their own publication(s) */ + @Deprecated private Property disableStubPublication; /** @@ -276,7 +279,7 @@ public class ContractVerifierExtension implements Serializable { this.deleteStubsAfterTest = objects.property(Boolean.class).convention(true); this.convertToYaml = objects.property(Boolean.class).convention(false); this.contractsProperties = objects.mapProperty(String.class, String.class).convention(new HashMap<>()); - this.disableStubPublication = objects.property(Boolean.class).convention(false); + this.disableStubPublication = objects.property(Boolean.class).convention(true); this.sourceSet = objects.property(String.class); this.objects = objects; } @@ -578,10 +581,12 @@ public class ContractVerifierExtension implements Serializable { contractsProperties.set(map); } + @Deprecated public Property getDisableStubPublication() { return disableStubPublication; } + @Deprecated public void setDisableStubPublication(boolean disableStubPublication) { this.disableStubPublication.set(disableStubPublication); } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy index 7775cfdd19..6c3d643ec4 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy @@ -25,7 +25,7 @@ import org.gradle.api.plugins.GroovyPlugin import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.plugins.MavenPublishPlugin import org.gradle.api.tasks.TaskProvider -import org.gradle.jvm.tasks.Jar +import org.gradle.api.tasks.bundling.Jar import org.springframework.cloud.contract.verifier.config.TestFramework @@ -167,6 +167,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { return task } + @Deprecated private void createAndConfigureMavenPublishPlugin(TaskProvider stubsTask, ContractVerifierExtension extension) { if (!classIsOnClasspath("org.gradle.api.publish.maven.plugins.MavenPublishPlugin")) { project.logger.debug("Maven Publish Plugin is not present - won't add default publication") @@ -193,7 +194,9 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { } @CompileDynamic + @Deprecated private void setPublications(def publishingExtension, TaskProvider stubsTask) { + project.logger.warn("Spring Cloud Contract Verifier Plugin: Creating stubs publication is deprecated") publishingExtension.publications { stubs(MavenPublication) { artifactId "${project.name}" @@ -212,6 +215,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { } @CompileDynamic + @Deprecated private boolean hasStubsPublication(def publishingExtension) { try { return publishingExtension.publications.getByName('stubs') @@ -251,6 +255,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { return task } + @Deprecated private boolean classIsOnClasspath(String className) { try { Class.forName(className) diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierSpec.groovy index dd673e3bae..ac5e8a8c6f 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierSpec.groovy @@ -90,11 +90,19 @@ class ContractVerifierSpec extends Specification { * project.evaluate() is used here in order to trigger the evaluation lifecycle of a project. * This method is currently exposed via the internal API and is subject to change, however, Gradle * does not yet expose a way to test this portion of the lifecycle. + * + * In the next version, this test will be completely removed as publication will be fully a user + * responsibility. */ - def "should configure maven-publish plugin, if available"() { + @Deprecated + def "should configure maven-publish plugin, if enabled"() { given: project.plugins.apply(MavenPublishPlugin) project.plugins.apply(SpringCloudContractVerifierGradlePlugin) + ContractVerifierExtension extension = project.getExtensions().findByType(ContractVerifierExtension) + extension.with { + disableStubPublication = false + } project.evaluate() // Currently internal method to trigger afterEvaluate blocks. expect: 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 21c9c7db7d..87440f3b8a 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 @@ -30,7 +30,6 @@ group = 'org.springframework.cloud.testprojects' subprojects { apply plugin: 'groovy' - apply plugin: 'maven-publish' sourceCompatibility = 1.8 targetCompatibility = 1.8 @@ -61,6 +60,7 @@ configure([project(':fraudDetectionService'), project(':loanApplicationService') apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' apply plugin: 'org.springframework.cloud.contract' + apply plugin: 'maven-publish' // tag::jar_setup[] ext { @@ -71,7 +71,6 @@ configure([project(':fraudDetectionService'), project(':loanApplicationService') // Automatically added by plugin: // copyContracts - copies contracts to the output folder from which JAR will be created // verifierStubsJar - JAR with a provided stub suffix - // the presented publication is also added by the plugin but you can modify it as you wish publishing { publications { 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 52290572d9..8fd0023e52 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,6 +14,7 @@ * limitations under the License. */ +import org.gradle.api.publish.PublishingExtension import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties import org.springframework.cloud.contract.verifier.config.TestFramework import org.springframework.cloud.contract.verifier.config.TestMode @@ -77,6 +78,15 @@ configure(listOf(project(":fraudDetectionService"), project(":loanApplicationSer stubsOutputDir.set(file("${project.buildDir}/production/${project.name}-stubs/")) } + configure { + publications { + create("stubs") { + artifactId = "${project.name}-stubs" + artifact(tasks.named("verifierStubsJar").get()) + } + } + } + dependencies { compile("org.springframework.boot:spring-boot-starter-web") { exclude(module = "spring-boot-starter-tomcat")