Author: brett
Date: Wed Jun 15 23:47:21 2005
New Revision: 190880
URL: http://svn.apache.org/viewcvs?rev=190880&view=rev
Log:
finish lifecycle doco
Modified:
maven/components/trunk/maven-site/src/site/apt/lifecycle.apt
maven/components/trunk/maven-site/src/site/site.xml
Modified: maven/components/trunk/maven-site/src/site/apt/lifecycle.apt
URL:
http://svn.apache.org/viewcvs/maven/components/trunk/maven-site/src/site/apt/lifecycle.apt?rev=190880&r1=190879&r2=190880&view=diff
==============================================================================
--- maven/components/trunk/maven-site/src/site/apt/lifecycle.apt (original)
+++ maven/components/trunk/maven-site/src/site/apt/lifecycle.apt Wed Jun 15
23:47:21 2005
@@ -8,6 +8,8 @@
Build Lifecycle
+ <<PLEASE NOTE:>> this documentation is current only as of alpha-3, and is
not yet completely implemented, even in Subversion.
+
* Build Lifecycle Basics
Maven 2.0 is based around the central concept of a build lifecycle. What
this means is that the process for building
@@ -117,7 +119,7 @@
<modelVersion>4.0.0</modelVersion>
</configuration>
<goals>
- <goal>modello:java</goal>
+ <goal>java</goal>
</goals>
</execution>
</executions>
@@ -150,7 +152,7 @@
<file>${project.output.directory}/timestamp.txt</file>
</configuration>
<goals>
- <goal>touch:timestamp</goal>
+ <goal>timestamp</goal>
</goals>
</execution>
</executions>
@@ -270,7 +272,98 @@
** Forking a Parallel Lifecycle
- TODO
+ While lots of mojos will participate in the standard lifecycle, there are
just as many that are used in other
+ scenarios. These are mojos that are executed standalone from the command
line (such as <<<idea:idea>>>), or individual
+ reports in the site building process.
+
+ However, sometimes these goals require that a particular task has already
been performed - for instance, the IDEA
+ plugin must ensure sources have been generated to properly construct its
module files. If the goal were participating
+ in the lifecycle, it would easily do this by ensuring it occurred after the
phase it depended on having run. Since
+ this isn't the case, it must have a way to first execute that task.
+
+ Additionally, even goals participating in the build lifecycle might need to
perform a task with different parameters
+ to what was already used, and does not want the output to affect the current
build (for example, running
+ <<<clover:check>>> to run tests with modified sources and fail if a certain
coverage ratio is not achieved).
+
+ For these reasons, mojos are capable of forking a new lifecycle. The
lifecycle will be a normal build lifecycle,
+ a clone of the one currently being used (including any additional bindings
from the POM), executed up until the point
+ specified by the mojo.
+
+ For example, the <<<idea:idea>>> mojo specifies the following in the mojo
level declarations to call the source
+ generation:
+
+----
[EMAIL PROTECTED] phase="generate-sources"
+----
+
+ But what happens if <<<generate-sources>>> has already been run in this
build? In the current version of Maven, there
+ is no way to tell if the previous execution used the same input and outputs
as the current mojo requires, so the task
+ (and any preceding ones if from the lifecycle) must be run again.
+
+ For this reason, it is important that if your plugin does any intensive
work, you should first check whether it is
+ necessary to perform the tasks again, perhaps by using timestamp checking or
a similar technique. As an example,
+ the compiler plugin will only recompile changed source files so can very
efficiently be run multiple times in a build
+ if necessary.
+
+ When the lifecycle is forked, the project object being used is also cloned.
In this way, modifications made to the
+ project as part of the execution, such as the addition of a new source root,
will not affect the original build.
+ When the lifecycle finishes executing and control is passed to the original
mojo, it can access that project using
+ the expression <<<${executedProject}>>>. For example:
+
+----
+/**
+ * @parameter expression="${executedProject}"
+ */
+private MavenProject executedProject;
+----
+
+ This project instance can be used by the mojo to obtain results, and
propogate any changes it sees fit into the
+ original build.
+
+ Finally, when forking the new lifecycle, it is possible to augment it on top
of the changes already made by the
+ packaging and the plugins in the POM.
+
+ For example, consider the Clover plugin. If <<<clover:check>>> were to be
run from the command line, the plugin
+ would need to fork the lifecycle, executing the <<<test>>> phase. But, it
would also need to add some configuration
+ and bind the <<<clover:compiler>>> goal to the <<<generate-sources>>> phase.
+
+ This can be achieved by including the following file as
<<<META-INF/maven/lifecycle.xml>>> in the plugin JAR:
+
+----
+<lifecycles>
+ <lifecycle>
+ <id>clover</id>
+ <phases>
+ <phase>
+ <id>generate-sources</id>
+ <executions>
+ <execution>
+ <configuration>
+ <debug>true</debug>
+ <goals>
+ <goal>clover:compiler</goal>
+ </goals>
+ </configuration>
+ </execution>
+ </executions>
+ </phase>
+ </phases>
+ </lifecycle>
+</lifecycles>
+----
+
+ Here, the <<<executions>>> element is present in a similar way to a plugin
declaration in the POM. This can be used
+ to bind a goal one or more times to a particular phase, as well as
specifying configuration. Note that configuration
+ already provided in the POM to that plugin that is not part of a specific
execution will also be applied.
+
+ The lifecycle ID given here, <<<clover>>> can then be used in the mojo to
specify what to overlay on the forked
+ lifecycle when executing it, using the following mojo level declaration:
+
+----
[EMAIL PROTECTED] phase="test" lifecycle="clover"
+----
+ For more information about plugin development in general, see the
+ {{{developers/plugin-overview.html} Developer's Section}}.
Modified: maven/components/trunk/maven-site/src/site/site.xml
URL:
http://svn.apache.org/viewcvs/maven/components/trunk/maven-site/src/site/site.xml?rev=190880&r1=190879&r2=190880&view=diff
==============================================================================
--- maven/components/trunk/maven-site/src/site/site.xml (original)
+++ maven/components/trunk/maven-site/src/site/site.xml Wed Jun 15 23:47:21 2005
@@ -25,6 +25,7 @@
</menu>
<menu name="User's Guide">
<item name="Getting Started" href="/getting-started.html"/>
+ <item name="Build Lifecycle" href="/lifecycle.html" />
<item name="Configuration" href="/configuration.html"/>
<item name="Dependency Mechanism" href="/dependencies.html"/>
<item name="Developing Plugins" href="/developers/plugin-overview.html"/>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]