spring - Spring Contract Maven 插件 pushStubsToScm 不起作用
问题描述
我尝试在生产者端使用 Spring Contract Maven 插件来上传存根 jar 并与消费者共享。
我正在使用 Spring Cloud Contract 2.0.0。
我在项目中配置了spring-cloud-contract-maven-plugin,代码上传到 Github。
<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,它将失败并下载存根 jar 错误,可能与此问题类似,在新版本 2.0.0 中,当stubsMode设置为 LOCAL时,Spring Cloud 合同无法按预期从本地 maven repos 解析 jars .
更新 2:我还尝试在 spring contract maven 插件配置中添加contractsRepositoryUsername和contractsRepositoryPassword,它不起作用。
解决方案
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
推荐阅读
- git - 在 digitalocean 上使用 git 命令更新我的项目
- typescript - 未定义中的 TypeScript 错误(未定义,未定义)
- javascript - 如何让 node.js 中的调试器与检查一起工作
- python - 如何将基类对象转换为子类对象?
- r - 在 R 中更改 dygraph 中图例的位置
- ios - 如何阻止一些 Firebase 推送通知?
- java - Android Studio 3.5 开销
- linux - 如何将python脚本放入jetson nano启动?
- javascript - Discord.js 不会在语音通话中播放声音
- excel - 特定行号后无法切换行