【问题标题】:Spring Contract Maven Plugin pushStubsToScm does not workSpring Contract Maven 插件 pushStubsToScm 不起作用
【发布时间】:2018-07-01 06:24:45
【问题描述】:

我尝试在 生产者 端使用 Spring Contract Maven 插件来上传存根 jar 并与消费者共享。

我正在使用 Spring Cloud Contract 2.0.0。

我在我的项目the codes is uploaded to Github 中配置了 spring-cloud-contract-maven-plugin

<plugin>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-maven-plugin</artifactId>
    <version>${spring-cloud-contract.version}</version>
    <extensions>true</extensions>
    <configuration>
        <basePackageForTests>com.example.demo</basePackageForTests>
        <baseClassMappings>
            <baseClassMapping>
                <contractPackageRegex>.*rest.*</contractPackageRegex>
                <baseClassFQN>com.example.demo.RestVerifierBase</baseClassFQN>
            </baseClassMapping>
        </baseClassMappings>
        <!-- We want to pick contracts from a Git repository -->
        <!--<contractsRepositoryUrl>git://file://${project.basedir}/target/contract_git/</contractsRepositoryUrl>-->
        <!-- Example of URL via git protocol -->
        <!--<contractsRepositoryUrl>git://git@github.com:spring-cloud-samples/spring-cloud-contract-samples.git</contractsRepositoryUrl>-->
        <!-- Example of URL via http protocol -->
        <!--<contractsRepositoryUrl>git://https://github.com/spring-cloud-samples/spring-cloud-contract-samples.git</contractsRepositoryUrl>-->

        <contractsRepositoryUrl>git://https://github.com/hantsy/contracts-git.git</contractsRepositoryUrl>
        <!-- We reuse the contract dependency section to set up the path
        to the folder that contains the contract definitions. In our case the
        path will be /groupId/artifactId/version/contracts -->
        <contractDependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>${project.artifactId}</artifactId>
            <version>${project.version}</version>
        </contractDependency>
        <!-- The mode can't be classpath -->
        <contractsMode>REMOTE</contractsMode>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <!-- By default we will not push the stubs back to SCM,
                you have to explicitly add it as a goal -->
                <goal>pushStubsToScm</goal>
            </goals>
        </execution>
    </executions>
</plugin> 

当我运行命令 mvn clean install -DskipTests -DcontractsRepositoryUsername=hantsy -DcontractsRepositoryPassword=mypassword 并失败时。

Caused by: org.eclipse.jgit.errors.TransportException: https://github.com/hantsy/contracts-git.git: Authentication is required but no CredentialsProvider has been registered

更新:如果我将contractsMode设置为LOCAL,下载stubs jar错误会失败,可能与this issue类似,在新版本2.0.0中,Spring Cloud合约不能当 stubsMode 设置为 LOCAL 时,按预期从本地 maven 存储库解析 jar。

更新 2:我还尝试在 spring contract maven 插件配置中添加 contractsRepositoryUsernamecontractsRepositoryPassword,它不起作用。

【问题讨论】:

    标签: spring spring-boot spring-cloud spring-cloud-contract


    【解决方案1】:

    contractsMode 必须是 REMOTE。我以你的例子为例,它适用于:

    <contractsRepositoryUrl>git://git@github.com:marcingrzejszczak/contracts-git.git</contractsRepositoryUrl>
    <contractsMode>REMOTE</contractsMode>
    

    通过手动传递凭据,我觉得这绝对是奇怪的......

    我看到[INFO] Passed username and password - will set a custom credentials provider,这意味着用户名和密码已通过,我正在使用它们。但实际上我得到的是Authentication is required but no CredentialsProvider has been registered,这没有任何意义。你可以为此提交另一个错误吗?解决方法是使用代理。

    更新:

    问题在这里得到解决https://github.com/spring-cloud/spring-cloud-contract/issues/678

    【讨论】:

    猜你喜欢
    • 2019-05-19
    • 2017-08-15
    • 1970-01-01
    • 2016-02-05
    • 2011-11-11
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多