diff --git a/README.adoc b/README.adoc
index bef21750e4..fc263f9606 100644
--- a/README.adoc
+++ b/README.adoc
@@ -6,7 +6,7 @@ image::https://circleci.com/gh/spring-cloud/spring-cloud-contract.svg?style=svg[
== Spring Cloud Contract
-What you always need it confidence in pushing new features into a new application or service in a distributed system.
+What you always need is confidence in pushing new features into a new application or service in a distributed system.
This project provides support for Consumer Driven Contracts and service schemas in Spring applications, covering a
range of options for writing tests, publishing them as assets, asserting that a contract is kept by producers
and consumers, for HTTP and message-based interactions.
diff --git a/samples/pom.xml b/samples/pom.xml
index 69922a976d..507af6b325 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -78,6 +78,43 @@
+
+ windows
+
+
+
+
+ org.apache.maven.plugins
+ maven-invoker-plugin
+
+ src/it/settings.xml
+ standalone
+ ${skipTests}
+ true
+
+ windows
+
+
+ */pom.xml
+
+
+ clean
+ install
+
+
+
+
+ integration
+
+ run
+
+
+
+
+
+
+
diff --git a/samples/standalone/dsl/http-client/pom.xml b/samples/standalone/dsl/http-client/pom.xml
index dd6e5965e2..61742a15ff 100644
--- a/samples/standalone/dsl/http-client/pom.xml
+++ b/samples/standalone/dsl/http-client/pom.xml
@@ -169,6 +169,35 @@
+
+ windows
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle
+ test
+
+ gradlew.bat
+
+ clean
+ build
+ publishToMavenLocal
+ -PverifierVersion=${spring-cloud-contract.version}
+
+
+
+ exec
+
+
+
+
+
+
+
diff --git a/samples/standalone/dsl/http-server/pom.xml b/samples/standalone/dsl/http-server/pom.xml
index a7419f3812..9aad4af765 100644
--- a/samples/standalone/dsl/http-server/pom.xml
+++ b/samples/standalone/dsl/http-server/pom.xml
@@ -220,5 +220,34 @@
+
+ windows
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle
+ test
+
+ gradlew.bat
+
+ clean
+ build
+ publishToMavenLocal
+ -PverifierVersion=${spring-cloud-contract.version}
+
+
+
+ exec
+
+
+
+
+
+
+
diff --git a/samples/standalone/messaging/stream-sink/pom.xml b/samples/standalone/messaging/stream-sink/pom.xml
index c76da9257a..bb2255e8ca 100644
--- a/samples/standalone/messaging/stream-sink/pom.xml
+++ b/samples/standalone/messaging/stream-sink/pom.xml
@@ -167,5 +167,34 @@
+
+ windows
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle
+ test
+
+ gradlew.bat
+
+ clean
+ build
+ publishToMavenLocal
+ -PverifierVersion=${spring-cloud-contract.version}
+
+
+
+ exec
+
+
+
+
+
+
+
diff --git a/samples/standalone/messaging/stream-source/pom.xml b/samples/standalone/messaging/stream-source/pom.xml
index 2cbf8750fb..7f47493a30 100644
--- a/samples/standalone/messaging/stream-source/pom.xml
+++ b/samples/standalone/messaging/stream-source/pom.xml
@@ -216,5 +216,34 @@
+
+ windows
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle
+ test
+
+ gradlew.bat
+
+ clean
+ build
+ publishToMavenLocal
+ -PverifierVersion=${spring-cloud-contract.version}
+
+
+
+ exec
+
+
+
+
+
+
+
diff --git a/samples/standalone/restdocs/http-client/pom.xml b/samples/standalone/restdocs/http-client/pom.xml
index d09efe1c65..058dbd32e4 100644
--- a/samples/standalone/restdocs/http-client/pom.xml
+++ b/samples/standalone/restdocs/http-client/pom.xml
@@ -181,6 +181,35 @@
+
+ windows
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle
+ test
+
+ ./gradlew
+
+ clean
+ build
+ publishToMavenLocal
+ -PverifierVersion=${spring-cloud-contract.version}
+
+
+
+ exec
+
+
+
+
+
+
+
diff --git a/samples/standalone/restdocs/http-server/pom.xml b/samples/standalone/restdocs/http-server/pom.xml
index 5555f3d593..3eda7e2124 100644
--- a/samples/standalone/restdocs/http-server/pom.xml
+++ b/samples/standalone/restdocs/http-server/pom.xml
@@ -200,5 +200,35 @@
+
+ windows
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle
+ test
+
+ gradlew.bat
+
+ clean
+ build
+
+ install
+ -PverifierVersion=${spring-cloud-contract.version}
+
+
+
+ exec
+
+
+
+
+
+
+
diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/ContractDownloader.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/ContractDownloader.java
index e37b8c2ba4..d87ccfd456 100644
--- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/ContractDownloader.java
+++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/ContractDownloader.java
@@ -61,7 +61,8 @@ public class ContractDownloader {
}
private String patternFromProperty(File contractsDirectory) {
- return "^" + contractsDirectory.getAbsolutePath() + contractsPath() + ".*$";
+ return ("^" + contractsDirectory.getAbsolutePath() +
+ contractsPath().replace("/", File.separator) + ".*$").replace("\\", "\\\\");
}
private String contractsPath() {
@@ -79,13 +80,13 @@ public class ContractDownloader {
}
private String groupArtifactToPattern(File contractsDirectory) {
- return "^" +
+ return ("^" +
contractsDirectory.getAbsolutePath() +
File.separator +
this.projectGroupId.replace(".", File.separator) +
File.separator +
this.projectArtifactId
+ File.separator +
- ".*$";
+ ".*$").replace("\\", "\\\\");
}
}
diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/ContractDownloaderSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/ContractDownloaderSpec.groovy
index 9bd6958224..fd4434cf72 100644
--- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/ContractDownloaderSpec.groovy
+++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/ContractDownloaderSpec.groovy
@@ -30,7 +30,7 @@ class ContractDownloaderSpec extends Specification {
def 'should set inclusion pattern on config when path pattern was explicitly provided without a separator at the beginning'() {
given:
- String contractPath = fileSeparated('a/b/c/d')
+ String contractPath = File.separator + ['a','b','c','d'].join(File.separator)
ContractDownloader contractDownloader = new ContractDownloader(stubDownloader,
stubConfiguration, contractPath, '', '')
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
@@ -45,6 +45,6 @@ class ContractDownloaderSpec extends Specification {
}
private static String fileSeparated(String string) {
- return string.replace('/', File.separator)
+ return string.replace('/', File.separator).replace("\\", "\\\\")
}
}
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/pom.xml
index 761f06aa58..575b1d78e0 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/pom.xml
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/pom.xml
@@ -124,6 +124,38 @@
+
+ windows
+
+
+ windows
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ gradle
+ package
+
+ gradlew.bat
+
+ build
+ jacocoTestReport
+
+
+
+ exec
+
+
+
+
+
+
+
fast
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginIT.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginIT.java
index 9d38236b0a..d97171a33d 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginIT.java
+++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginIT.java
@@ -18,6 +18,8 @@ package org.springframework.cloud.contract.maven.verifier;
import java.io.File;
+import org.junit.Assume;
+import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -40,6 +42,15 @@ public class PluginIT {
private final MavenRuntime maven;
+ @Before
+ public void doNotRunForWindows() {
+ Assume.assumeFalse(isWindows());
+ }
+
+ private boolean isWindows() {
+ return System.getProperty("os.name").startsWith("Windows");
+ }
+
public PluginIT(MavenRuntime.MavenRuntimeBuilder mavenBuilder) throws Exception {
this.maven = mavenBuilder.withCliOptions("-B", "-U").build();
}
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 141d1f12f7..31a9b2f906 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
@@ -19,6 +19,8 @@ package org.springframework.cloud.contract.maven.verifier;
import java.io.File;
import org.apache.commons.io.FileUtils;
+import org.junit.Assume;
+import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/RegexpBuilders.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/RegexpBuilders.groovy
index df267cfd87..8e8fc9108f 100644
--- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/RegexpBuilders.groovy
+++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/RegexpBuilders.groovy
@@ -99,7 +99,7 @@ class RegexpBuilders {
private final static Pattern SPECIAL_REGEX_CHARS = Pattern.compile('[{}()\\[\\].+*?^$\\\\|]')
- private static String escapeSpecialRegexChars(String str) {
+ static String escapeSpecialRegexChars(String str) {
return SPECIAL_REGEX_CHARS.matcher(str).replaceAll('\\\\\\\\$0')
}
diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy b/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy
index fa6a8a5922..840bb44471 100644
--- a/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy
+++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy
@@ -36,7 +36,7 @@ import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.test.context.ContextConfiguration
-
+import spock.lang.IgnoreIf
import spock.lang.Specification
/**
@@ -45,6 +45,7 @@ import spock.lang.Specification
@ContextConfiguration(classes = Config, loader = SpringBootContextLoader)
@IntegrationTest("debug=true")
@AutoConfigureStubRunner
+@IgnoreIf({ os.windows })
class CamelStubRunnerSpec extends Specification {
@Autowired StubFinder stubFinder
diff --git a/tests/spring-cloud-contract-stub-runner-integration/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/IntegrationStubRunnerSpec.groovy b/tests/spring-cloud-contract-stub-runner-integration/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/IntegrationStubRunnerSpec.groovy
index 86a3e434d4..2d9e09d011 100644
--- a/tests/spring-cloud-contract-stub-runner-integration/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/IntegrationStubRunnerSpec.groovy
+++ b/tests/spring-cloud-contract-stub-runner-integration/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/IntegrationStubRunnerSpec.groovy
@@ -30,6 +30,7 @@ import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.ImportResource
import org.springframework.messaging.Message
import org.springframework.test.context.ContextConfiguration
+import spock.lang.IgnoreIf
import spock.lang.Specification
import java.util.concurrent.TimeUnit
@@ -39,6 +40,7 @@ import java.util.concurrent.TimeUnit
@ContextConfiguration(classes = Config, loader = SpringBootContextLoader)
@ImportResource("classpath*:integration-context.xml")
@AutoConfigureStubRunner
+@IgnoreIf({ os.windows })
class IntegrationStubRunnerSpec extends Specification {
@Autowired StubFinder stubFinder
diff --git a/tests/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy b/tests/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy
index 28564fa7be..733fd4a0ca 100644
--- a/tests/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy
+++ b/tests/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy
@@ -18,28 +18,25 @@ package org.springframework.cloud.contract.stubrunner.messaging.stream
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
-
-import java.util.concurrent.TimeUnit
-
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
-import org.springframework.boot.test.IntegrationTest;
+import org.springframework.boot.test.IntegrationTest
import org.springframework.boot.test.context.SpringBootContextLoader
import org.springframework.cloud.contract.spec.Contract
import org.springframework.cloud.contract.stubrunner.StubFinder
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
-import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier;
+import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
import org.springframework.cloud.stream.annotation.EnableBinding
import org.springframework.cloud.stream.messaging.Sink
import org.springframework.cloud.stream.messaging.Source
-import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.messaging.Message
import org.springframework.test.context.ContextConfiguration
-
+import spock.lang.IgnoreIf
import spock.lang.Specification
+import java.util.concurrent.TimeUnit
/**
* @author Marcin Grzejszczak
*/
@@ -47,6 +44,7 @@ import spock.lang.Specification
@IntegrationTest("debug=true")
@AutoConfigureStubRunner
@AutoConfigureMessageVerifier
+@IgnoreIf({ os.windows })
class StreamStubRunnerSpec extends Specification {
@Autowired StubFinder stubFinder