我在多模块项目中使用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
最后一次调用是针对root项目的:
[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ parent-project ---
[INFO] Deploying package:parent-project:v1.1 at end
就是这样,实际部署不会被执行。
如何使用deployAtEnd=true
?
答案 0 :(得分:2)
今天我在项目中解决了同样的问题。
问题模块有扩展(<extension>
标签)。它们违反了maven-deploy-plugin中内置模块的计数器。
要解决此问题,我已将<extension>
移至根POM。
答案 1 :(得分:2)
正如我们今天遇到的这个问题,我在maven-deploy-plugin中找到了相关问题:
https://issues.apache.org/jira/plugins/servlet/mobile#issue/MDEPLOY-193
JérômeJoslet在本期中的解释:
我今天发布了这个问题并找到了解决方法。
maven-deploy-plugin在静态变量中记录其状态。一个用于 堆叠部署请求(
deployRequests
)和另一个请求计数 准备好的项目(readyProjectsCounter
)。当问题发生时,那里 是用于计算就绪项目的多个静态变量。这个 当有多个加载部署的类加载器时会发生 插件的类。这导致多个类实例和多个 静态变量实例。一些模块依赖于一个实例和 其他模块在另一个模块上。结果就是部署插件 永远不会刷新其待处理的部署请求,因为没有计数器等于 反应堆中的项目数量。
对于使用构建扩展的项目,插件类加载器是 连接到项目类加载器。这使插件代码可以访问这两者 由项目构建导出的Maven API包和包 扩展。 Maven将为每个创建一个且只有一个类加载器 独特的插件+依赖项+构建扩展组合。
和
Maven保证每个都有一个且只有一个项目类加载器 一组独特的项目构建扩展和相同的类加载器 由具有一组构建扩展的所有项目使用。
解决方法是声明所有扩展插件及其所有额外插件 父项目中的
<dependencies>
。这保证了同样的 classloader用于在所有模块中加载插件。