From 5b900561c95dec1297a456d507d19feb5c94f238 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 20 Jul 2016 12:26:50 +0200 Subject: [PATCH] Migrated from Groovy to Java in Maven plugin --- .../pom.xml | 28 --- .../src/etc/header.txt | 14 -- .../maven/verifier/CopyContracts.groovy | 63 ------ .../maven/verifier/ManifestCreator.groovy | 36 ---- .../AetherStubDownloaderFactory.groovy | 49 ----- .../stubrunner/RemoteStubRunner.groovy | 52 ----- .../contract/maven/verifier/ConvertMojo.java | 108 +++++----- .../maven/verifier/CopyContracts.java | 69 +++++++ .../maven/verifier/GenerateStubsMojo.java | 127 +++++++----- .../maven/verifier/GenerateTestsMojo.java | 194 +++++++++--------- .../maven/verifier/ManifestCreator.java | 62 ++++++ .../contract/maven/verifier/RunMojo.java | 181 ++++++++-------- .../AetherStubDownloaderFactory.java | 44 ++++ .../verifier/stubrunner/LocalStubRunner.java} | 36 ++-- .../verifier/stubrunner/RemoteStubRunner.java | 57 +++++ 15 files changed, 568 insertions(+), 552 deletions(-) delete mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/etc/header.txt delete mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/CopyContracts.groovy delete mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/ManifestCreator.groovy delete mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/AetherStubDownloaderFactory.groovy delete mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/RemoteStubRunner.groovy create mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/CopyContracts.java create mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ManifestCreator.java create mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/AetherStubDownloaderFactory.java rename spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/{groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/LocalStubRunner.groovy => java/org/springframework/cloud/contract/maven/verifier/stubrunner/LocalStubRunner.java} (56%) create mode 100644 spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/RemoteStubRunner.java diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/pom.xml index 842c6cfee7..8f0dd4a6ee 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/pom.xml @@ -125,34 +125,6 @@ - - com.mycila - license-maven-plugin - -
src/etc/header.txt
- - src/** - - - **/.idea/** - **/*.adoc - - true - true - - ${project.inceptionYear} - Pivotal - - UTF-8 -
- - - - check - - - -
org.jacoco jacoco-maven-plugin diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/etc/header.txt b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/etc/header.txt deleted file mode 100644 index 771f93dfec..0000000000 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/etc/header.txt +++ /dev/null @@ -1,14 +0,0 @@ - - Copyright 2013-${year} the original author or authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/CopyContracts.groovy b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/CopyContracts.groovy deleted file mode 100644 index 67672ffbc9..0000000000 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/CopyContracts.groovy +++ /dev/null @@ -1,63 +0,0 @@ -/** - * - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.contract.maven.verifier - -import groovy.transform.CompileStatic -import groovy.util.logging.Slf4j -import org.apache.maven.execution.MavenSession -import org.apache.maven.model.Resource -import org.apache.maven.plugin.MojoExecutionException -import org.apache.maven.project.MavenProject -import org.apache.maven.shared.filtering.MavenFilteringException -import org.apache.maven.shared.filtering.MavenResourcesExecution -import org.apache.maven.shared.filtering.MavenResourcesFiltering - -@CompileStatic -@Slf4j -class CopyContracts { - - private final MavenProject project - private final MavenSession mavenSession - private final MavenResourcesFiltering mavenResourcesFiltering - - CopyContracts(MavenProject project, MavenSession mavenSession, MavenResourcesFiltering mavenResourcesFiltering) { - this.project = project - this.mavenSession = mavenSession - this.mavenResourcesFiltering = mavenResourcesFiltering - } - - void copy(File contractsDirectory, File outputDirectory) { - log.info('Copying Spring Cloud Contract Verifier contracts') - Resource testResource = new Resource(directory: contractsDirectory.absolutePath) - MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( - resources: [testResource], - outputDirectory: new File(outputDirectory, 'contracts'), - mavenProject: project, - encoding: 'UTF-8', - mavenSession: mavenSession); - mavenResourcesExecution.injectProjectBuildFilters = false - mavenResourcesExecution.overwrite = true - mavenResourcesExecution.includeEmptyDirs = false - mavenResourcesExecution.filterFilenames = false - try { - mavenResourcesFiltering.filterResources(mavenResourcesExecution); - } catch (MavenFilteringException e) { - throw new MojoExecutionException(e.getMessage(), e); - } - } - -} diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/ManifestCreator.groovy b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/ManifestCreator.groovy deleted file mode 100644 index 014cba93d6..0000000000 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/ManifestCreator.groovy +++ /dev/null @@ -1,36 +0,0 @@ -/** - * - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.contract.maven.verifier - -import org.apache.maven.model.Plugin -import org.apache.maven.project.MavenProject -import org.codehaus.plexus.archiver.jar.Manifest - -class ManifestCreator { - static Manifest createManifest(MavenProject project) { - Manifest manifest = new Manifest(); - Plugin verifierMavenPlugin = project.getBuildPlugins().find { it.artifactId == 'spring-cloud-contract-maven-plugin' } - manifest.addConfiguredAttribute(new Manifest.Attribute("Spring-Cloud-Contract-Verifier-Maven-Plugin-Version", verifierMavenPlugin.version)); - if (verifierMavenPlugin.getDependencies()) { - String verifierVersion = verifierMavenPlugin.getDependencies().find { - it.artifactId == 'spring-cloud-contract-verifier' - }.version - manifest.addConfiguredAttribute(new Manifest.Attribute("Spring-Cloud-Contract-Verifier-Version", verifierVersion)); - } - return manifest - } -} diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/AetherStubDownloaderFactory.groovy b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/AetherStubDownloaderFactory.groovy deleted file mode 100644 index fb1347e266..0000000000 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/AetherStubDownloaderFactory.groovy +++ /dev/null @@ -1,49 +0,0 @@ -/** - * - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.contract.maven.verifier.stubrunner - -import groovy.transform.CompileStatic -import groovy.util.logging.Slf4j -import org.apache.maven.project.MavenProject -import org.eclipse.aether.RepositorySystem -import org.eclipse.aether.RepositorySystemSession -import org.springframework.cloud.contract.stubrunner.AetherStubDownloader - -import javax.inject.Inject -import javax.inject.Named -import javax.inject.Singleton - -@Named -@Singleton -@CompileStatic -@Slf4j -class AetherStubDownloaderFactory { - - private final MavenProject project - private final RepositorySystem repoSystem - - @Inject - AetherStubDownloaderFactory(RepositorySystem repoSystem, MavenProject project) { - this.repoSystem = repoSystem - this.project = project - } - - AetherStubDownloader build(RepositorySystemSession repoSession) { - return new AetherStubDownloader(repoSystem, project.remoteProjectRepositories, repoSession) - } - -} diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/RemoteStubRunner.groovy b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/RemoteStubRunner.groovy deleted file mode 100644 index 000d1cafa0..0000000000 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/RemoteStubRunner.groovy +++ /dev/null @@ -1,52 +0,0 @@ -/** - * - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.contract.maven.verifier.stubrunner - -import groovy.transform.CompileStatic -import groovy.util.logging.Slf4j -import org.eclipse.aether.RepositorySystemSession -import org.springframework.cloud.contract.stubrunner.* - -import javax.inject.Inject -import javax.inject.Named - -@Named -@CompileStatic -@Slf4j -class RemoteStubRunner { - - private final AetherStubDownloaderFactory aetherStubDownloaderFactory - - @Inject - RemoteStubRunner(AetherStubDownloaderFactory aetherStubDownloaderFactory) { - this.aetherStubDownloaderFactory = aetherStubDownloaderFactory - } - - BatchStubRunner run(StubRunnerOptions options, RepositorySystemSession repositorySystemSession) { - AetherStubDownloader stubDownloader = aetherStubDownloaderFactory.build(repositorySystemSession) - try { - log.debug("Launching StubRunner with args: $options") - BatchStubRunner stubRunner = new BatchStubRunnerFactory(options, stubDownloader).buildBatchStubRunner() - RunningStubs runningCollaborators = stubRunner.runStubs() - log.info(runningCollaborators.toString()) - return stubRunner - } catch (Exception e) { - log.error("An exception occurred while trying to execute the stubs: ${e.message}") - throw e - } - } -} diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ConvertMojo.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ConvertMojo.java index 09315b7dda..0570193d03 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ConvertMojo.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ConvertMojo.java @@ -1,5 +1,4 @@ -/** - * +/* * Copyright 2013-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,7 +27,6 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.apache.maven.shared.filtering.MavenResourcesFiltering; -import org.springframework.cloud.contract.maven.verifier.CopyContracts; import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties; import org.springframework.cloud.contract.verifier.wiremock.DslToWireMockClientConverter; import org.springframework.cloud.contract.verifier.wiremock.RecursiveFilesConverter; @@ -38,69 +36,77 @@ import org.springframework.cloud.contract.verifier.wiremock.RecursiveFilesConver *

* This goal allows you to generate `stubs-jar` or execute `spring-cloud-contract:run` with generated WireMock mappings. */ -@Mojo(name = "convert", requiresProject = false, defaultPhase = LifecyclePhase.PROCESS_TEST_RESOURCES) +@Mojo(name = "convert", requiresProject = false, + defaultPhase = LifecyclePhase.PROCESS_TEST_RESOURCES) public class ConvertMojo extends AbstractMojo { - /** - * Directory containing Spring Cloud Contract Verifier contracts written using the GroovyDSL - */ - @Parameter(defaultValue = "${basedir}/src/test/resources/contracts") - private File contractsDirectory; + /** + * Directory containing Spring Cloud Contract Verifier contracts written using the GroovyDSL + */ + @Parameter(defaultValue = "${basedir}/src/test/resources/contracts") + private File contractsDirectory; - /** - * Directory where the generated WireMock stubs from Groovy DSL should be placed. - * You can then mention them in your packaging task to create jar with stubs - */ - @Parameter(defaultValue = "${project.build.directory}/stubs") - private File outputDirectory; + /** + * Directory where the generated WireMock stubs from Groovy DSL should be placed. + * You can then mention them in your packaging task to create jar with stubs + */ + @Parameter(defaultValue = "${project.build.directory}/stubs") + private File outputDirectory; - /** - * Directory containing contracts written using the GroovyDSL - *

- * This parameter is only used when goal is executed outside of maven project. - */ - @Parameter(property = "contractsDirectory", defaultValue = "${basedir}") - private File source; + /** + * Directory containing contracts written using the GroovyDSL + *

+ * This parameter is only used when goal is executed outside of maven project. + */ + @Parameter(property = "contractsDirectory", defaultValue = "${basedir}") + private File source; - @Parameter(property = "stubsDirectory", defaultValue = "${basedir}") - private File destination; + @Parameter(property = "stubsDirectory", defaultValue = "${basedir}") + private File destination; - @Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false") - private boolean skip; + @Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false") + private boolean skip; - @Parameter(defaultValue = "${session}", readonly = true) - private MavenSession mavenSession; + @Parameter(defaultValue = "${session}", readonly = true) + private MavenSession mavenSession; - @Parameter(defaultValue = "${project}", readonly = true) - private MavenProject project; + @Parameter(defaultValue = "${project}", readonly = true) private MavenProject project; - @Component(role = MavenResourcesFiltering.class, hint = "default") - private MavenResourcesFiltering mavenResourcesFiltering; + @Component(role = MavenResourcesFiltering.class, hint = "default") + private MavenResourcesFiltering mavenResourcesFiltering; - public void execute() throws MojoExecutionException, MojoFailureException { + public void execute() throws MojoExecutionException, MojoFailureException { - if (skip) { - getLog().info(String.format("Skipping Spring Cloud Contract Verifier execution: spring.cloud.contract.verifier.skip=%s", skip)); - return; - } + if (skip) { + getLog().info(String.format( + "Skipping Spring Cloud Contract Verifier execution: spring.cloud.contract.verifier.skip=%s", + skip)); + return; + } - new CopyContracts(project, mavenSession, mavenResourcesFiltering).copy(contractsDirectory, outputDirectory); + new CopyContracts(project, mavenSession, mavenResourcesFiltering) + .copy(contractsDirectory, outputDirectory); - final ContractVerifierConfigProperties config = new ContractVerifierConfigProperties(); - config.setContractsDslDir(isInsideProject() ? contractsDirectory : source); - config.setStubsOutputDir(isInsideProject() ? new File(outputDirectory, "mappings") : destination); + final ContractVerifierConfigProperties config = new ContractVerifierConfigProperties(); + config.setContractsDslDir(isInsideProject() ? contractsDirectory : source); + config.setStubsOutputDir( + isInsideProject() ? new File(outputDirectory, "mappings") : destination); - getLog().info("Converting from Spring Cloud Contract Verifier contracts to WireMock stubs mappings"); - getLog().info(String.format(" Spring Cloud Contract Verifier contracts directory: %s", config.getContractsDslDir())); - getLog().info(String.format("WireMock stubs mappings directory: %s", config.getStubsOutputDir())); + getLog().info( + "Converting from Spring Cloud Contract Verifier contracts to WireMock stubs mappings"); + getLog().info(String.format( + " Spring Cloud Contract Verifier contracts directory: %s", + config.getContractsDslDir())); + getLog().info(String.format("WireMock stubs mappings directory: %s", + config.getStubsOutputDir())); - RecursiveFilesConverter converter = new RecursiveFilesConverter(new DslToWireMockClientConverter(), config); - converter.processFiles(); - } - - private boolean isInsideProject() { - return mavenSession.getRequest().isProjectPresent(); - } + RecursiveFilesConverter converter = new RecursiveFilesConverter( + new DslToWireMockClientConverter(), config); + converter.processFiles(); + } + private boolean isInsideProject() { + return mavenSession.getRequest().isProjectPresent(); + } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/CopyContracts.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/CopyContracts.java new file mode 100644 index 0000000000..b92bb47026 --- /dev/null +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/CopyContracts.java @@ -0,0 +1,69 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.contract.maven.verifier; + +import java.io.File; +import java.lang.invoke.MethodHandles; +import java.util.Collections; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.Resource; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.filtering.MavenFilteringException; +import org.apache.maven.shared.filtering.MavenResourcesExecution; +import org.apache.maven.shared.filtering.MavenResourcesFiltering; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CopyContracts { + private static final Logger log = LoggerFactory + .getLogger(MethodHandles.lookup().lookupClass()); + private final MavenProject project; + private final MavenSession mavenSession; + private final MavenResourcesFiltering mavenResourcesFiltering; + + public CopyContracts(MavenProject project, MavenSession mavenSession, + MavenResourcesFiltering mavenResourcesFiltering) { + this.project = project; + this.mavenSession = mavenSession; + this.mavenResourcesFiltering = mavenResourcesFiltering; + } + + public void copy(File contractsDirectory, File outputDirectory) + throws MojoExecutionException { + log.info("Copying Spring Cloud Contract Verifier contracts"); + Resource resource = new Resource(); + resource.setDirectory(contractsDirectory.getAbsolutePath()); + MavenResourcesExecution execution = new MavenResourcesExecution(); + execution.setResources(Collections.singletonList(resource)); + execution.setOutputDirectory(new File(outputDirectory, "contracts")); + execution.setMavenProject(project); + execution.setEncoding("UTF-8"); + execution.setMavenSession(mavenSession); + execution.setInjectProjectBuildFilters(false); + execution.setOverwrite(true); + execution.setIncludeEmptyDirs(false); + execution.setFilterFilenames(false); + try { + mavenResourcesFiltering.filterResources(execution); + } + catch (MavenFilteringException e) { + throw new MojoExecutionException(e.getMessage(), e); + } + + } +} diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/GenerateStubsMojo.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/GenerateStubsMojo.java index 50a2e8009b..f00a21229b 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/GenerateStubsMojo.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/GenerateStubsMojo.java @@ -1,5 +1,4 @@ -/** - * +/* * Copyright 2013-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,73 +28,87 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.jar.JarArchiver; -import org.springframework.cloud.contract.maven.verifier.ManifestCreator; -@Mojo(name = "generateStubs", defaultPhase = LifecyclePhase.PACKAGE, requiresProject = true) +@Mojo(name = "generateStubs", defaultPhase = LifecyclePhase.PACKAGE, + requiresProject = true) public class GenerateStubsMojo extends AbstractMojo { - private static final String STUB_MAPPING_FILE_PATTERN = "**/*.json"; - private static final String CONTRACT_FILE_PATTERN = "**/*.groovy"; + private static final String STUB_MAPPING_FILE_PATTERN = "**/*.json"; + private static final String CONTRACT_FILE_PATTERN = "**/*.groovy"; - @Parameter(defaultValue = "${project.build.directory}", readonly = true, required = true) - private File projectBuildDirectory; + @Parameter(defaultValue = "${project.build.directory}", readonly = true, + required = true) + private File projectBuildDirectory; - @Parameter(property = "stubsDirectory", defaultValue = "${project.build.directory}/stubs") - private File outputDirectory; + @Parameter(property = "stubsDirectory", + defaultValue = "${project.build.directory}/stubs") + private File outputDirectory; - /** - * Set this to "true" to bypass Verifier execution.. - */ - @Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false") - private boolean skip; + /** + * Set this to "true" to bypass Verifier execution.. + */ + @Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false") + private boolean skip; - @Component - private MavenProjectHelper projectHelper; + @Component + private MavenProjectHelper projectHelper; - @Parameter(defaultValue = "${project}", readonly = true) - private MavenProject project; + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; - @Component(role = Archiver.class, hint = "jar") - private JarArchiver archiver; + @Component(role = Archiver.class, hint = "jar") + private JarArchiver archiver; - @Parameter(defaultValue = "true") - private boolean attachContracts; + @Parameter(defaultValue = "true") + private boolean attachContracts; - @Parameter(defaultValue = "stubs") - private String classifier; + @Parameter(defaultValue = "stubs") + private String classifier; - public void execute() throws MojoExecutionException, MojoFailureException { - if (skip) { - getLog().info("Skipping Spring Cloud Contract Verifier execution: spring.cloud.contract.verifier.skip=" + skip); - return; - } - File stubsJarFile = createStubJar(outputDirectory); - projectHelper.attachArtifact(project, "jar", classifier, stubsJarFile); - } + public void execute() throws MojoExecutionException, MojoFailureException { + if (skip) { + getLog().info( + "Skipping Spring Cloud Contract Verifier execution: spring.cloud.contract.verifier.skip=" + + skip); + return; + } + File stubsJarFile = createStubJar(outputDirectory); + projectHelper.attachArtifact(project, "jar", classifier, stubsJarFile); + } - private File createStubJar(File stubsOutputDir) throws MojoFailureException, MojoExecutionException { - if (!stubsOutputDir.exists()) { - throw new MojoExecutionException("Stubs could not be found: [" + stubsOutputDir.getAbsolutePath() + "] .\nPlease make sure that spring-cloud-contract:convert was invoked"); - } - String stubArchiveName = project.getBuild().getFinalName() + "-" + classifier + ".jar"; - File stubsJarFile = new File(projectBuildDirectory, stubArchiveName); - try { - if (attachContracts) { - archiver.addDirectory(stubsOutputDir, new String[]{STUB_MAPPING_FILE_PATTERN, - CONTRACT_FILE_PATTERN }, new String[0]); - } else { - getLog().info("Skipping attaching Spring Cloud Contract Verifier contracts"); - archiver.addDirectory(stubsOutputDir, new String[]{STUB_MAPPING_FILE_PATTERN}, new String[]{ - CONTRACT_FILE_PATTERN }); - } - archiver.setCompress(true); - archiver.setDestFile(stubsJarFile); - archiver.addConfiguredManifest(ManifestCreator.createManifest(project)); - archiver.createArchive(); - } catch (Exception e) { - throw new MojoFailureException("Exception while packaging " + classifier + " jar.", e); - } - return stubsJarFile; - } + private File createStubJar(File stubsOutputDir) + throws MojoFailureException, MojoExecutionException { + if (!stubsOutputDir.exists()) { + throw new MojoExecutionException( + "Stubs could not be found: [" + stubsOutputDir.getAbsolutePath() + + "] .\nPlease make sure that spring-cloud-contract:convert was invoked"); + } + String stubArchiveName = + project.getBuild().getFinalName() + "-" + classifier + ".jar"; + File stubsJarFile = new File(projectBuildDirectory, stubArchiveName); + try { + if (attachContracts) { + archiver.addDirectory(stubsOutputDir, + new String[] { STUB_MAPPING_FILE_PATTERN, CONTRACT_FILE_PATTERN }, + new String[0]); + } + else { + getLog().info( + "Skipping attaching Spring Cloud Contract Verifier contracts"); + archiver.addDirectory(stubsOutputDir, + new String[] { STUB_MAPPING_FILE_PATTERN }, + new String[] { CONTRACT_FILE_PATTERN }); + } + archiver.setCompress(true); + archiver.setDestFile(stubsJarFile); + archiver.addConfiguredManifest(ManifestCreator.createManifest(project)); + archiver.createArchive(); + } + catch (Exception e) { + throw new MojoFailureException( + "Exception while packaging " + classifier + " jar.", e); + } + return stubsJarFile; + } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/GenerateTestsMojo.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/GenerateTestsMojo.java index 2602f00e15..fd6c43ea98 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/GenerateTestsMojo.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/GenerateTestsMojo.java @@ -1,5 +1,4 @@ -/** - * +/* * Copyright 2013-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -33,118 +32,127 @@ import org.springframework.cloud.contract.verifier.config.ContractVerifierConfig import org.springframework.cloud.contract.verifier.config.TestFramework; import org.springframework.cloud.contract.verifier.config.TestMode; -@Mojo(name = "generateTests", defaultPhase = LifecyclePhase.GENERATE_TEST_SOURCES, requiresDependencyResolution = ResolutionScope.TEST) +@Mojo(name = "generateTests", defaultPhase = LifecyclePhase.GENERATE_TEST_SOURCES, + requiresDependencyResolution = ResolutionScope.TEST) public class GenerateTestsMojo extends AbstractMojo { - @Parameter(property = "spring.cloud.contract.verifier.contractsDirectory", defaultValue = "${project.basedir}/src/test/resources/contracts") - private File contractsDirectory; + @Parameter(property = "spring.cloud.contract.verifier.contractsDirectory", + defaultValue = "${project.basedir}/src/test/resources/contracts") + private File contractsDirectory; - @Parameter(defaultValue = "${project.build.directory}/generated-test-sources/contracts") - private File generatedTestSourcesDir; + @Parameter( + defaultValue = "${project.build.directory}/generated-test-sources/contracts") + private File generatedTestSourcesDir; - @Parameter(defaultValue = "org.springframework.cloud.contract.verifier.tests") - private String basePackageForTests; + @Parameter(defaultValue = "org.springframework.cloud.contract.verifier.tests") + private String basePackageForTests; - @Parameter - private String baseClassForTests; + @Parameter + private String baseClassForTests; - @Parameter(defaultValue = "MOCKMVC") - private TestMode testMode; + @Parameter(defaultValue = "MOCKMVC") + private TestMode testMode; - @Parameter(defaultValue = "JUNIT") - private TestFramework testFramework; + @Parameter(defaultValue = "JUNIT") + private TestFramework testFramework; - @Parameter - private String ruleClassForTests; + @Parameter + private String ruleClassForTests; - @Parameter - private String nameSuffixForTests; + @Parameter + private String nameSuffixForTests; - /** - * Imports that should be added to generated tests - */ - @Parameter - private String[] imports; + /** + * Imports that should be added to generated tests + */ + @Parameter + private String[] imports; - /** - * Static imports that should be added to generated tests - */ - @Parameter - private String[] staticImports; + /** + * Static imports that should be added to generated tests + */ + @Parameter + private String[] staticImports; - /** - * Patterns that should not be taken into account for processing - */ - @Parameter - private List excludedFiles; + /** + * Patterns that should not be taken into account for processing + */ + @Parameter + private List excludedFiles; - /** - * Patterns for which Spring Cloud Contract Verifier should generate @Ignored tests - */ - @Parameter - private List ignoredFiles; + /** + * Patterns for which Spring Cloud Contract Verifier should generate @Ignored tests + */ + @Parameter + private List ignoredFiles; - @Parameter(defaultValue = "${project}", readonly = true) - private MavenProject project; + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; - @Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false") - private boolean skip; + @Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false") + private boolean skip; - @Parameter(property = "maven.test.skip", defaultValue = "false") - private boolean mavenTestSkip; + @Parameter(property = "maven.test.skip", defaultValue = "false") + private boolean mavenTestSkip; - @Parameter(property = "skipTests", defaultValue = "false") - private boolean skipTests; + @Parameter(property = "skipTests", defaultValue = "false") private boolean skipTests; - public void execute() throws MojoExecutionException, MojoFailureException { - if (skip || mavenTestSkip || skipTests) { - if (skip) getLog().info("Skipping Spring Cloud Contract Verifier execution: spring.cloud.contract.verifier.skip=" + skip); - if (mavenTestSkip) getLog().info("Skipping Spring Cloud Contract Verifier execution: maven.test.skip=" + mavenTestSkip); - if (skipTests) getLog().info("Skipping Spring Cloud Contract Verifier execution: skipTests" + skipTests); - return; - } - getLog().info("Generating server tests source code for Spring Cloud Contract Verifier contract verification"); - final ContractVerifierConfigProperties config = new ContractVerifierConfigProperties(); - config.setContractsDslDir(contractsDirectory); - config.setGeneratedTestSourcesDir(generatedTestSourcesDir); - config.setTargetFramework(testFramework); - config.setTestMode(testMode); - config.setBasePackageForTests(basePackageForTests); - config.setBaseClassForTests(baseClassForTests); - config.setRuleClassForTests(ruleClassForTests); - config.setNameSuffixForTests(nameSuffixForTests); - config.setImports(imports); - config.setStaticImports(staticImports); - config.setIgnoredFiles(ignoredFiles); - config.setExcludedFiles(excludedFiles); - project.addTestCompileSourceRoot(generatedTestSourcesDir.getAbsolutePath()); - if (getLog().isInfoEnabled()) { - getLog().info("Test Source directory: " + generatedTestSourcesDir.getAbsolutePath() + " added."); - getLog().info("Using " + config.getBaseClassForTests() + " as base class for test classes"); - } - try { - TestGenerator generator = new TestGenerator(config); - int generatedClasses = generator.generate(); - getLog().info("Generated " + generatedClasses + " test classes."); - } catch (ContractVerifierException e) { - throw new MojoExecutionException(String.format("Spring Cloud Contract Verifier Plugin exception: %s", e.getMessage()), e); - } - } + public void execute() throws MojoExecutionException, MojoFailureException { + if (skip || mavenTestSkip || skipTests) { + if (skip) getLog().info("Skipping Spring Cloud Contract Verifier execution: spring.cloud.contract.verifier.skip=" + skip); + if (mavenTestSkip) getLog().info("Skipping Spring Cloud Contract Verifier execution: maven.test.skip=" + mavenTestSkip); + if (skipTests) getLog().info("Skipping Spring Cloud Contract Verifier execution: skipTests" + skipTests); + return; + } + getLog().info( + "Generating server tests source code for Spring Cloud Contract Verifier contract verification"); + final ContractVerifierConfigProperties config = new ContractVerifierConfigProperties(); + config.setContractsDslDir(contractsDirectory); + config.setGeneratedTestSourcesDir(generatedTestSourcesDir); + config.setTargetFramework(testFramework); + config.setTestMode(testMode); + config.setBasePackageForTests(basePackageForTests); + config.setBaseClassForTests(baseClassForTests); + config.setRuleClassForTests(ruleClassForTests); + config.setNameSuffixForTests(nameSuffixForTests); + config.setImports(imports); + config.setStaticImports(staticImports); + config.setIgnoredFiles(ignoredFiles); + config.setExcludedFiles(excludedFiles); + project.addTestCompileSourceRoot(generatedTestSourcesDir.getAbsolutePath()); + if (getLog().isInfoEnabled()) { + getLog().info( + "Test Source directory: " + generatedTestSourcesDir.getAbsolutePath() + + " added."); + getLog().info("Using " + config.getBaseClassForTests() + + " as base class for test classes"); + } + try { + TestGenerator generator = new TestGenerator(config); + int generatedClasses = generator.generate(); + getLog().info("Generated " + generatedClasses + " test classes."); + } + catch (ContractVerifierException e) { + throw new MojoExecutionException( + String.format("Spring Cloud Contract Verifier Plugin exception: %s", + e.getMessage()), e); + } + } - public List getExcludedFiles() { - return excludedFiles; - } + public List getExcludedFiles() { + return excludedFiles; + } - public void setExcludedFiles(List excludedFiles) { - this.excludedFiles = excludedFiles; - } + public void setExcludedFiles(List excludedFiles) { + this.excludedFiles = excludedFiles; + } - public List getIgnoredFiles() { - return ignoredFiles; - } + public List getIgnoredFiles() { + return ignoredFiles; + } - public void setIgnoredFiles(List ignoredFiles) { - this.ignoredFiles = ignoredFiles; - } + public void setIgnoredFiles(List ignoredFiles) { + this.ignoredFiles = ignoredFiles; + } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ManifestCreator.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ManifestCreator.java new file mode 100644 index 0000000000..74f82ae53b --- /dev/null +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ManifestCreator.java @@ -0,0 +1,62 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.contract.maven.verifier; + +import java.util.List; + +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Plugin; +import org.apache.maven.project.MavenProject; +import org.codehaus.groovy.runtime.DefaultGroovyMethods; +import org.codehaus.plexus.archiver.jar.Manifest; +import org.codehaus.plexus.archiver.jar.ManifestException; + +public class ManifestCreator { + public static Manifest createManifest(MavenProject project) throws ManifestException { + Manifest manifest = new Manifest(); + Plugin verifierMavenPlugin = findMavenPlugin(project.getBuildPlugins()); + manifest.addConfiguredAttribute(new Manifest.Attribute( + "Spring-Cloud-Contract-Verifier-Maven-Plugin-Version", verifierMavenPlugin.getVersion())); + if (DefaultGroovyMethods.asBoolean(verifierMavenPlugin.getDependencies())) { + Dependency verifierDependency = findVerifierDependency(verifierMavenPlugin.getDependencies()); + if (verifierDependency != null) { + String verifierVersion = verifierDependency.getVersion(); + manifest.addConfiguredAttribute(new Manifest.Attribute("Spring-Cloud-Contract-Verifier-Version", + verifierVersion)); + } + } + return manifest; + } + + private static Plugin findMavenPlugin(List plugins) { + for (Plugin plugin : plugins) { + if ("spring-cloud-contract-maven-plugin".equals(plugin.getArtifactId())) { + return plugin; + } + } + return null; + } + + private static Dependency findVerifierDependency(List deps) { + for (Dependency dep : deps) { + if ("spring-cloud-contract-verifier".equals(dep.getArtifactId())) { + return dep; + } + } + return null; + } + +} diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/RunMojo.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/RunMojo.java index 60b1346fbe..cc024bfda3 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/RunMojo.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/RunMojo.java @@ -1,5 +1,4 @@ -/** - * +/* * Copyright 2013-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,10 +15,10 @@ */ package org.springframework.cloud.contract.maven.verifier; -import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.util.Collections; +import javax.inject.Inject; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; @@ -41,110 +40,110 @@ import static com.google.common.base.Strings.isNullOrEmpty; @Mojo(name = "run", requiresProject = false, requiresDependencyResolution = ResolutionScope.RUNTIME) public class RunMojo extends AbstractMojo { - @Parameter(defaultValue = "${repositorySystemSession}", readonly = true) - private RepositorySystemSession repoSession; + @Parameter(defaultValue = "${repositorySystemSession}", readonly = true) + private RepositorySystemSession repoSession; - @Parameter(defaultValue = "${project.build.directory}/contracts/mappings") - private File stubsDirectory; + @Parameter(defaultValue = "${project.build.directory}/contracts/mappings") + private File stubsDirectory; - @Parameter(property = "stubsDirectory", defaultValue = "${basedir}") - private File destination; + @Parameter(property = "stubsDirectory", defaultValue = "${basedir}") + private File destination; - /** - * HTTP port for WireMock server - */ - @Parameter(property = "spring.cloud.contract.verifier.http.port", defaultValue = "8080") - private int httpPort; + /** + * HTTP port for WireMock server + */ + @Parameter(property = "spring.cloud.contract.verifier.http.port", defaultValue = "8080") + private int httpPort; - /** - * Set this to "true" to bypass verifier execution. - */ - @Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false") - private boolean skip; + /** + * Set this to "true" to bypass verifier execution. + */ + @Parameter(property = "spring.cloud.contract.verifier.skip", defaultValue = "false") + private boolean skip; - /** - * Set this to "true" to bypass verifier test generation. - */ - @Parameter(property = "spring.cloud.contract.verifier.skipTestOnly", defaultValue = "false") - private boolean skipTestOnly; + /** + * Set this to "true" to bypass verifier test generation. + */ + @Parameter(property = "spring.cloud.contract.verifier.skipTestOnly", defaultValue = "false") + private boolean skipTestOnly; - @Parameter(property = "spring.cloud.contract.verifier.stubs") - private String stubs; + @Parameter(property = "spring.cloud.contract.verifier.stubs") + private String stubs; - @Parameter(property = "spring.cloud.contract.verifier.http.minPort", defaultValue = "10000") - private int minPort; + @Parameter(property = "spring.cloud.contract.verifier.http.minPort", defaultValue = "10000") + private int minPort; - @Parameter(property = "spring.cloud.contract.verifier.http.maxPort", defaultValue = "15000") - private int maxPort; + @Parameter(property = "spring.cloud.contract.verifier.http.maxPort", defaultValue = "15000") + private int maxPort; - /** - * Classifier used by stubs artifacts. - */ - @Parameter(defaultValue = "stubs") - private String stubsClassifier = "stubs"; + /** + * Classifier used by stubs artifacts. + */ + @Parameter(defaultValue = "stubs") + private String stubsClassifier = "stubs"; - @Parameter(defaultValue = "${session}", readonly = true) - private MavenSession mavenSession; + @Parameter(defaultValue = "${session}", readonly = true) + private MavenSession mavenSession; - private final LocalStubRunner localStubRunner; + private final LocalStubRunner localStubRunner; - private final RemoteStubRunner remoteStubRunner; + private final RemoteStubRunner remoteStubRunner; - @Inject - public RunMojo(LocalStubRunner localStubRunner, RemoteStubRunner remoteStubRunner) { - this.localStubRunner = localStubRunner; - this.remoteStubRunner = remoteStubRunner; - } + @Inject + public RunMojo(LocalStubRunner localStubRunner, RemoteStubRunner remoteStubRunner) { + this.localStubRunner = localStubRunner; + this.remoteStubRunner = remoteStubRunner; + } - public void execute() throws MojoExecutionException, MojoFailureException { - if (skip || skipTestOnly) { - getLog().info("Skipping verifier execution: spring.cloud.contract.verifier.skip=" + String.valueOf(skip)); - return; - } - BatchStubRunner batchStubRunner = null; - StubRunnerOptionsBuilder optionsBuilder = new StubRunnerOptionsBuilder() - .withStubsClassifier(stubsClassifier); - if (isNullOrEmpty(stubs)) { - StubRunnerOptions options = optionsBuilder - .withPort(httpPort) - .build(); - StubRunner stubRunner = localStubRunner.run(resolveStubsDirectory().getAbsolutePath(), options); - batchStubRunner = new BatchStubRunner(Collections.singleton(stubRunner)); - } else { - StubRunnerOptions options = optionsBuilder - .withStubs(stubs) - .withMinMaxPort(minPort, maxPort) - .build(); - batchStubRunner = remoteStubRunner.run(options, repoSession); - } - pressAnyKeyToContinue(); - if (batchStubRunner != null) { - try { - batchStubRunner.close(); - } catch (IOException e) { - throw new MojoExecutionException("Fail to close batch stub runner", e); - } - } - } + public void execute() throws MojoExecutionException, MojoFailureException { + if (skip || skipTestOnly) { + getLog().info("Skipping verifier execution: spring.cloud.contract.verifier.skip=" + String.valueOf(skip)); + return; + } + BatchStubRunner batchStubRunner = null; + StubRunnerOptionsBuilder optionsBuilder = new StubRunnerOptionsBuilder() + .withStubsClassifier(stubsClassifier); + if (isNullOrEmpty(stubs)) { + StubRunnerOptions options = optionsBuilder + .withPort(httpPort) + .build(); + StubRunner stubRunner = localStubRunner.run(resolveStubsDirectory().getAbsolutePath(), options); + batchStubRunner = new BatchStubRunner(Collections.singleton(stubRunner)); + } else { + StubRunnerOptions options = optionsBuilder + .withStubs(stubs) + .withMinMaxPort(minPort, maxPort) + .build(); + batchStubRunner = remoteStubRunner.run(options, repoSession); + } + pressAnyKeyToContinue(); + if (batchStubRunner != null) { + try { + batchStubRunner.close(); + } catch (IOException e) { + throw new MojoExecutionException("Fail to close batch stub runner", e); + } + } + } - private File resolveStubsDirectory() { - if (isInsideProject()) { - return stubsDirectory; - } else { - return destination; - } - } + private File resolveStubsDirectory() { + if (isInsideProject()) { + return stubsDirectory; + } else { + return destination; + } + } - private void pressAnyKeyToContinue() { - getLog().info("Press ENTER to continue..."); - try { - System.in.read(); - } catch (Exception ignored) { - } - } + private void pressAnyKeyToContinue() { + getLog().info("Press ENTER to continue..."); + try { + System.in.read(); + } catch (Exception ignored) { + } + } - private boolean isInsideProject() { - return mavenSession.getRequest().isProjectPresent(); - } + private boolean isInsideProject() { + return mavenSession.getRequest().isProjectPresent(); + } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/AetherStubDownloaderFactory.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/AetherStubDownloaderFactory.java new file mode 100644 index 0000000000..025f5eb89a --- /dev/null +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/AetherStubDownloaderFactory.java @@ -0,0 +1,44 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.contract.maven.verifier.stubrunner; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import org.apache.maven.project.MavenProject; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.springframework.cloud.contract.stubrunner.AetherStubDownloader; + +@Named +@Singleton +public class AetherStubDownloaderFactory { + private final MavenProject project; + private final RepositorySystem repoSystem; + + @Inject + public AetherStubDownloaderFactory(RepositorySystem repoSystem, + MavenProject project) { + this.repoSystem = repoSystem; + this.project = project; + } + + public AetherStubDownloader build(RepositorySystemSession repoSession) { + return new AetherStubDownloader(repoSystem, + project.getRemoteProjectRepositories(), repoSession); + } +} diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/LocalStubRunner.groovy b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/LocalStubRunner.java similarity index 56% rename from spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/LocalStubRunner.groovy rename to spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/LocalStubRunner.java index aa0ef46626..ca52d9c5c0 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/groovy/org/springframework/cloud/contract/maven/verifier/stubrunner/LocalStubRunner.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/LocalStubRunner.java @@ -1,5 +1,4 @@ -/** - * +/* * Copyright 2013-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,25 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.contract.maven.verifier.stubrunner +package org.springframework.cloud.contract.maven.verifier.stubrunner; -import groovy.transform.CompileStatic -import groovy.util.logging.Slf4j -import org.springframework.cloud.contract.stubrunner.StubConfiguration -import org.springframework.cloud.contract.stubrunner.StubRunner -import org.springframework.cloud.contract.stubrunner.StubRunnerOptions +import java.lang.invoke.MethodHandles; +import javax.inject.Named; -import javax.inject.Named +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.contract.stubrunner.StubConfiguration; +import org.springframework.cloud.contract.stubrunner.StubRunner; +import org.springframework.cloud.contract.stubrunner.StubRunnerOptions; @Named -@CompileStatic -@Slf4j -class LocalStubRunner { +public class LocalStubRunner { + private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - StubRunner run(String contractsDir, StubRunnerOptions options) { - log.info("Launching StubRunner with contracts from ${contractsDir}") - StubRunner stubRunner = new StubRunner(options, contractsDir, new StubConfiguration(contractsDir)) - stubRunner.runStubs() - return stubRunner - } + public StubRunner run(final String contractsDir, StubRunnerOptions options) { + log.info("Launching StubRunner with contracts from " + contractsDir); + StubRunner stubRunner = new StubRunner(options, contractsDir, + new StubConfiguration(contractsDir)); + stubRunner.runStubs(); + return stubRunner; + } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/RemoteStubRunner.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/RemoteStubRunner.java new file mode 100644 index 0000000000..b76f02ef69 --- /dev/null +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/stubrunner/RemoteStubRunner.java @@ -0,0 +1,57 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.contract.maven.verifier.stubrunner; + +import java.lang.invoke.MethodHandles; +import javax.inject.Inject; +import javax.inject.Named; + +import org.eclipse.aether.RepositorySystemSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.contract.stubrunner.AetherStubDownloader; +import org.springframework.cloud.contract.stubrunner.BatchStubRunner; +import org.springframework.cloud.contract.stubrunner.BatchStubRunnerFactory; +import org.springframework.cloud.contract.stubrunner.RunningStubs; +import org.springframework.cloud.contract.stubrunner.StubRunnerOptions; + +@Named +public class RemoteStubRunner { + private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private final AetherStubDownloaderFactory aetherStubDownloaderFactory; + + @Inject + public RemoteStubRunner(AetherStubDownloaderFactory aetherStubDownloaderFactory) { + this.aetherStubDownloaderFactory = aetherStubDownloaderFactory; + } + + public BatchStubRunner run(StubRunnerOptions options, RepositorySystemSession repositorySystemSession) { + AetherStubDownloader stubDownloader = aetherStubDownloaderFactory.build(repositorySystemSession); + try { + log.debug("Launching StubRunner with args: " + String.valueOf(options)); + BatchStubRunner stubRunner = new BatchStubRunnerFactory(options, + stubDownloader).buildBatchStubRunner(); + RunningStubs runningCollaborators = stubRunner.runStubs(); + log.info(runningCollaborators.toString()); + return stubRunner; + } + catch (Exception e) { + log.error("An exception occurred while trying to execute the stubs: " + e.getMessage()); + throw e; + } + + } +}