Maven 部署插件-deployAtEnd 不起作用

问题描述 投票:0回答:3

我在多模块项目中使用 maven-deploy-plugin,并将

deployAtEnd
属性设置为
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
使部署插件在多模块项目中正常工作?

maven maven-deploy-plugin
3个回答
7
投票

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

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

本期 Jérôme Joslet 移植术 :

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

maven-deploy-plugin 将其状态记录在静态变量中。一个为 堆叠部署请求 (

deployRequests
) 和另一个用于计数 准备好项目(
readyProjectsCounter
)。当问题出现时,有 是多个静态变量,用于对就绪项目进行计数。这 当有多个类加载器加载部署时会发生 插件的类。这会导致多个类实例和多个 静态变量实例。某些模块依赖于一个实例并且 其他模块在另一个模块上。

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

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

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

Maven 保证每个项目都有且仅有一个项目类加载器 独特的项目构建扩展集和相同的类加载器将 由具有构建扩展集的所有项目使用。

解决方法是声明所有扩展插件,及其所有额外的

<dependencies>
,在父项目中。这保证了同样的 类加载器用于加载所有模块中的插件。


3
投票

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

问题模块有扩展(

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

为了修复它,我将

<extension>
移至根 POM。


0
投票

请确保每个模块中的插件版本相同。 为了简化版本管理,在根 pom 中定义插件版本并从每个子模块中删除。另外,正如 @aleks-ya 所建议的,确保子模块不使用不同的扩展——将它们移动到 root pom。

© www.soinside.com 2019 - 2024. All rights reserved.