PROPOSAL 1: PerProject and PerPhase Executions

I've recently introduced the installAtEnd/deployAtEnd as an experimental feature which should improve the behavior of Maven without having to wait for the implementation in Maven Core, which would have a huge impact. The reason is that you only want to install and/or deploy only after all modules have been build and verified successfully. This feature works for most projects, however there are cases which cannot be solved by the plugin solution and require a change in the handling of lifecycles in Maven Core. Up unto the verify-phase you want to execute all phases per project, whereas the install and deploy should be executed per phase.
Consider a root project with 2 modules, these should be executed like this

root   : validate ... verify
module1: validate ... verify
module2: validate ... verify
root   : install
module1: install
module2: install
root   : deploy
module1: deploy
module2: deploy

PROPOSAL 2: Either install or deploy
In general one should either run 'mvn verify' or 'mvn deploy', there's often no reason to run 'mvn install'. The only reason I can think of is when you have 2 separate projects (not part of the same multimodule), one depending on the other and you want to test this. To ensure that your projects build the same as your co-workers, you should always try to deploy it. However, there are several reasons why a deploy could fail: network problems, authentication/authorization issues, repository manager policies, etc. However, this is still after every install-phase, so the local repository is polluted. This is as unpleasant as for a developer local repository as for a CI-server local repo.

The proposal is to "branch" the final phases.
Calling any phase up until the verify will stay the same.
Calling 'mvn install' would call these phases: validate ... verify, install (nothing new here) Calling 'mvn deploy' would call these phases: validate ... verify, deploy (no more install)

Both proposals should have a generic implementation, since it's not just a problem of the default/build lifecycle. Also the site lifecycle requires the same type of handling.

PROPOSAL 3: post-<phase> should always be executed after <phase>
There are right now 3 phases which also have a pre-<phase> and post-<phase>, namely integration-test, clean and site. However, even if one has bound goals to the post-phases, they're probably never called. When there's an integration-test starting up some server, you'd probably always want to kill it no matter what happens during the IT (let say a NPE). The proposal is to execute the post-<phase> as the finally block in Java. If you really want to execute only the integration-test without the post, the phase should be marked, e.g. 'mvn [integration-test]', where the brackets lock the phase.

thanks,
Robert

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org

Reply via email to