Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring云契约未部署到Maven多模块项目中的Artifactory_Maven_Multi Module_Spring Cloud Contract - Fatal编程技术网

Spring云契约未部署到Maven多模块项目中的Artifactory

Spring云契约未部署到Maven多模块项目中的Artifactory,maven,multi-module,spring-cloud-contract,Maven,Multi Module,Spring Cloud Contract,我有一个多模块项目,其中每个模块都可以很好地部署到Artifactory,直到我将springcloudcontractmaven插件添加到其中一个模块(服务,因为它是生产者API) 该项目的结构如下: parent -通用(共享DTO) -客户 -服务 我们希望在将来删除客户端和通用客户端,并在用户中使用外部客户端以减少耦合,并且有一个没有内部模块的基本项目,但目前我们必须保持这种结构 我首先注意到存根并没有推送到Artifactory,所以我最初的解决方法是将其添加到Jenkins管道中

我有一个多模块项目,其中每个模块都可以很好地部署到Artifactory,直到我将springcloudcontractmaven插件添加到其中一个模块(服务,因为它是生产者API)

该项目的结构如下:

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