10

I'm using maven-deploy-plugin in multi-module project with deployAtEnd property set to true.

After executing mvn deploy in root project, deploy plugin is executed for each subproject - I can see something like: [INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ subproject-name --- [INFO] Deploying package:subproject-name:v1.1 at end Last invocation is for root project: [INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ parent-project --- [INFO] Deploying package:parent-project:v1.1 at end and that's all, actual deployment is not executed.

How do I make deploy plugin work correctly in multi-module project with deployAtEnd=true?

  • And at the end of all modules you don't see an output deploying the artifacts to a repository ? Are you using custom maven plugins which define their own life cycle? – khmarbaise Mar 31 '16 at 09:46
  • @khmarbaise Correct, there's no output related to deployment. I'm not using any custom plugins (at least I think so, how can I verify that?) – Arkadiusz Komarzewski Mar 31 '16 at 10:07
  • Can you show the full log output otherwise it's hard to see what's wrong? – khmarbaise Mar 31 '16 at 10:13
  • @khmarbaise I'm preparing some minimal example. Meanwhile, I noticed that if I put explicit execution in plugin definition: ` deploy deploy deploy `, then deployment starts, but at some subproject in the middle of the sequence. – Arkadiusz Komarzewski Apr 01 '16 at 07:04
  • To be clear i'm using deployAtEnd for a long time with large projects about 500 modules which works without any problem.....So i assume there is some other problem..which i can only take a look at if you offer the appropriate log files ... – khmarbaise Apr 01 '16 at 08:32

2 Answers2

7

As we just ran into this issue today, I found the related issue in maven-deploy-plugin:

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

Jérôme Joslet explantation in this issue :

I issue this problem today and found a workaround.

The maven-deploy-plugin records its state in static variables. One for stacking deploy requests (deployRequests) and another one for counting ready project (readyProjectsCounter). When the problem occurs, there is more than one static variable used to count ready projects. This happens when there is more than one classloader that loads the deploy plugin's classes. This leads to multiple class instances and multiple static variable instances. Some module count on one instance and others modules on another one.

The result is that the deploy plugin never flush its pending deploy requests since no counter is equal to the number of project in the reactor.

As mentionned in the following documentation : https://svn.apache.org/repos/infra/websites/production/maven/content/reference/maven-classloading.html :

For projects that use build extensions, plugin classloaders are wired to project classloaders. This gives plugin code access to both Maven API packages and packages exported by the project build extensions. Maven will create one and only one classloader for each unique plugin+dependencies+build-extensions combination.

and

Maven guarantees there will be one and only one project classloader for each unique set of project build extensions and the same classloader will be used by all projects that have the set of build extensions.

The workaround is to declare all extension plugins, with all their extra <dependencies>, in the parent project. This assures that the same classloader is used for loading plugin in all modules.

Sablier
  • 81
  • 1
  • 7
  • If you are in a situation with a long chain of parent projects (don't ask...): go up the chain until you reach the first project defining plugins. Projects only defining plugin _management_ can be safely ignored. – publysher Jul 21 '22 at 13:35
3

Today I resolved the same problem in my project.

The problem modules have extensions (<extension> tags). They violate a counter of built modules in maven-deploy-plugin.

To fix it I moved <extension> to the root POM.

publysher
  • 11,214
  • 1
  • 23
  • 28
Aleks Ya
  • 859
  • 5
  • 15
  • 27