clarify object vs component
diff --git a/src/main/java/org/apache/maven/demo/extension/ExecutionListenerDemo.java b/src/main/java/org/apache/maven/demo/extension/ExecutionListenerDemo.java
index a5c18cf..820525e 100644
--- a/src/main/java/org/apache/maven/demo/extension/ExecutionListenerDemo.java
+++ b/src/main/java/org/apache/maven/demo/extension/ExecutionListenerDemo.java
@@ -19,24 +19,25 @@
* under the License.
*/
-import javax.inject.Named;
-import javax.inject.Singleton;
-
import org.apache.maven.execution.AbstractExecutionListener;
import org.apache.maven.execution.ExecutionEvent;
/**
- * Execution Listener demo.
- * <b>Question:</b> how to inject it to Maven runtime? LifecycleParticipant can get original ExecutionListener from
- * request and replace with this class that should delegate to original listener (set <a href=
- * "https://maven.apache.org/ref/3.6.3/maven-embedder/xref/org/apache/maven/cli/MavenCli.html#L1446">by CLI</a> to
+ * Execution Listener demo.<br>
+ * <b>Question:</b> how to instantiate and inject it to Maven runtime?<br>
+ * <b>Answer</b>: LifecycleParticipant (injected by Plexus/Sisu) can get original ExecutionListener from
+ * request and replace with this class that should delegate to original listener<br>
+ * <b>Example</b>: Maven's <a href=
+ * "https://maven.apache.org/ref/current/maven-embedder/xref/org/apache/maven/cli/MavenCli.html#L1446">CLI</a> creates
+ * a new instance of
* <a href=
* "https://maven.apache.org/ref/current/maven-embedder/apidocs/org/apache/maven/cli/event/ExecutionEventLogger.html"
- * >ExecutionEventLogger</a> that displays to console).
+ * >ExecutionEventLogger</a> that displays to console, and calls
+ * {@code eventSpyDispatcher.chainListener(executionListener)}.
+ *
* @see org.apache.maven.execution.MavenExecutionRequest#setExecutionListener(org.apache.maven.execution.ExecutionListener)
*/
-@Named( "demo" )
-@Singleton
+// notice: just an object, not a Plexus/Sisu/JSR 330 component
public class ExecutionListenerDemo
extends AbstractExecutionListener
{
diff --git a/src/site/apt/index.apt b/src/site/apt/index.apt
index 3f7fbb9..7a64a3a 100644
--- a/src/site/apt/index.apt
+++ b/src/site/apt/index.apt
@@ -23,11 +23,11 @@
2018-07-22
-----
-Maven Extension Demo Study
+Maven Core Extension Demo Study
- Demo of Maven Extensions:
+ Demo of Maven Core Extensions:
- * classical types of extensions,
+ * classical types of core extensions,
* how to write them,
@@ -40,22 +40,25 @@
{{{./xref/}Code provided here}} demoes one specific type of extension: {{{/examples/maven-3-lifecycle-extensions.html}Maven 3 lifecycle extension}}, and
the different results obtained when injecting this extension in the different ways available.
- Maven lifecycle participation can be provided though 3 APIs:
+ Maven lifecycle participation can be provided through 3 APIs:
- [[1]] {{{/ref/current/maven-core/apidocs/index.html?org/apache/maven/execution/AbstractExecutionListener.html}<<<org.apache.maven.execution.AbstractExecutionListener>>>}},
+ [[1]] {{{/ref/current/maven-core/apidocs/org/apache/maven/execution/AbstractExecutionListener.html}<<<org.apache.maven.execution.AbstractExecutionListener>>>}} object,
+ instantiated and added to listeners like {{{/ref/current/maven-embedder/xref/org/apache/maven/cli/MavenCli.html#L1446}Maven CLI does}} using
+ internal {{{/ref/current/maven-core/apidocs/org/apache/maven/eventspy/internal/EventSpyDispatcher.html}<<<eventSpyDispatcher.chainListener(executionListener)>>> API}}
+ ({{{https://maven.apache.org/ref/current/maven-core/xref/org/apache/maven/eventspy/internal/EventSpyDispatcher.html}source}}) or copying the small implementation,
- [[2]] {{{/ref/current/maven-core/apidocs/index.html?org/apache/maven/AbstractMavenLifecycleParticipant.html}<<<org.apache.maven.AbstractMavenLifecycleParticipant>>>}},
+ [[2]] {{{/ref/current/maven-core/apidocs/org/apache/maven/AbstractMavenLifecycleParticipant.html}<<<org.apache.maven.AbstractMavenLifecycleParticipant>>>}} Plexus/Sisu/JSR-330 component,
- [[3]] {{{/ref/current/maven-core/apidocs/index.html?org/apache/maven/eventspy/AbstractEventSpy.html}<<<org.apache.maven.eventspy.AbstractEventSpy>>>}}.
+ [[3]] {{{/ref/current/maven-core/apidocs/org/apache/maven/eventspy/AbstractEventSpy.html}<<<org.apache.maven.eventspy.AbstractEventSpy>>>}} Plexus/Sisu/JSR-330 component.
[]
This study implements each API (see {{{./apidocs/}javadoc}}) then tests implementations in ITs that configure the extension in different ways:
- verification done after IT execution check expected differences (see {{{/invoker-report.html}ITs results}}).
+ verification done after IT execution checks expected differences (see {{{./invoker-report.html}ITs results}}).
-* Classical Types of Extensions
+* Classical Types of Core Extensions
- A Maven extension is a library that goes into
+ A Maven core extension is a library that goes into
{{{/guides/mini/guide-maven-classloading.html#Core_Classloader}Maven Core classloader}}, then is really in the core execution of Maven, unlike
a plugin that runs in a child classloader separated from other plugins.
@@ -69,12 +72,11 @@
[]
-* Configuring Maven Extensions
+* Configuring Maven Core Extensions
There are multiple methods available to declare a library as an extension:
- [[1]] classical POM's {{{/ref/current/maven-model/maven.html#class_build}<<<project.build.extensions.extension>>>}} or
- {{{/ref/current/maven-model/maven.html#class_plugin}<<<project.build.plugins.plugin.extensions>>>}} (since Maven 2),
+ [[1]] classical POM's {{{/ref/current/maven-model/maven.html#class_build}<<<project.build.extensions.extension>>>}} (since Maven 2),
[[2]] put jars in Maven <<<$\{maven.home\}/lib>>> (since Maven 2) or <<<$\{maven.home\}/lib/ext>>> (since Maven 3),
@@ -87,7 +89,7 @@
Declaring an extension in POM is the most classical and flexible way to do: the only drawback is that the extension
is activated after POM reading, which can be too late for some very specific use cases like
- {{{https://maven.apache.org/ref/current/maven-core/apidocs/org/apache/maven/eventspy/package-summary.html}EventSpy}}.
+ {{{/ref/current/maven-core/apidocs/org/apache/maven/eventspy/package-summary.html}EventSpy}}.
Installing an extension directly inside Maven installation avoids the previous limitation, but is not flexible.