В моем локальном репо не найдены заглушки контракта Spring Cloud
Используя Spring Cloud Contract 1.0.2.RELEASE, я могу опубликовать заглушки в моем локальном репозитории Maven, но они не обнаруживаются потребителем при запуске тестов.
Похоже, что на стороне потребителя, он выбирает другое местоположение для локального репозитория Maven, чем у производителя: несмотря на хорошую регистрацию в библиотеках Spring Cloud Contract и Aether, мне потребовалось некоторое время, чтобы выяснить это, поскольку местоположение, которое я использовал для локальное репозиторий Maven аналогично (но отличается) репо по умолчанию.
Я использую Maven 3.3.1.
1 ответ
В org.springframework.cloud.contract.stubrunner.AetherFactories мы ясно видим, что он получает местоположение локального репозитория следующим образом:
private static final String MAVEN_LOCAL_REPOSITORY_LOCATION = "maven.repo.local";
private static String localRepositoryDirectory() {
return System.getProperty(MAVEN_LOCAL_REPOSITORY_LOCATION, System.getProperty("user.home") + "/.m2/repository");
}
Так что если вы переопределяете локальное хранилище Maven в вашем Maven settings.xml, используя что-то вроде этого:
<localRepository>C:/HOMEWARE/maven_local_repo</localRepository>
ваш производитель установит заглушки в этом месте, но потребитель будет искать в локальном репозитории местоположение по умолчанию, если вы сами не определите местоположение с помощью системного свойства "maven.repo.local".
Вы можете сделать это следующим образом, используя верный подход на стороне потребителя:
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<maven.repo.local>${settings.localRepository}</maven.repo.local>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>