Артефакт был найден в локальном репозитории, но вы явно указали, что он должен быть загружен с удаленного » - PullRequest
0 голосов
/ 07 мая 2019

У меня есть потребительский проект, в котором есть верификатор тестов весенних облачных контрактов, которому нужно поговорить с заглушкой в ​​удаленном репо. Настройка для stubsMode: LOCAL работает нормально, но для удаленного она выдает следующую ошибку.

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.contract.stubrunner.BatchStubRunner]: Factory method 'batchStubRunner' threw exception; nested exception is java.lang.IllegalStateException: The artifact was found in the local repository but you have explicitly stated that it should be downloaded from a remote one
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
    ... 43 more
Caused by: java.lang.IllegalStateException: The artifact was found in the local repository but you have explicitly stated that it should be downloaded from a remote one

Код дистанционного управления на стороне потребителя:

`@RunWith(SpringRunner.class)
@SpringBootTest(classes = RestClientConfig.class,
        webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureStubRunner(   repositoryRoot="https://nexus.com/nexus/content/repositories/sam-releases/com/sam/api/",
        ids = "com.sam:api:+:stubs:8083",
        stubsMode = StubRunnerProperties.StubsMode.REMOTE
)

pom.xml

<spring-cloud.version>Finchley.SR2</spring-cloud.version>
    <spring-cloud-contract.version>2.0.2.RELEASE</spring-cloud-contract-version>

Мне нужно использовать REMOTE repoUrl для потребительского проекта, чтобы поговорить с заглушкой производителя.

1 Ответ

2 голосов
/ 08 мая 2019

Если вы прочитаете документацию в этом разделе https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#_ci_server_setup (на самом деле достаточно найти исключение, которое вы искали в документации), вы увидите следующий текст:

91.4 Настройка сервера CI

При извлечении заглушек / контрактов в CI, совместно используемой среде, может случиться так, что и производитель, и потребитель повторно используют один и тот же локальный репозиторий Maven.Из-за этого среда, ответственная за загрузку JAR-заглушки из удаленного местоположения, не может решить, какой JAR должен быть выбран, локальный или удаленный.Это вызвало исключение «Артефакт был найден в локальном репозитории, но вы явно указали, что он должен быть загружен из удаленного», и сборка не удалась.

Для таких случаев мы представляем свойство и плагинМеханизм настройки:

via stubrunner.snapshot-check-skip system property
via STUBRUNNER_SNAPSHOT_CHECK_SKIP environment variable

, если любое из этих значений установлено в true, загрузчик заглушки не будет проверять происхождение загруженного JAR.

Для плагинов вам нужно установитьсвойство ContractSnapshotCheckSkip в true.

Просто следуйте инструкциям из документации, и у вас больше не возникнет этой проблемы.Или столкнитесь с поездом выпуска Гринвич, где эта проблема была полностью исправлена.

...