我在多模块项目中使用maven部署插件,将deployAtEnd属性设置为true。
在根项目中执行mvn deploy之后,对每个子项目执行deployment -我可以看到这样的情况:[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ subproject-name --- [INFO] Deploying package:subproject-name:v1.1 at end最后一次调用用于根项目:[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ parent-project --- [INFO] Deploying package:parent-project:v1.1 at end --仅此而已,没有执行实际部署。
如何使用deployAtEnd=true使部署插件在多模块项目中正确工作
发布于 2017-11-27 20:13:56
当我们今天刚刚遇到这个问题时,我在maven-部署插件中找到了相关的问题:
https://issues.apache.org/jira/plugins/servlet/mobile#issue/MDEPLOY-193
Jér me Joslet对此问题的解释:
我今天发了这个问题,找到了一个解决办法。 maven部署插件将其状态记录在静态变量中。一个用于堆叠部署请求(
deployRequests),另一个用于计数就绪项目(readyProjectsCounter)。当出现问题时,有多个静态变量用于计数就绪项目。当有多个类加载器加载部署插件的类时,就会发生这种情况。这将导致多个类实例和多个静态变量实例。有些模块依赖于一个实例,而另一些模块则依赖于另一个实例。 其结果是,部署插件从不刷新其挂起的部署请求,因为没有计数器等于反应堆中的项目数量。 如以下文档所述:https://svn.apache.org/repos/infra/websites/production/maven/content/reference/maven-classloading.html: 对于使用构建扩展的项目,插件类加载器连接到项目类加载器。这使插件代码可以访问Maven API包和由项目构建扩展导出的包。Maven将为每个唯一的插件+依赖+构建扩展组合创建一个和唯一一个类加载器。 和 Maven保证,对于每个唯一的项目构建扩展集,只有一个项目类加载器,所有具有构建扩展集的项目都将使用相同的类加载器。 解决方法是在父项目中声明所有扩展插件及其所有额外的<dependencies>。这确保相同的类加载器用于在所有模块中加载插件。
发布于 2016-05-19 18:16:30
今天,我在我的项目中解决了同样的问题。
问题模块有扩展(<extension>标记)。它们违反了maven部署插件中构建的模块的计数器。
为了修复它,我将<extension> 移到根POM.中。
https://stackoverflow.com/questions/36328154
复制相似问题