В моем локальном репо не найдены заглушки контракта 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>
Другие вопросы по тегам