You've got it exactly right.
Maven builds are usually oriented around the concept of a lifecycle,
which consists of phases in a specific order. Each phase has zero or
more mojos (usually called goals) bound to it. Each phase in the
lifecycle implies all of the phases that come before it. This allows
users to bind (or configure) different goals to different phases of
the build, then the standard phase names to run the build. The
default goals for a given type of project are also bound to the
lifecycle in this way, but behind the scenes, such that the user can
supplement these default goals using configurations in the pom.xml.
So, if you have a jar project (<packaging>jar</packaging>), you might
have something like this:
Phase Goals
-------- -----------
validate (none)
initialize (none)
...
compile org.apache.maven.plugins:maven-compiler-
plugin:compile
...
test org.apache.maven.plugins:maven-surefire-
plugin:test
...
package org.apache.maven.plugins:maven-jar-plugin:jar
...
install org.apache.maven.plugins:maven-install-
plugin:install
...
etc.
Now, if you just want to compile your project, you simply call the
'compile' phase, like this:
mvn compile
If you want to run the unit tests, call this:
mvn test
Note that in order to run unit tests, you must have compiled your
project's main sources. That's handled here, since the test phase is
later in the lifecycle than the compile phase...'test' implies
'compile' and all the other phases (in order) that come before 'test'.
On the other hand, Maven also supports certain one-off goals that are
usually meant to help manage the project build in certain special
cases, or give information about the build. One such example gives
you a glimpse of the POM after all inheritance and profile injection
has been completed:
mvn help:effective-pom
which is shorthand for:
mvn org.apache.maven.plugins:maven-help-plugin:effective-pom
Hope that helps,
-john
On Feb 7, 2008, at 4:50 PM, Dhruva Reddy wrote:
I know this seems like a silly thing to post on here, but...
What exactly is a goal and what is a phase? I can't find a good
answer in the documentation and there's a lot of seemingly
conflicting information out there.
My current understanding is that a phase is a part of a lifecycle
(process-resources, compile, etc). A goal is somewhat analogous to
an ANT-task, but with a focus on what should happen, rather than
how it is done.
Can someone clear this up for me, giving examples?
Thanks,
Dhruva
---
John Casey
Committer and PMC Member, Apache Maven
mail: jdcasey at commonjava dot org
blog: http://www.ejlife.net/blogs/john
rss: http://feeds.feedburner.com/ejlife/john