Spring云契约未部署到Maven多模块项目中的Artifactory
我有一个多模块项目,其中每个模块都可以很好地部署到Artifactory,直到我将springcloudcontractmaven插件添加到其中一个模块(服务,因为它是生产者API) 该项目的结构如下:Spring云契约未部署到Maven多模块项目中的Artifactory,maven,multi-module,spring-cloud-contract,Maven,Multi Module,Spring Cloud Contract,我有一个多模块项目,其中每个模块都可以很好地部署到Artifactory,直到我将springcloudcontractmaven插件添加到其中一个模块(服务,因为它是生产者API) 该项目的结构如下: parent -通用(共享DTO) -客户 -服务 我们希望在将来删除客户端和通用客户端,并在用户中使用外部客户端以减少耦合,并且有一个没有内部模块的基本项目,但目前我们必须保持这种结构 我首先注意到存根并没有推送到Artifactory,所以我最初的解决方法是将其添加到Jenkins管道中
parent
-通用(共享DTO)
-客户
-服务
我们希望在将来删除客户端和通用客户端,并在用户中使用外部客户端以减少耦合,并且有一个没有内部模块的基本项目,但目前我们必须保持这种结构
我首先注意到存根并没有推送到Artifactory,所以我最初的解决方法是将其添加到Jenkins管道中
sh./mvnw clean deploy-U--projects=xxx服务'
它部署了服务和存根,但我注意到在执行此命令时没有部署任何模块:
sh./mvnw clean deploy-U'
这是输出的结尾:
[INFO]安装/xxx/xxx服务/target/xxx-service-1.7.0-SNAPSHOT.jar到/xxx/.m2/repository/xxx/xxx服务/1.7.0-SNAPSHOT/xxx-service-1.7.0-SNAPSHOT.jar
[信息]正在将/xxx/xxx-service/pom.xml安装到/xxx/.m2/repository/xxx/xxx-service/1.7.0-SNAPSHOT/xxx-service-1.7.0-SNAPSHOT.pom
[信息]安装/xxx/xxx服务/target/xxx-service-1.7.0-SNAPSHOT-stubs.jar到/xxx/.m2/repository/xxx/xxx服务/1.7.0-SNAPSHOT/xxx-service-1.7.0-SNAPSHOT-stubs.jar
[信息]
[信息]---maven部署插件:2.8.2:deploy(默认部署)@xxx服务---
[信息]部署xxx:xxx服务:1.7.0-结束时快照
我尝试将所有Maven配置移动到父POM文件中,并将契约和基本测试类保留在服务模块中。我已经查看了如何配置插件的说明,我已经看到我可以使用contractsDirectory指定契约文件的目录,gmavenplus插件指定生成测试的目录,packageWithBaseClasses指定基类的包。但是,我看不到任何方法来指定基类的目录。我无法将基本测试类移动到父类,因为它们使用服务模块的某些类来生成模拟
有没有办法,或者我必须为合同创建一个单独的项目
提前感谢问题原因: 我在一个父项目中通过API进行了扩展:
org.apache.maven.plugins
,看看Jerome的答案,那也是
解决方案1:
从上一个块中删除deployAtEnd选项,使其成为:
org.apache.maven.plugins
maven部署插件
${maven deploy plugin.version}
解决方案2:
在所有模块中配置插件,尽管他们不需要它。为此:
- 在所有模块的src/test/resources下添加一个空的“contracts”文件夹
- 将其添加到服务模块的pom文件中:
org.springframework.cloud
SpringCloudContractMaven插件
${spring cloud contract.version}
真的
问题原因:
我在一个父项目中通过API进行了扩展:
org.apache.maven.plugins
,看看Jerome的答案,那也是
解决方案1:
从上一个块中删除deployAtEnd选项,使其成为:
org.apache.maven.plugins
maven部署插件
${maven deploy plugin.version}
解决方案2:
在所有模块中配置插件,尽管他们不需要它。为此:
- 在所有模块的src/test/resources下添加一个空的“contracts”文件夹
- 将其添加到服务模块的pom文件中:
org.springframework.cloud
SpringCloudContractMaven插件
${spring cloud contract.version}
真的
你能把你的样本上传到某个地方让我检查一下吗?我已经创建了一个简化版本的项目,它工作得很好,因此它与一些配置冲突,这在我使用单个模块的其他项目中是不会发生的。这些问题似乎是由扩展SpringBootStarter父项目的自定义父项目引起的。如果我将父级的代码复制到API中,那么API的部署就可以正常工作,但如果它扩展了API,则无法正常工作。有趣的是,如果我从插件配置中删除该行,它就会工作,但是它不会生成存根。我将继续调查并发布更多信息。ThanksIt似乎与以下内容相关:如下所述:。我将尝试找出插件之间的冲突以及如何解决itI,我已经设法通过一个解决方案使其工作,并且我还找到了正确的解决方案,即从maven deploy plugin的配置中删除DeployateEnd。我已经在回答中记录了这两个问题。你能把你的示例上传到某个地方让我检查一下吗?我已经创建了一个项目的简化版本,它工作正常,因此它与一些配置冲突,而我使用的是单个模块,在其他项目中不会发生这种冲突。这些问题似乎是由扩展SpringBootStarter父项目的自定义父项目引起的。如果我将父级的代码复制到API中,那么API的部署就可以正常工作,但如果它扩展了API,则无法正常工作。有趣的是,如果我从插件配置中删除该行,它就会工作,但是它不会生成存根。我将继续调查并发布更多信息。ThanksIt似乎与以下内容相关:如下所述:。我将尝试找出插件是如何冲突的,以及如何解决itI。我已经设法通过一个解决方法使它工作,我还发现了r