diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/RecursiveFilesConverter.groovy b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/RecursiveFilesConverter.groovy index a8a9db6688..56ddd3f99e 100644 --- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/RecursiveFilesConverter.groovy +++ b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/RecursiveFilesConverter.groovy @@ -39,18 +39,18 @@ class RecursiveFilesConverter { private final SingleFileConverter singleFileConverter private final ContractVerifierConfigProperties properties - private final String additionalFolder + private final File outMappingsDir RecursiveFilesConverter(SingleFileConverter singleFileConverter, ContractVerifierConfigProperties properties) { this.properties = properties this.singleFileConverter = singleFileConverter - this.additionalFolder = "" + this.outMappingsDir = properties.stubsOutputDir } - RecursiveFilesConverter(SingleFileConverter singleFileConverter, ContractVerifierConfigProperties properties, String additionalFolder) { + RecursiveFilesConverter(SingleFileConverter singleFileConverter, ContractVerifierConfigProperties properties, File outMappingsDir) { this.properties = properties this.singleFileConverter = singleFileConverter - this.additionalFolder = additionalFolder + this.outMappingsDir = outMappingsDir } void processFiles() { @@ -80,8 +80,7 @@ class RecursiveFilesConverter { private Path createAndReturnTargetDirectory(File sourceFile) { Path relativePath = Paths.get(properties.contractsDslDir.toURI()).relativize(sourceFile.parentFile.toPath()) - File rootFile = additionalFolder ? new File(properties.stubsOutputDir, additionalFolder) : properties.stubsOutputDir - Path absoluteTargetPath = rootFile.toPath().resolve(relativePath) + Path absoluteTargetPath = outMappingsDir.toPath().resolve(relativePath) Files.createDirectories(absoluteTargetPath) return absoluteTargetPath } diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateWireMockClientStubsFromDslTask.groovy b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateWireMockClientStubsFromDslTask.groovy index 6b960510e7..e87a0422cd 100644 --- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateWireMockClientStubsFromDslTask.groovy +++ b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateWireMockClientStubsFromDslTask.groovy @@ -23,7 +23,6 @@ import org.gradle.api.tasks.TaskAction import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties import org.springframework.cloud.contract.verifier.wiremock.DslToWireMockClientConverter import org.springframework.cloud.contract.verifier.wiremock.RecursiveFilesConverter - //TODO: Implement as an incremental task: https://gradle.org/docs/current/userguide/custom_tasks.html#incremental_tasks ? /** * Generates WireMock stubs from the contracts @@ -45,8 +44,11 @@ class GenerateWireMockClientStubsFromDslTask extends ConventionTask { void generate() { logger.info("Spring Cloud Contract Verifier Plugin: Invoking DSL to WireMock client stubs conversion") logger.debug("From '${getContractsDslDir()}' to '${getStubsOutputDir()}'") + ContractVerifierConfigProperties props = getConfigProperties() + File outMappingsDir = props.stubsOutputDir != null ? new File(props.stubsOutputDir, DEFAULT_MAPPINGS_FOLDER) + : new File(project.buildDir, "stubs/$DEFAULT_MAPPINGS_FOLDER") RecursiveFilesConverter converter = new RecursiveFilesConverter(new DslToWireMockClientConverter(), - getConfigProperties(), DEFAULT_MAPPINGS_FOLDER) + getConfigProperties(), outMappingsDir) converter.processFiles() } } diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy index 1d176070cc..2ee94f97da 100644 --- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy +++ b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy @@ -91,6 +91,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { generatedTestSourcesDir = project.file("${project.buildDir}/generated-test-sources/contracts") contractsDslDir = defaultContractsDir() //TODO: Use sourceset basePackageForTests = 'org.springframework.cloud.contract.verifier.tests' + stubsOutputDir = stubsOutputDir ?: project.file("${project.buildDir}/stubs") } } @@ -115,7 +116,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { task.group = GROUP_NAME task.conventionMapping.with { contractsDslDir = { extension.contractsDslDir } - stubsOutputDir = { extension.stubsOutputDir ?: project.file("${project.buildDir}/stubs") } + stubsOutputDir = { extension.stubsOutputDir } configProperties = { extension } } } @@ -123,14 +124,14 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { private Task createAndConfigureStubsJarTasks(ContractVerifierConfigProperties extension) { Task task = stubsTask() if (task) { - project.logger.warn("Stubs jar task was present - won't create one. Remember about adding it to artifacts as an archive!") + project.logger.info("Spring Cloud Contract Verifier Plugin: Stubs jar task was present - won't create one. Remember about adding it to artifacts as an archive!") return task } else { task = project.tasks.create(type: Jar, name: VERIFIER_STUBS_JAR_TASK_NAME, dependsOn: DSL_TO_WIREMOCK_CLIENT_TASK_NAME) { baseName = project.name classifier = extension.stubsSuffix - from { extension.stubsOutputDir } + from { extension.stubsOutputDir ?: project.file("${project.buildDir}/stubs") } } task.description = "Creates the stubs JAR task" task.group = GROUP_NAME @@ -153,7 +154,8 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { private Task createAndConfigureCopyContractsTask(Task stubs, ContractVerifierConfigProperties extension) { Task task = project.tasks.create(type: Copy, name: COPY_CONTRACTS_TASK_NAME) { from { extension.contractsDslDir } - into { project.file("${extension.stubsOutputDir}/contracts") ?: project.file("${project.buildDir}/stubs/contracts") } + into { extension.stubsOutputDir != null ? + project.file("${extension.stubsOutputDir}/contracts") : project.file("${project.buildDir}/stubs/contracts") } } task.description = "Copies contracts to the output folder" task.group = GROUP_NAME @@ -163,22 +165,23 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { private void createAndConfigureMavenPublishPlugin(Task stubsTask, ContractVerifierConfigProperties 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("Generating default publication") + project.logger.debug("Spring Cloud Contract Verifier Plugin: Generating default publication") project.afterEvaluate { project.plugins.withType(MavenPublishPlugin) { def publishingPlugin -> def publishingExtension = project.extensions.findByName('publishing') if (!hasPublication(publishingExtension)) { - project.logger.debug("Stubs publication is not present - will create one") + project.logger.debug("Spring Cloud Contract Verifier Plugin: Stubs publication is not present - will create one") publishingExtension.publications { stubs(MavenPublication) { - artifactId "${project.name}-${extension.stubsSuffix}" + artifactId "${project.name}" artifact stubsTask } } } else { - project.logger.warn("Stubs publication was present - won't create a new one. Remember about passing stubs as artifact") + project.logger.info("Spring Cloud Contract Verifier Plugin: Stubs publication was present - won't create a new one. Remember about passing stubs as artifact") } } }