0

使用 Spring Cloud Contract 1.0.2.RELEASE,我可以在本地 Maven 存储库中发布存根,但是当我运行测试时,消费者端找不到它们。

看起来在消费者方面,它为本地 maven 存储库选择了与生产者不同的位置:尽管 Spring Cloud Contract 和 Aether 库的日志记录很好,但我花了一段时间才弄清楚,因为我使用的位置本地 Maven 存储库与默认存储库类似(但不同)。

我正在使用 Maven 3.3.1。

4

1 回答 1

4

在 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 settings.xml 中的本地 Maven 存储库位置:

<localRepository>C:/HOMEWARE/maven_local_repo</localRepository>

您的生产者将在此位置安装存根,但消费者将在默认位置查找本地存储库,除非您通过“maven.repo.local”系统属性定义自己的位置

您可以在消费者端使用 surefire 这样做:

<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>
于 2017-01-17T04:29:52.853 回答