[ https://issues.apache.org/jira/browse/MNG-5667?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16625548#comment-16625548 ]
Stephen Connolly commented on MNG-5667: --------------------------------------- Hmmm actually I think this proposal is the wrong way to do this. I think we should keep the linear lifecycle, *but* _either_ the install plugin (in fact plugins in general) should be aware of the final phase and if that final phase is {{deploy}} then it should skip pushing the artifacts to the local repository cache but instead put a dirty flag on the artifacts in the local repository cache _or_ the deploy plugin should put the dirty flag in place so that the hash gets checked and that way we can save re-downloading a very large artifact. Use Case 1: I have a number of projects where some artifacts should never be deployed but other artifacts should. But allow for sub-reactor builds I need to install them, but they should never be deployed. (So I have something like this in those pom files: {code:xml} <plugin> <artifactId>maven-deploy-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <configuration> <skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo> </configuration> </plugin> {code} Now if we fork the lifecycle, then I cannot build something that depends on that locally without including the non-deployed module in the reactor. Given that these are time-consuming docker images used for integration testing, i'd rather not rebuild them every time I want to run {{mvn test -f integration-tests/pom.xml -Dtest=SomeNewTestCaseIAmWriting}} during iterative development. Use Case 2: The large artifacts. I have had projects in the past where Maven builds a 9GB artifact (ISO image of a VM... yeah don't ask). That can be a pain to upload... but if I then need to turn around and download it again immediately after uploading it... that would be really bad. It may be that the solution for use case 2 is to have the deploy plugin also do an install... but you can see why I think this is not entirely a trivial solution. Use Case 3: What should we then do with {{mvn clean install deploy}} Once we actually have a forked lifecycle then {{mvn clean install deploy}} actually becomes a legitimate request (and unlike now where we can say "Well {{deploy}} implies {{install}} so please don't do that) we may find that we have users crawling out of the woodwork with more exotic use cases. > Either install or deploy > ------------------------ > > Key: MNG-5667 > URL: https://issues.apache.org/jira/browse/MNG-5667 > Project: Maven > Issue Type: Sub-task > Components: FDPFC, Plugins and Lifecycle > Reporter: Robert Scholte > Assignee: Robert Scholte > Priority: Major > > Original proposal > {quote} > 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) > {quote} -- This message was sent by Atlassian JIRA (v7.6.3#76005)