Maven
  1. Maven
  2. MNG-4975

[regression] plugin executions injected from profile run before instead of after existing executions in the POM

    Details

    • Type: Bug Bug
    • Status: Closed Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 3.0, 3.0.1, 3.0.2
    • Fix Version/s: 3.0.3
    • Component/s: Plugins and Lifecycle
    • Labels:
      None
    • Environment:
      I reproduced the problem with maven 3.0, 3.0.1 and 3.0.2. It doesn't exist in 2.2.1
      MacOS 1.6 JVM
    • Complexity:
      Intermediate
    • Testcase included:
      yes
    • Number of attachments :
      1

      Description

      Let's imagine we have a lifecycle phase where we want to bind several mojos.
      We want to force the order of execution of our mojos in this phase thus we use ordered execution IDs (00exec, 01exec, ...).

      In project's build part we define 00exec, 01exec, 02exec
      In a profile #1 we define 03exec,04exec
      In a profile #2 we define 05exec,06exec

      If I execute my build without profiles I want to see the execution of 00->01->02
      If I activate profile #1 I want to see the execution of 00->01->02->03->04
      If I activate profile #2 I want to see the execution of 00->01->02->03->04->05->06

      This the behavior we have in Maven 2.X. Any combinaison of profiles will ensure executions are ordered following IDs order

      In Maven 3.x it is no more the case.
      Without profile we have 00->01->02 (GREAT)
      With Profile 1 activate we have : 03->04->00->01->02 ( )
      With Profile 1 & 2 activate we have : 05->06->03->04->00->01->02 ( )

      I attach a simple testcase with an antrun to show the problem.
      Just play with mvn package and profiles profile1 & profile2

      Note that the order depends also of the order of profiles declaration in the POM in M3
      If profile1 is defined before profile 2 I have 05->06->03->04->00->01->02
      If profile2 is defined before profile 1 I have 03->04->05->06->00->01->02

      1. pom.xml
        4 kB
        Arnaud Heritier

        Issue Links

          Activity

          Hide
          Benjamin Bentmann added a comment -

          Just to clarify, plugin executions are not ordered by their IDs, only the declaration order in the POM matters.

          Show
          Benjamin Bentmann added a comment - Just to clarify, plugin executions are not ordered by their IDs, only the declaration order in the POM matters.
          Hide
          Arnaud Heritier added a comment -

          thus it is impossible with this rule to sort them across profiles ?
          .. and it worked with maven2. Thus if consider it is specification and note a bug we have to document this change. WDYT ?

          Show
          Arnaud Heritier added a comment - thus it is impossible with this rule to sort them across profiles ? .. and it worked with maven2. Thus if consider it is specification and note a bug we have to document this change. WDYT ?
          Hide
          Arnaud Heritier added a comment -

          Ok, thus for readers I confirm Benjamin's assertion.
          I misunderstood the order of plugin executions inside a phase : They have to follow the order in the POM. Thus if I put profile 2 before profile 1, with maven 2.X and both profiles activated I have 00->01->02->05->06->03->04
          Thus there is a bug in Maven 3, in my sample build executions (00,01,02) should always be executed before profiles executions but it won't follow execution IDs (they could be 46, 32, 57)
          Note that in an inheritance chain child executions are always done after parent executions

          Show
          Arnaud Heritier added a comment - Ok, thus for readers I confirm Benjamin's assertion. I misunderstood the order of plugin executions inside a phase : They have to follow the order in the POM. Thus if I put profile 2 before profile 1, with maven 2.X and both profiles activated I have 00->01->02->05->06->03->04 Thus there is a bug in Maven 3, in my sample build executions (00,01,02) should always be executed before profiles executions but it won't follow execution IDs (they could be 46, 32, 57) Note that in an inheritance chain child executions are always done after parent executions
          Hide
          Benjamin Bentmann added a comment -

          Fixed in r1059192.

          Show
          Benjamin Bentmann added a comment - Fixed in r1059192 .

            People

            • Assignee:
              Benjamin Bentmann
              Reporter:
              Arnaud Heritier
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: