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 ea775d6665..3e4fc5830e 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
@@ -60,9 +60,41 @@
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/PluginUnitTest.java
+
+
+
org.apache.maven.plugins
maven-failsafe-plugin
+
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit-jupiter.version}
+
+
+ org.junit.vintage
+ junit-vintage-engine
+ ${junit-vintage.version}
+
+
+
+ plain
+ true
+
+ org.junit.jupiter:junit-vintage-engine
+
+
+ **/PluginUnitTest.java
+
+
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 0a009536cb..57acecf5f3 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
@@ -120,21 +120,22 @@ public class GenerateStubsMojo extends AbstractMojo {
throw new MojoExecutionException("Stubs could not be found: [" + this.outputDirectory.getAbsolutePath()
+ "] .\nPlease make sure that spring-cloud-contract:convert was invoked");
}
+ File stubsJarFile = getStubJarDestFile();
if (this.incrementalContractStubsJar && !inputFilesChangeDetected(outputDirectory, mojoExecution, session)) {
getLog().info("Nothing to generate - stubs jar is up to date");
- return;
}
- File stubsJarFile = createStubJar(this.outputDirectory);
+ else {
+ fillStubJar(this.outputDirectory, stubsJarFile);
+ }
this.projectHelper.attachArtifact(this.project, "jar", this.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");
- }
+ private File getStubJarDestFile() {
String stubArchiveName = this.projectFinalName + "-" + this.classifier + ".jar";
- File stubsJarFile = new File(this.projectBuildDirectory, stubArchiveName);
+ return new File(this.projectBuildDirectory, stubArchiveName);
+ }
+
+ private void fillStubJar(File stubsOutputDir, File stubsJarFile) throws MojoFailureException {
String[] excludes = excludes();
getLog().info(
"Files matching this pattern will be excluded from " + "stubs generation " + Arrays.toString(excludes));
@@ -149,7 +150,6 @@ public class GenerateStubsMojo extends AbstractMojo {
catch (Exception e) {
throw new MojoFailureException("Exception while packaging " + this.classifier + " jar.", e);
}
- return stubsJarFile;
}
private boolean stubsOutputMissing(File stubsOutputDir) {
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/AbstractMojoTest.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/AbstractMojoTest.java
index 6229e75e4b..964f2802e8 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/AbstractMojoTest.java
+++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/AbstractMojoTest.java
@@ -63,10 +63,18 @@ public abstract class AbstractMojoTest {
return new File(this.tmpFolder, name);
}
- protected void executeMojo(File baseDir, String goal, Xpp3Dom... parameters) throws Exception {
+ protected MavenSession prepareMavenSession(File baseDir) throws Exception {
MavenProject mavenProject = rule.readMavenProject(baseDir);
- MavenSession mavenSession = rule.newMavenSession(mavenProject);
- rule.executeMojo(mavenSession, mavenProject, goal, parameters);
+ return rule.newMavenSession(mavenProject);
+ }
+
+ protected void executeMojo(File baseDir, String goal, Xpp3Dom... parameters) throws Exception {
+ MavenSession mavenSession = prepareMavenSession(baseDir);
+ executeMojo(mavenSession, goal, parameters);
+ }
+
+ protected void executeMojo(MavenSession mavenSession, String goal, Xpp3Dom... parameters) throws Exception {
+ rule.executeMojo(mavenSession, mavenSession.getCurrentProject(), goal, parameters);
}
protected void assertFilesPresent(File file, String name) {
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginUnitTest.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginUnitTest.java
index cc5e45d582..8197219b73 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginUnitTest.java
+++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginUnitTest.java
@@ -18,8 +18,11 @@ package org.springframework.cloud.contract.maven.verifier;
import java.io.File;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.junit.Ignore;
import org.junit.Test;
import org.springframework.util.StringUtils;
@@ -29,8 +32,6 @@ import static org.apache.commons.io.FileUtils.readFileToString;
import static org.apache.maven.plugin.testing.MojoParameters.newParameter;
import static org.assertj.core.api.BDDAssertions.then;
-// TODO: Move this to integration tests
-@Ignore("Testing harness uses an old version of maven")
public class PluginUnitTest extends AbstractMojoTest {
@Test
@@ -346,4 +347,21 @@ public class PluginUnitTest extends AbstractMojoTest {
"target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/common_repo_with_inclusion/reward_rules/src/main/resources/contracts/reward_rules/rest/admin/V1Test.java");
}
+ @Test
+ public void shouldAttachUpToDateStubs() throws Exception {
+ File basedir = getBasedir("generatedStubs");
+
+ MavenSession firstSession = prepareMavenSession(basedir);
+ MavenProject firstProject = firstSession.getCurrentProject();
+ Artifact stubArtifact = new DefaultArtifact(firstProject.getGroupId(), firstProject.getArtifactId(),
+ firstProject.getVersion(), "", "jar", "stubs", firstProject.getArtifact().getArtifactHandler());
+
+ executeMojo(firstSession, "generateStubs");
+ then(firstSession.getCurrentProject().getAttachedArtifacts()).contains(stubArtifact);
+
+ MavenSession secondSession = prepareMavenSession(basedir);
+ executeMojo(secondSession, "generateStubs");
+ then(secondSession.getCurrentProject().getAttachedArtifacts()).contains(stubArtifact);
+ }
+
}
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/resources/m2repo/repository/com/example/contracts/0.0.1-SNAPSHOT/contracts-0.0.1-SNAPSHOT.jar b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/resources/m2repo/repository/com/example/contracts/0.0.1-SNAPSHOT/contracts-0.0.1-SNAPSHOT.jar
index 623f11fff4..6c47639c60 100644
Binary files a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/resources/m2repo/repository/com/example/contracts/0.0.1-SNAPSHOT/contracts-0.0.1-SNAPSHOT.jar and b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/resources/m2repo/repository/com/example/contracts/0.0.1-SNAPSHOT/contracts-0.0.1-SNAPSHOT.jar differ