從某個位置獲取存根或契約定義
您無需從 Artifactory、Nexus 或 Git 中獲取存根或契約定義,而是可以指向驅動器或類路徑上的某個位置。這在多模組專案中特別有用,其中一個模組希望重用另一個模組中的存根或契約,而無需實際將這些存根或契約安裝到本地 Maven 儲存庫中或將這些更改提交到 Git。
為了實現此目的,當儲存庫根引數在 Stub Runner 或 Spring Cloud Contract 外掛中設定時,您可以使用 stubs:// 協議。
在此示例中,producer 專案已成功構建,並且存根已在 target/stubs 資料夾下生成。作為消費者,可以使用 stubs:// 協議設定 Stub Runner 以從該位置獲取存根。
註解
@AutoConfigureStubRunner(
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
repositoryRoot = "stubs://file://location/to/the/producer/target/stubs/",
ids = "com.example:some-producer")
JUnit 4 規則
@Rule
public StubRunnerRule rule = new StubRunnerRule()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/producer/target/stubs/")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE);
JUnit 5 擴充套件
@RegisterExtension
public StubRunnerExtension stubRunnerExtension = new StubRunnerExtension()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/producer/target/stubs/")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE);
契約和存根可以儲存在一個位置,其中每個生產者都有自己的、用於契約和存根對映的專用資料夾。在該資料夾下,每個消費者都可以有自己的設定。要使 Stub Runner 從提供的 ID 中找到專用資料夾,您可以傳遞 stubs.find-producer=true 屬性或 spring.cloud.contract.stubrunner.stubs.find-producer=true 系統屬性。以下清單顯示了契約和存根的排列
└── com.example (1)
├── some-artifact-id (2)
│ └── 0.0.1
│ ├── contracts (3)
│ │ └── shouldReturnStuffForArtifactId.groovy
│ └── mappings (4)
│ └── shouldReturnStuffForArtifactId.json
└── some-other-artifact-id (5)
├── contracts
│ └── shouldReturnStuffForOtherArtifactId.groovy
└── mappings
└── shouldReturnStuffForOtherArtifactId.json
| 1 | 消費者的 Group ID |
| 2 | artifact ID 為 [some-artifact-id] 的消費者 |
| 3 | artifact ID 為 [some-artifact-id] 的消費者的契約 |
| 4 | artifact ID 為 [some-artifact-id] 的消費者的對映 |
| 5 | artifact ID 為 [some-other-artifact-id] 的消費者 |
註解
@AutoConfigureStubRunner(
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
repositoryRoot = "stubs://file://location/to/the/contracts/directory",
ids = "com.example:some-producer",
properties="stubs.find-producer=true")
JUnit 4 規則
static Map<String, String> contractProperties() {
Map<String, String> map = new HashMap<>();
map.put("stubs.find-producer", "true");
return map;
}
@Rule
public StubRunnerRule rule = new StubRunnerRule()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/contracts/directory")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE)
.properties(contractProperties());
JUnit 5 擴充套件
static Map<String, String> contractProperties() {
Map<String, String> map = new HashMap<>();
map.put("stubs.find-producer", "true");
return map;
}
@RegisterExtension
public StubRunnerExtension stubRunnerExtension = new StubRunnerExtension()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/contracts/directory")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE)
.properties(contractProperties());