diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierExtension.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierExtension.groovy index 124b02ee44..b350624fc8 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierExtension.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractVerifierExtension.groovy @@ -169,6 +169,15 @@ class ContractVerifierExtension { closure.call() } + /** + * Is set to true will not provide the default publication task + */ + boolean disableStubPublication = false + + void disableStubPublication(boolean disableStubPublication) { + this.disableStubPublication = disableStubPublication + } + @ToString static class Dependency { String groupId 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 ec0fadaec4..0cc930735c 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 @@ -60,7 +60,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { setConfigurationDefaults(extension) Task stubsJar = createAndConfigureStubsJarTasks(extension) Task copyContracts = createAndConfigureCopyContractsTask(stubsJar, downloader, extension) - createAndConfigureMavenPublishPlugin(stubsJar) + createAndConfigureMavenPublishPlugin(stubsJar, extension) createGenerateTestsTask(extension, copyContracts) Task clientTask = createAndConfigureGenerateClientStubsFromDslTask(extension, copyContracts) createAndConfigureGenerateWireMockClientStubsFromDslTask(extension, clientTask) @@ -176,13 +176,17 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { return task } - private void createAndConfigureMavenPublishPlugin(Task stubsTask) { + private void createAndConfigureMavenPublishPlugin(Task 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") return } project.logger.debug("Spring Cloud Contract Verifier Plugin: Generating default publication") project.afterEvaluate { + if (extension.isDisableStubPublication()) { + project.logger.info("You've switched off the stub publication - won't add default publication") + return + } project.plugins.withType(MavenPublishPlugin) { def publishingPlugin -> def publishingExtension = project.extensions.findByName('publishing') if (!hasPublication(publishingExtension)) { 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 011b99a5f6..1a60d4e705 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 @@ -73,11 +73,12 @@ abstract class ContractVerifierIntegrationSpec extends Specification { Files.write(path, content.getBytes(UTF_8)) } - protected void runTasksSuccessfully(String... tasks) { + protected BuildResult runTasksSuccessfully(String... tasks) { BuildResult result = run(tasks) result.tasks.each { assert it.outcome == TaskOutcome.SUCCESS || it.outcome == TaskOutcome.UP_TO_DATE || it.outcome == TaskOutcome.NO_SOURCE } + return result } protected BuildResult validateTasksOutcome(BuildResult result, TaskOutcome expectedOutcome, String... tasks) { @@ -134,7 +135,7 @@ abstract class ContractVerifierIntegrationSpec extends Specification { } protected File getBuildFile() { - return new File('build.gradle', testProjectDir) + return new File(testProjectDir, 'build.gradle') } protected boolean jarContainsContractVerifierContracts(String path) { diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/GradleContractsDownloaderSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/GradleContractsDownloaderSpec.groovy index b32c78c6dd..15bd52ce89 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/GradleContractsDownloaderSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/GradleContractsDownloaderSpec.groovy @@ -146,6 +146,7 @@ class GradleContractsDownloaderSpec extends Specification { repositoryUrl("foo") cacheDownloadedContracts(false) } + disableStubPublication(true) } and: final AetherStubDownloader downloader = Mock(AetherStubDownloader) diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/SampleJerseyProjectSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/SampleJerseyProjectSpec.groovy index 7144f30a30..64984639ff 100755 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/SampleJerseyProjectSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/SampleJerseyProjectSpec.groovy @@ -16,6 +16,7 @@ package org.springframework.cloud.contract.verifier.plugin +import org.gradle.testkit.runner.BuildResult import spock.lang.Stepwise @Stepwise @@ -30,8 +31,19 @@ class SampleJerseyProjectSpec extends ContractVerifierIntegrationSpec { given: assert fileExists('build.gradle') expect: - runTasksSuccessfully(checkAndPublishToMavenLocal()) + BuildResult result = runTasksSuccessfully(checkAndPublishToMavenLocal()) jarContainsContractVerifierContracts('fraudDetectionService/build/libs') + !result.output.contains("You've switched off the stub publication") + } + + def "should pass basic flow for Spock with disabled publication"() { + given: + assert fileExists('build.gradle') + expect: + String[] args = (checkAndPublishToMavenLocal().toList() << "-PdisablePublication") as String[] + BuildResult result = runTasksSuccessfully(args) + !fileExists('fraudDetectionService/build/libs') + result.output.contains("You've switched off the stub publication") } def "should pass basic flow for JUnit"() { diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/build.gradle b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/build.gradle index 286db6a52c..0f9de2c136 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/build.gradle +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/build.gradle @@ -130,6 +130,7 @@ configure(project(':fraudDetectionService')) { } generatedTestSourcesDir = file("${project.buildDir}/generated-test-sources/") stubsOutputDir = stubsOutputDirRoot + disableStubPublication(project.hasProperty("disablePublication")) } }