Я определил несколько контрактов Spring Cloud, которые я упаковал в jar, используя gradle verifierStubsJar
. Я хотел бы запустить заглушки в этой банке с помощью jar-файл-заглушка Spring Cloud Contract. Я не хочу публиковать банку с заглушками в репозитории артефактов, таком как Artifactory или локальный репозиторий Maven. Я просто хочу запустить заглушки. Как передать местоположение банки, содержащей мои заглушки, банке бегунка заглушек?
Как запускать локальные контракты с помощью бегуна заглушек Spring Cloud Contract
Ответы (2)
Если вы используете gradle generateClientStubs
:
curl -Lo stub-runner.jar https://search.maven.org/remotecontent?filepath=org/springframework/cloud/spring-cloud-contract-stub-runner-boot/2.2.1.RELEASE/spring-cloud-contract-stub-runner-boot-2.2.1.RELEASE.jar
java -Djava.security-egd=/dev/./urandom -Dstubrunner.repositoryRoot=stubs://file://absolute/path/to/build/stubs -Dstubrunner.ids=com.company-contract:stubs:8081 -Dstubrunner.stubs-mode=REMOTE -jar stub-runner.jar
Если вы используете gradle verifierStubsJar
:
curl -Lo stub-runner.jar https://search.maven.org/remotecontent?filepath=org/springframework/cloud/spring-cloud-contract-stub-runner-boot/2.2.1.RELEASE/spring-cloud-contract-stub-runner-boot-2.2.1.RELEASE.jar
java -cp stub-runner.jar:build/libs/my-contract-stubs.jar -Djava.security-egd=/dev/./urandom -Dstubrunner.ids=com.company:my-contract:stubs:8081 -Dstubrunner.stubs-mode=CLASSPATH org.springframework.boot.loader.JarLauncher
Попытки:
При использовании
gradle generateClientStubs
не забывайте ведущую косую черту в абсолютном URI вашего каталога заглушек. напримерstubs://file:///User/me/my-contracts-project/build/stubs
.Средство выполнения заглушек запускает сервер на порту 8080, поэтому вы должны запускать свои заглушки на другом порту. Вы можете изменить порт, на котором запускается программа-заглушка, с помощью обычного
-Dserver.port
.
Если вы читаете документы, вы найдете этот раздел https://cloud.spring.io/spring-cloud-contract/reference/html/project-features.html#features-stub-runner-stubs-protocol
Вместо того, чтобы выбирать заглушки или определения контрактов из Artifactory / Nexus или Git, можно просто указать место на диске или в пути к классам. Это может быть особенно полезно в многомодульном проекте, когда один модуль хочет повторно использовать заглушки или контракты из другого модуля без необходимости фактической установки их в локальном репозитории maven для фиксации этих изменений в Git.
Для этого достаточно использовать протокол stubs: //, когда корневой параметр репозитория установлен либо в Stub Runner, либо в плагине Spring Cloud Contract.
В этом примере продюсерский проект был успешно построен, и в папке target / stubs были созданы заглушки. Как потребитель, можно настроить Stub Runner, чтобы он выбирал заглушки из этого места, используя протокол stubs: //.
@AutoConfigureStubRunner (stubsMode = StubRunnerProperties.StubsMode.REMOTE, repositoryRoot = "stubs: // file: // location / to / the / provider / target / stubs /", ids = "com.example: some-maker")
Контракты и заглушки могут храниться в месте, где у каждого производителя есть собственная выделенная папка для контрактов и сопоставлений заглушек. В этой папке у каждого потребителя может быть своя настройка. Чтобы Stub Runner находил выделенную папку из предоставленных идентификаторов, можно передать свойство stubs.find-продюсера = true или системное свойство stubrunner.stubs.find-продюсер = true.
@AutoConfigureStubRunner (stubsMode = StubRunnerProperties.StubsMode.REMOTE, repositoryRoot = "stubs: // file: // location / to / the / contract / directory", ids = "com.example: some -pumer", properties = "stubs. найти-продюсер = истина ")
java -Dstubrunner.ids=com.myname:my-contracts:8080:stubs -Dstubrunner.stubs-mode=CLASSPATH -jar stub-runner.jar
. Проблема здесь в том, что банка, содержащая мои заглушки, на самом деле не находится в пути к классам. И флаг -cp
не работает с -jar
.
- person lxdr; 16.01.2020
stubrunner.repositoryRoot
неприменимо, потому что у меня нет удаленного репозитория Maven. Я не могу установить stubrunner.stubsMode
в LOCAL, потому что я использую Gradle, а не Maven, и поэтому у меня нет локального репозитория Maven. Я ищу что-то вроде stubrunner.stubsJar=/usr/src/stubs.jar
.
- person lxdr; 16.01.2020
stubrunner.repositoryRoot
не всегда относится к maven, но также и к локальной файловой системе, например @AutoConfigureStubRunner(stubsMode = StubRunnerProperties.StubsMode.REMOTE, repositoryRoot = "stubs://file://location/to/the/producer/target/stubs/", ids = "com.example:some-producer")
из документов
- person adrhc; 21.05.2021