9

我在deployAtEnd属性设置为的多模块项目中使用 maven-deploy-plugin true

mvn deploy根项目中执行后,为每个子项目执行部署插件 - 我可以看到类似的内容: [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

4

2 回答 2

6

今天刚遇到这个问题,我在 maven-deploy-plugin 中发现了相关问题:

https://issues.apache.org/jira/plugins/servlet/mobile#issue/MDEPLOY-193

Jérôme Joslet 在本期的解释:

我今天发出这个问题并找到了解决方法。

maven-deploy-plugin 将其状态记录在静态变量中。一个用于堆叠部署请求 ( deployRequests),另一个用于计算就绪项目 ( readyProjectsCounter)。当问题发生时,有不止一个静态变量用于统计准备好的项目。当有多个类加载器加载部署插件的类时,就会发生这种情况。这会导致多个类实例和多个静态变量实例。一些模块依赖于一个实例,而其他模块依赖于另一个实例。

结果是部署插件永远不会刷新其挂起的部署请求,因为没有计数器等于反应器中的项目数。

正如以下文档中提到的:https ://svn.apache.org/repos/infra/websites/production/maven/content/reference/maven-classloading.html :

对于使用构建扩展的项目,插件类加载器连接到项目类加载器。这使插件代码可以访问 Maven API 包和项目构建扩展导出的包。Maven 将为每个独特的插件+依赖项+构建扩展组合创建一个且只有一个类加载器。

Maven 保证每个唯一的项目构建扩展集都只有一个项目类加载器,并且具有该构建扩展集的所有项目都将使用相同的类加载器。

<dependencies>解决方法是在父项目中声明所有扩展插件及其所有 extra 。这确保了相同的类加载器用于在所有模块中加载插件。

于 2017-11-27T20:13:56.770 回答
3

今天我在我的项目中解决了同样的问题。

问题模块有扩展(<extension>标签)。它们违反了 maven-deploy-plugin 中构建模块的计数器。

为了修复它,我移到<extension>了根 POM。

于 2016-05-19T18:16:30.907 回答