Maven部署插件 - deployAtEnd无法正常工作

时间:2016-03-31 08:34:08

标签: maven maven-deploy-plugin

我在多模块项目中使用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

在多模块项目中使部署插件正常工作

2 个答案:

答案 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)。当问题发生时,那里   是用于计算就绪项目的多个静态变量。这个   当有多个加载部署的类加载器时会发生   插件的类。这导致多个类实例和多个   静态变量实例。一些模块依赖于一个实例和   其他模块在另一个模块上。

     

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

     

如下所述   文档:https://svn.apache.org/repos/infra/websites/production/maven/content/reference/maven-classloading.html

     

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

     

     

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

     

解决方法是声明所有扩展插件及其所有额外插件   父项目中的<dependencies>。这保证了同样的   classloader用于在所有模块中加载插件。