diff --git a/pom.xml b/pom.xml index 69d0012cf4..6a6b099a31 100644 --- a/pom.xml +++ b/pom.xml @@ -230,6 +230,12 @@ provided + + org.apache.maven.shared + maven-filtering + 3.1.0 + + ch.qos.logback logback-core diff --git a/src/main/groovy/io/codearte/accurest/maven/ConvertMojo.groovy b/src/main/groovy/io/codearte/accurest/maven/ConvertMojo.groovy index af0f7d5944..6fab4377dd 100644 --- a/src/main/groovy/io/codearte/accurest/maven/ConvertMojo.groovy +++ b/src/main/groovy/io/codearte/accurest/maven/ConvertMojo.groovy @@ -5,44 +5,49 @@ import io.codearte.accurest.config.AccurestConfigProperties import io.codearte.accurest.wiremock.DslToWireMockClientConverter import io.codearte.accurest.wiremock.RecursiveFilesConverter import org.apache.maven.execution.MavenSession -import org.apache.maven.model.path.PathTranslator +import org.apache.maven.model.Resource import org.apache.maven.plugin.AbstractMojo import org.apache.maven.plugin.MojoExecutionException import org.apache.maven.plugin.MojoFailureException +import org.apache.maven.plugins.annotations.Component import org.apache.maven.plugins.annotations.LifecyclePhase import org.apache.maven.plugins.annotations.Mojo import org.apache.maven.plugins.annotations.Parameter - -import javax.inject.Inject +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 @Mojo(name = 'convert', requiresProject = false, defaultPhase = LifecyclePhase.PROCESS_TEST_RESOURCES) @CompileStatic class ConvertMojo extends AbstractMojo { - @Parameter(defaultValue = '${basedir}', readonly = true, required = true) - private File basedir + @Parameter(defaultValue = '${basedir}/src/test/accurest') + private File contractsDirectory - @Parameter(defaultValue = '${project.build.directory}', readonly = true, required = true) - private File projectBuildDirectory + @Parameter(defaultValue = '${project.build.directory}/accurest') + private File outputDirectory - @Parameter(property = 'contractsDirectory') - private String contractsDirectory + @Parameter(property = 'contractsDirectory', defaultValue = '${basedir}') + private File source - @Parameter(property = 'stubsDirectory') - private String outputDirectory + @Parameter(property = 'stubsDirectory', defaultValue = '${basedir}') + private File destination @Parameter(property = 'accurest.skip', defaultValue = 'false') private boolean skip + @Parameter(defaultValue = 'false') + private boolean attachContracts + @Parameter(defaultValue = '${session}', readonly = true) private MavenSession mavenSession - private final PathTranslator translator + @Parameter(defaultValue = '${project}', readonly = true) + private MavenProject project - @Inject - ConvertMojo(PathTranslator translator) { - this.translator = translator - } + @Component(role = MavenResourcesFiltering.class, hint = "default") + private MavenResourcesFiltering mavenResourcesFiltering; void execute() throws MojoExecutionException, MojoFailureException { @@ -51,15 +56,15 @@ class ConvertMojo extends AbstractMojo { return } + if (attachContracts) { + log.info("Attaching accurest contracts") + copyContracts() + } + AccurestConfigProperties config = new AccurestConfigProperties() - if (insideProject) { - config.contractsDslDir = resolveFile(basedir, contractsDirectory, 'src/test/accurest') - config.stubsOutputDir = resolveFile(projectBuildDirectory, outputDirectory, 'mappings') - } else { - config.contractsDslDir = resolveFile(basedir, contractsDirectory, '') - config.stubsOutputDir = resolveFile(basedir, outputDirectory, '') - } + config.contractsDslDir = insideProject ? contractsDirectory : source + config.stubsOutputDir = insideProject ? new File(outputDirectory, 'mappings') : destination log.info('Converting from accurest contracts written in GroovyDSL to WireMock stubs mappings') log.info(" Accurest contracts directory: ${config.contractsDslDir}") @@ -69,16 +74,27 @@ class ConvertMojo extends AbstractMojo { converter.processFiles() } + private void copyContracts() { + Resource testResource = new Resource(directory: contractsDirectory.absolutePath) + + MavenResourcesExecution mavenResourcesExecution = + new MavenResourcesExecution([testResource], + new File(outputDirectory, 'contracts'), project, 'UTF-8', + [], [], 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); + } + } + private boolean isInsideProject() { return mavenSession.request.projectPresent } - private File resolveFile(File baseDir, String requestedPath, String defaultPath) { - return requestedPath ? alignToBaseDirectory(baseDir, requestedPath) : alignToBaseDirectory(baseDir, defaultPath) - } - - private File alignToBaseDirectory(File baseDir, String path) { - return new File(translator.alignToBaseDirectory(path, baseDir)) - } } diff --git a/src/main/groovy/io/codearte/accurest/maven/GenerateStubsMojo.groovy b/src/main/groovy/io/codearte/accurest/maven/GenerateStubsMojo.groovy index ea75877350..ed88bd2b74 100644 --- a/src/main/groovy/io/codearte/accurest/maven/GenerateStubsMojo.groovy +++ b/src/main/groovy/io/codearte/accurest/maven/GenerateStubsMojo.groovy @@ -20,7 +20,7 @@ class GenerateStubsMojo extends AbstractMojo { @Parameter(defaultValue = '${project.build.directory}', readonly = true, required = true) private File projectBuildDirectory - @Parameter(property = 'stubsDirectory', defaultValue = '${project.build.directory}/mappings') + @Parameter(property = 'stubsDirectory', defaultValue = '${project.build.directory}/accurest') private File outputDirectory @Parameter(property = 'accurest.skip', defaultValue = 'false') diff --git a/src/main/groovy/io/codearte/accurest/maven/RunMojo.groovy b/src/main/groovy/io/codearte/accurest/maven/RunMojo.groovy index ea33e18ca8..a6b67e4939 100644 --- a/src/main/groovy/io/codearte/accurest/maven/RunMojo.groovy +++ b/src/main/groovy/io/codearte/accurest/maven/RunMojo.groovy @@ -5,7 +5,6 @@ import io.codearte.accurest.maven.stubrunner.LocalStubRunner import io.codearte.accurest.maven.stubrunner.RemoteStubRunner import io.codearte.accurest.stubrunner.StubRunnerOptions import org.apache.maven.execution.MavenSession -import org.apache.maven.model.path.PathTranslator import org.apache.maven.plugin.AbstractMojo import org.apache.maven.plugin.MojoExecutionException import org.apache.maven.plugin.MojoFailureException @@ -19,17 +18,14 @@ import javax.inject.Inject @CompileStatic class RunMojo extends AbstractMojo { - @Parameter(defaultValue = '${basedir}', readonly = true, required = true) - private File basedir - - @Parameter(defaultValue = '${project.build.directory}', readonly = true, required = true) - private File projectBuildDirectory - @Parameter(defaultValue = '${repositorySystemSession}', readonly = true) private RepositorySystemSession repoSession + @Parameter(defaultValue = '${project.build.directory}/accurest/mappings') + private File stubsDirectory + @Parameter(property = 'stubsDirectory', defaultValue = '${basedir}') - private String stubsDirectory + private File destination @Parameter(property = 'accurest.http.port', defaultValue = '8080') private int httpPort; @@ -53,13 +49,11 @@ class RunMojo extends AbstractMojo { private final LocalStubRunner localStubRunner private final RemoteStubRunner remoteStubRunner - private final PathTranslator translator @Inject - RunMojo(LocalStubRunner localStubRunner, RemoteStubRunner remoteStubRunner, PathTranslator translator) { + RunMojo(LocalStubRunner localStubRunner, RemoteStubRunner remoteStubRunner) { this.localStubRunner = localStubRunner this.remoteStubRunner = remoteStubRunner - this.translator = translator } void execute() throws MojoExecutionException, MojoFailureException { @@ -84,9 +78,9 @@ class RunMojo extends AbstractMojo { private File resolveStubsDirectory() { if (insideProject) { - return resolveFile(projectBuildDirectory, stubsDirectory, 'mappings') + stubsDirectory } else { - return resolveFile(basedir, stubsDirectory, '') + destination } } @@ -102,13 +96,4 @@ class RunMojo extends AbstractMojo { return mavenSession.request.projectPresent } - private File resolveFile(File baseDir, String requestedPath, String defaultPath) { - return requestedPath ? alignToBaseDirectory(baseDir, requestedPath) : alignToBaseDirectory(baseDir, defaultPath) - } - - private File alignToBaseDirectory(File baseDir, String path) { - return new File(translator.alignToBaseDirectory(path, baseDir)) - } - - } diff --git a/src/test/java/io/codearte/accurest/maven/PluginUnitTest.java b/src/test/java/io/codearte/accurest/maven/PluginUnitTest.java index 5b7e11f812..d008614a00 100644 --- a/src/test/java/io/codearte/accurest/maven/PluginUnitTest.java +++ b/src/test/java/io/codearte/accurest/maven/PluginUnitTest.java @@ -23,21 +23,21 @@ public class PluginUnitTest { public void shouldGenerateWireMockStubsInDefaultLocation() throws Exception { File basedir = resources.getBasedir("basic"); maven.executeMojo(basedir, "convert"); - assertFilesPresent(basedir, "target/mappings/Sample.json"); + assertFilesPresent(basedir, "target/accurest/mappings/Sample.json"); } @Test public void shouldGenerateWireMockFromStubsDirectory() throws Exception { File basedir = resources.getBasedir("withStubs"); maven.executeMojo(basedir, "convert", newParameter("contractsDirectory", "src/test/resources/stubs")); - assertFilesPresent(basedir, "target/mappings/Sample.json"); + assertFilesPresent(basedir, "target/accurest/mappings/Sample.json"); } @Test public void shouldGenerateWireMockStubsInSelectedLocation() throws Exception { File basedir = resources.getBasedir("basic"); - maven.executeMojo(basedir, "convert", newParameter("outputDirectory", "foo")); - assertFilesPresent(basedir, "target/foo/Sample.json"); + maven.executeMojo(basedir, "convert", newParameter("outputDirectory", "target/foo")); + assertFilesPresent(basedir, "target/foo/mappings/Sample.json"); } @Test