mavenphase

When Maven executes phase or goal or lifecycle?


When I was reading about Maven goals, phases on Stack Overflow, I came across two links in which one says:

when you execute maven you can specify a goal or a phase.

What is the difference/relation between maven goals and phases?

and the other says:

You can't call the life-cycle-phase itself but you can call the goals of the plugins which are bound to the life-cycle-phases.

Executing a specific Maven phase

Which one is right? Or am I not understanding it?

Also can some give me simple examples Maven executing lifecycle/phase/goal. And also Maven knows that it has to run phase or a goal? E.g. when I say mvn install, is it install phase or goal?


Solution

  • Bombya Bo,

    Think of Maven build life cycle like a fancy meal which has sequential phases:

    A goal is the actual food being served during that phase.

    In this analogy:

    If you like the house defaults, then you can just order the first N courses off the fixed menu:

    "I'll take the 2 course meal"
    $ mvn compile
    

    You'll get everything up to and including the main course (ie gazpacho followed by steak+gravy+fries).

    Calling a single goal is the equivalent of ordering a la carte:

    "I'll take a Cobb salad plus the 2 course meal"
    $ mvn javadoc:javadoc compile
    

    If you want that goal to become a permanent addition to the menu, then add it to the pom file. That brings us back to calling:

    $ mvn compile
    

    which results in gazpacho+Cobb, followed by steak+gravy+fries.

    A last point about binding a goal to a phase.

    By default, each goal will run during a certain phase (Cobb salad usually served as a starter). But you can override the phase binding, which is like telling the waiter "I'll have a Cobb salad, but bring it at the same time as the main"

    Hope this clarifies the intuition behind goals vs. phases.