You are viewing a plain text version of this content. The canonical link for it is here.
Posted to site-commits@maven.apache.org by sj...@apache.org on 2023/11/07 22:03:59 UTC

svn commit: r1913661 [14/30] - in /maven/website/components/plugin-testing-archives/LATEST: ./ css/ fonts/ js/ maven-plugin-testing-harness/ maven-plugin-testing-harness/apidocs/ maven-plugin-testing-harness/apidocs/legal/ maven-plugin-testing-harness/...

Modified: maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/cpd.html
==============================================================================
--- maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/cpd.html (original)
+++ maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/cpd.html Tue Nov  7 22:03:57 2023
@@ -2,8 +2,8 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.11.1 from org.apache.maven.plugins:maven-pmd-plugin:3.19.0:cpd at 2023-02-15
- | Rendered using Apache Maven Fluido Skin 1.11.1
+ | Generated by Apache Maven Doxia Site Renderer 1.11.1 from org.apache.maven.plugins:maven-pmd-plugin:3.21.0:cpd at 2023-11-07
+ | Rendered using Apache Maven Fluido Skin 1.11.2
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
@@ -11,10 +11,10 @@
     <meta name="viewport" content="width=device-width, initial-scale=1" />
     <meta name="generator" content="Apache Maven Doxia Site Renderer 1.11.1" />
     <title>Maven Plugin Testing Mechanism &#x2013; CPD Results</title>
-    <link rel="stylesheet" href="./css/apache-maven-fluido-1.11.1.min.css" />
+    <link rel="stylesheet" href="./css/apache-maven-fluido-1.11.2.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
-    <script src="./js/apache-maven-fluido-1.11.1.min.js"></script>
+    <script src="./js/apache-maven-fluido-1.11.2.min.js"></script>
 
     <!-- Matomo -->
     <script>
@@ -44,14 +44,13 @@
 
         <div id="breadcrumbs">
           <ul class="breadcrumb">
-      <li class=""><a href="https://www.apache.org/" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
-      <li class=""><a href="../../index.html" title="Maven">Maven</a><span class="divider">/</span></li>
-      <li class=""><a href="http://maven.apache.org/index.html" class="externalLink" title="Maven">Maven</a><span class="divider">/</span></li>
-      <li class=""><a href="http://maven.apache.org/plugin-testing/index.html" class="externalLink" title="Plugin Testing">Plugin Testing</a><span class="divider">/</span></li>
-      <li class=""><a href="index.html" title="Maven Plugin Testing Mechanism">Maven Plugin Testing Mechanism</a><span class="divider">/</span></li>
+      <li><a href="https://www.apache.org/" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
+      <li><a href="../../index.html" title="Maven">Maven</a><span class="divider">/</span></li>
+      <li><a href="../index.html" title="Maven Plugin Testing">Maven Plugin Testing</a><span class="divider">/</span></li>
+      <li><a href="index.html" title="Maven Plugin Testing Mechanism">Maven Plugin Testing Mechanism</a><span class="divider">/</span></li>
     <li class="active ">CPD Results</li>
-        <li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2023-02-15</li>
-          <li id="projectVersion" class="pull-right">Version: 4.0.0-alpha-1</li>
+        <li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2023-11-07</li>
+          <li id="projectVersion" class="pull-right">Version: 4.0.0-alpha-2</li>
           </ul>
         </div>
       </header>
@@ -74,7 +73,7 @@
     <li><a href="project-info.html" title="Project Information"><span class="icon-chevron-right"></span>Project Information</a></li>
     <li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-down"></span>Project Reports</a>
      <ul class="nav nav-list">
-      <li><a href="surefire-report.html" title="Surefire Report"><span class="none"></span>Surefire Report</a></li>
+      <li><a href="surefire-report.html" title="Surefire"><span class="none"></span>Surefire</a></li>
       <li><a href="checkstyle.html" title="Checkstyle"><span class="none"></span>Checkstyle</a></li>
       <li class="active"><a><span class="none"></span>CPD</a></li>
       <li><a href="pmd.html" title="PMD"><span class="none"></span>PMD</a></li>
@@ -84,22 +83,27 @@
       <li><a href="apidocs/index.html" title="Javadoc"><span class="none"></span>Javadoc</a></li>
      </ul></li>
    <li class="nav-header">Maven Projects</li>
-    <li><a href="../../archetype/index.html" title="Archetype"><span class="none"></span>Archetype</a></li>
-    <li><a href="../../resolver/index.html" title="Artifact Resolver"><span class="none"></span>Artifact Resolver</a></li>
-    <li><a href="../../doxia/index.html" title="Doxia"><span class="none"></span>Doxia</a></li>
-    <li><a href="../../extensions/index.html" title="Extensions"><span class="none"></span>Extensions</a></li>
-    <li><a href="../../jxr/index.html" title="JXR"><span class="none"></span>JXR</a></li>
     <li><a href="../../ref/current" title="Maven"><span class="none"></span>Maven</a></li>
+    <li><a href="../../archetypes/index.html" title="Archetypes"><span class="none"></span>Archetypes</a></li>
+    <li><a href="../../extensions/index.html" title="Extensions"><span class="none"></span>Extensions</a></li>
     <li><a href="../../pom/index.html" title="Parent POMs"><span class="none"></span>Parent POMs</a></li>
     <li><a href="../../plugins/index.html" title="Plugins"><span class="none"></span>Plugins</a></li>
-    <li><a href="../index.html" title="Plugin Testing"><span class="none"></span>Plugin Testing</a></li>
-    <li><a href="../../plugin-tools/index.html" title="Plugin Tools"><span class="none"></span>Plugin Tools</a></li>
-    <li><a href="../../apache-resource-bundles/index.html" title="Resource Bundles"><span class="none"></span>Resource Bundles</a></li>
-    <li><a href="../../scm/index.html" title="SCM"><span class="none"></span>SCM</a></li>
-    <li><a href="../../shared/index.html" title="Shared Components"><span class="none"></span>Shared Components</a></li>
     <li><a href="../../skins/index.html" title="Skins"><span class="none"></span>Skins</a></li>
-    <li><a href="../../surefire/index.html" title="Surefire"><span class="none"></span>Surefire</a></li>
-    <li><a href="../../wagon/index.html" title="Wagon"><span class="none"></span>Wagon</a></li>
+    <li><a href="" title=""><span class="icon-chevron-down"></span></a>
+     <ul class="nav nav-list">
+      <li><a href="../../archetype/index.html" title="Archetype"><span class="none"></span>Archetype</a></li>
+      <li><a href="../../resolver/index.html" title="Artifact Resolver"><span class="none"></span>Artifact Resolver</a></li>
+      <li><a href="../../doxia/index.html" title="Doxia"><span class="none"></span>Doxia</a></li>
+      <li><a href="../../maven-indexer/index.html" title="Indexer"><span class="none"></span>Indexer</a></li>
+      <li><a href="../../jxr/index.html" title="JXR"><span class="none"></span>JXR</a></li>
+      <li><a href="../index.html" title="Plugin Testing"><span class="none"></span>Plugin Testing</a></li>
+      <li><a href="../../plugin-tools/index.html" title="Plugin Tools"><span class="none"></span>Plugin Tools</a></li>
+      <li><a href="../../apache-resource-bundles/index.html" title="Resource Bundles"><span class="none"></span>Resource Bundles</a></li>
+      <li><a href="../../scm/index.html" title="SCM"><span class="none"></span>SCM</a></li>
+      <li><a href="../../shared/index.html" title="Shared Components"><span class="none"></span>Shared Components</a></li>
+      <li><a href="../../surefire/index.html" title="Surefire"><span class="none"></span>Surefire</a></li>
+      <li><a href="../../wagon/index.html" title="Wagon"><span class="none"></span>Wagon</a></li>
+     </ul></li>
    <li class="nav-header">ASF</li>
     <li><a href="https://www.apache.org/foundation/how-it-works.html" class="externalLink" title="How Apache Works"><span class="none"></span>How Apache Works</a></li>
     <li><a href="https://www.apache.org/foundation/" class="externalLink" title="Foundation"><span class="none"></span>Foundation</a></li>
@@ -119,22 +123,255 @@
         </header>
         <main id="bodyColumn"  class="span10" >
 <section>
-<h2><a name="CPD_Results"></a>CPD Results</h2>
-<p>The following document contains the results of PMD's  <a class="externalLink" href="https://pmd.github.io/latest/pmd_userdocs_cpd.html">CPD</a> 6.49.0.</p></section><section>
-<h2><a name="Duplications"></a>Duplications</h2>
+<h2><a name="CPD_Results"></a>CPD Results</h2><a name="CPD_Results"></a>
+<p>The following document contains the results of PMD's  <a class="externalLink" href="https://pmd.github.io/latest/pmd_userdocs_cpd.html">CPD</a> 6.55.0.</p><section>
+<h3><a name="Duplications"></a>Duplications</h3><a name="Duplications"></a>
 <table border="0" class="table table-striped">
 <tr class="a">
 <th>File</th>
 <th>Line</th></tr>
 <tr class="b">
-<td>org/apache/maven/api/plugin/testing/ResolverExpressionEvaluatorStub.java</td>
+<td align="left">org/apache/maven/api/plugin/testing/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L320">320</a></td></tr>
+<tr class="a">
+<td align="left">org/apache/maven/plugin/testing/junit5/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/junit5/MojoExtension.html#L343">343</a></td></tr>
+<tr class="b">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">}
+
+    /**
+     * sometimes the parent element might contain the correct value so generalize that access
+     *
+     * TODO find out where this is probably done elsewhere
+     */
+    private static String resolveFromRootThenParent(Xpp3Dom pluginPomDom, String element) throws Exception {
+        return Optional.ofNullable(child(pluginPomDom, element).orElseGet(() -&gt; child(pluginPomDom, &quot;parent&quot;)
+                        .flatMap(e -&gt; child(e, element))
+                        .orElse(null)))
+                .map(Xpp3Dom::getValue)
+                .orElseThrow(() -&gt; new Exception(&quot;unable to determine &quot; + element));
+    }
+
+    /**
+     * Convenience method to obtain the value of a variable on a mojo that might not have a getter.
+     * &lt;br&gt;
+     * NOTE: the caller is responsible for casting to what the desired type is.
+     */
+    public static Object getVariableValueFromObject(Object object, String variable) throws IllegalAccessException {
+        Field field = ReflectionUtils.getFieldByNameIncludingSuperclasses(variable, object.getClass());
+        field.setAccessible(true);
+        return field.get(object);
+    }
+
+    /**
+     * Convenience method to obtain all variables and values from the mojo (including its superclasses)
+     * &lt;br&gt;
+     * Note: the values in the map are of type Object so the caller is responsible for casting to desired types.
+     */
+    public static Map&lt;String, Object&gt; getVariablesAndValuesFromObject(Object object) throws IllegalAccessException {
+        return getVariablesAndValuesFromObject(object.getClass(), object);
+    }
+
+    /**
+     * Convenience method to obtain all variables and values from the mojo (including its superclasses)
+     * &lt;br&gt;
+     * Note: the values in the map are of type Object so the caller is responsible for casting to desired types.
+     *
+     * @return map of variable names and values
+     */
+    public static Map&lt;String, Object&gt; getVariablesAndValuesFromObject(Class&lt;?&gt; clazz, Object object)
+            throws IllegalAccessException {
+        Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();
+        Field[] fields = clazz.getDeclaredFields();
+        AccessibleObject.setAccessible(fields, true);
+        for (Field field : fields) {
+            map.put(field.getName(), field.get(object));
+        }
+        Class&lt;?&gt; superclass = clazz.getSuperclass();
+        if (!Object.class.equals(superclass)) {
+            map.putAll(getVariablesAndValuesFromObject(superclass, object));
+        }
+        return map;
+    }
+
+    /**
+     * Convenience method to set values to variables in objects that don't have setters
+     */
+    public static void setVariableValueToObject(Object object, String variable, Object value)
+            throws IllegalAccessException {
+        Field field = ReflectionUtils.getFieldByNameIncludingSuperclasses(variable, object.getClass());
+        Objects.requireNonNull(field, &quot;Field &quot; + variable + &quot; not found&quot;);
+        field.setAccessible(true);
+        field.set(object, value);
+    }
+
+    static class WrapEvaluator implements TypeAwareExpressionEvaluator {
+
+        private final PlexusContainer container;
+        private final TypeAwareExpressionEvaluator evaluator;
+
+        WrapEvaluator(PlexusContainer container, TypeAwareExpressionEvaluator evaluator) {
+            this.container = container;
+            this.evaluator = evaluator;
+        }
+
+        @Override
+        public Object evaluate(String expression) throws ExpressionEvaluationException {
+            return evaluate(expression, null);
+        }
+
+        @Override
+        public Object evaluate(String expression, Class&lt;?&gt; type) throws ExpressionEvaluationException {
+            Object value = evaluator.evaluate(expression, type);
+            if (value == null) {
+                String expr = stripTokens(expression);
+                if (expr != null) {
+                    try {
+                        value = container.lookup(type, expr);
+                    } catch (ComponentLookupException e) {
+                        // nothing
+                    }
+                }
+            }
+            return value;
+        }
+
+        private String stripTokens(String expr) {
+            if (expr.startsWith(&quot;${&quot;) &amp;&amp; expr.endsWith(&quot;}&quot;)) {
+                return expr.substring(2, expr.length() - 1);
+            }
+            return null;
+        }
+
+        @Override
+        public File alignToBaseDirectory(File path) {
+            return evaluator.alignToBaseDirectory(path);
+        }
+    }
+}</pre></div></td></tr></table>
+<table border="0" class="table table-striped">
+<tr class="a">
+<th>File</th>
+<th>Line</th></tr>
+<tr class="b">
+<td align="left">org/apache/maven/api/plugin/testing/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L91">91</a></td></tr>
+<tr class="a">
+<td align="left">org/apache/maven/plugin/testing/junit5/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/junit5/MojoExtension.html#L93">93</a></td></tr>
+<tr class="b">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">public class MojoExtension extends PlexusExtension implements ParameterResolver {
+
+    @Override
+    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
+            throws ParameterResolutionException {
+        return parameterContext.isAnnotated(InjectMojo.class)
+                || parameterContext.getDeclaringExecutable().isAnnotationPresent(InjectMojo.class);
+    }
+
+    @Override
+    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
+            throws ParameterResolutionException {
+        try {
+            InjectMojo injectMojo = parameterContext
+                    .findAnnotation(InjectMojo.class)
+                    .orElseGet(() -&gt; parameterContext.getDeclaringExecutable().getAnnotation(InjectMojo.class));
+
+            Set&lt;MojoParameter&gt; mojoParameters =
+                    new HashSet&lt;&gt;(parameterContext.findRepeatableAnnotations(MojoParameter.class));
+
+            Optional.ofNullable(parameterContext.getDeclaringExecutable().getAnnotation(MojoParameter.class))
+                    .ifPresent(mojoParameters::add);
+
+            Optional.ofNullable(parameterContext.getDeclaringExecutable().getAnnotation(MojoParameters.class))
+                    .map(MojoParameters::value)
+                    .map(Arrays::asList)
+                    .ifPresent(mojoParameters::addAll);
+
+            Class&lt;?&gt; holder = parameterContext.getTarget().get().getClass();
+            PluginDescriptor descriptor = extensionContext
+                    .getStore(ExtensionContext.Namespace.GLOBAL)
+                    .get(PluginDescriptor.class, PluginDescriptor.class);
+            return lookupMojo(holder, injectMojo, mojoParameters, descriptor);
+        } catch (Exception e) {
+            throw new ParameterResolutionException(&quot;Unable to resolve parameter&quot;, e);
+        }
+    }
+
+    @Override
+    public void beforeEach(ExtensionContext context) throws Exception {
+        // TODO provide protected setters in PlexusExtension
+        Field field = PlexusExtension.class.getDeclaredField(&quot;basedir&quot;);
+        field.setAccessible(true);
+        field.set(null, getBasedir());
+        field = PlexusExtension.class.getDeclaredField(&quot;context&quot;);
+        field.setAccessible(true);
+        field.set(this, context);
+
+        getContainer().addComponent(getContainer(), PlexusContainer.class.getName());
+
+        ((DefaultPlexusContainer) getContainer()).addPlexusInjector(Collections.emptyList(), binder -&gt; {
+            binder.install(ProviderMethodsModule.forObject(context.getRequiredTestInstance()));
+            binder.requestInjection(context.getRequiredTestInstance());
+            binder.bind(Log.class).toInstance(new DefaultLog(LoggerFactory.getLogger(&quot;anonymous&quot;)));</pre></div></td></tr></table>
+<table border="0" class="table table-striped">
+<tr class="a">
+<th>File</th>
+<th>Line</th></tr>
+<tr class="b">
+<td align="left">org/apache/maven/api/plugin/testing/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L164">164</a></td></tr>
+<tr class="a">
+<td align="left">org/apache/maven/plugin/testing/junit5/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/junit5/MojoExtension.html#L189">189</a></td></tr>
+<tr class="b">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">}
+
+    protected String getPluginDescriptorLocation() {
+        return &quot;META-INF/maven/plugin.xml&quot;;
+    }
+
+    private Mojo lookupMojo(
+            Class&lt;?&gt; holder,
+            InjectMojo injectMojo,
+            Collection&lt;MojoParameter&gt; mojoParameters,
+            PluginDescriptor descriptor)
+            throws Exception {
+        String goal = injectMojo.goal();
+        String pom = injectMojo.pom();
+        String[] coord = mojoCoordinates(goal);
+        Xpp3Dom pomDom;
+        if (pom.startsWith(&quot;file:&quot;)) {
+            Path path = Paths.get(getBasedir()).resolve(pom.substring(&quot;file:&quot;.length()));
+            pomDom = Xpp3DomBuilder.build(ReaderFactory.newXmlReader(path.toFile()));
+        } else if (pom.startsWith(&quot;classpath:&quot;)) {
+            URL url = holder.getResource(pom.substring(&quot;classpath:&quot;.length()));
+            if (url == null) {
+                throw new IllegalStateException(&quot;Unable to find pom on classpath: &quot; + pom);
+            }
+            pomDom = Xpp3DomBuilder.build(ReaderFactory.newXmlReader(url.openStream()));
+        } else if (pom.contains(&quot;&lt;project&gt;&quot;)) {
+            pomDom = Xpp3DomBuilder.build(new StringReader(pom));
+        } else {
+            Path path = Paths.get(getBasedir()).resolve(pom);
+            pomDom = Xpp3DomBuilder.build(ReaderFactory.newXmlReader(path.toFile()));
+        }</pre></div></td></tr></table>
+<table border="0" class="table table-striped">
+<tr class="a">
+<th>File</th>
+<th>Line</th></tr>
+<tr class="b">
+<td align="left">org/apache/maven/api/plugin/testing/ResolverExpressionEvaluatorStub.java</td>
 <td><a href="./xref/org/apache/maven/api/plugin/testing/ResolverExpressionEvaluatorStub.html#L52">52</a></td></tr>
 <tr class="a">
-<td>org/apache/maven/plugin/testing/ResolverExpressionEvaluatorStub.java</td>
+<td align="left">org/apache/maven/plugin/testing/ResolverExpressionEvaluatorStub.java</td>
 <td><a href="./xref/org/apache/maven/plugin/testing/ResolverExpressionEvaluatorStub.html#L37">37</a></td></tr>
-<tr class="b"><td colspan='2'>
-<div>
-<pre>public Object evaluate(String expr, Class&lt;?&gt; type) throws ExpressionEvaluationException {
+<tr class="b">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">public Object evaluate(String expr, Class&lt;?&gt; type) throws ExpressionEvaluationException {
 
         Object value = null;
 
@@ -166,14 +403,85 @@
 <th>File</th>
 <th>Line</th></tr>
 <tr class="b">
-<td>org/apache/maven/api/plugin/testing/MojoExtension.java</td>
-<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L357">357</a></td></tr>
+<td align="left">org/apache/maven/api/plugin/testing/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L144">144</a></td></tr>
+<tr class="a">
+<td align="left">org/apache/maven/plugin/testing/junit5/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/junit5/MojoExtension.html#L148">148</a></td></tr>
+<tr class="b">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">binder.bind(Log.class).toInstance(new DefaultLog(LoggerFactory.getLogger(&quot;anonymous&quot;)));
+        });
+
+        Map&lt;Object, Object&gt; map = getContainer().getContext().getContextData();
+
+        ClassLoader classLoader = context.getRequiredTestClass().getClassLoader();
+        try (InputStream is = Objects.requireNonNull(
+                        classLoader.getResourceAsStream(getPluginDescriptorLocation()),
+                        &quot;Unable to find plugin descriptor: &quot; + getPluginDescriptorLocation());
+                Reader reader = new BufferedReader(new XmlStreamReader(is));
+                InterpolationFilterReader interpolationReader = new InterpolationFilterReader(reader, map, &quot;${&quot;, &quot;}&quot;)) {
+
+            PluginDescriptor pluginDescriptor = new PluginDescriptorBuilder().build(interpolationReader);
+
+            context.getStore(ExtensionContext.Namespace.GLOBAL).put(PluginDescriptor.class, pluginDescriptor);
+
+            for (ComponentDescriptor&lt;?&gt; desc : pluginDescriptor.getComponents()) {
+                getContainer().addComponentDescriptor(desc);
+            }
+        }
+    }</pre></div></td></tr></table>
+<table border="0" class="table table-striped">
+<tr class="a">
+<th>File</th>
+<th>Line</th></tr>
+<tr class="b">
+<td align="left">org/apache/maven/api/plugin/testing/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L201">201</a></td></tr>
+<tr class="a">
+<td align="left">org/apache/maven/plugin/testing/junit5/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/junit5/MojoExtension.html#L231">231</a></td></tr>
+<tr class="b">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">pluginConfiguration = XmlNode.merge(config, pluginConfiguration);
+        }
+        Mojo mojo = lookupMojo(coord, pluginConfiguration, descriptor);
+        return mojo;
+    }
+
+    protected String[] mojoCoordinates(String goal) throws Exception {
+        if (goal.matches(&quot;.*:.*:.*:.*&quot;)) {
+            return goal.split(&quot;:&quot;);
+        } else {
+            Path pluginPom = Paths.get(getBasedir(), &quot;pom.xml&quot;);
+            Xpp3Dom pluginPomDom = Xpp3DomBuilder.build(ReaderFactory.newXmlReader(pluginPom.toFile()));
+            String artifactId = pluginPomDom.getChild(&quot;artifactId&quot;).getValue();
+            String groupId = resolveFromRootThenParent(pluginPomDom, &quot;groupId&quot;);
+            String version = resolveFromRootThenParent(pluginPomDom, &quot;version&quot;);
+            return new String[] {groupId, artifactId, version, goal};
+        }
+    }
+
+    /**
+     * lookup the mojo while we have all the relevent information
+     */
+    protected Mojo lookupMojo(String[] coord, XmlNode pluginConfiguration, PluginDescriptor descriptor)</pre></div></td></tr></table>
+<table border="0" class="table table-striped">
+<tr class="a">
+<th>File</th>
+<th>Line</th></tr>
+<tr class="b">
+<td align="left">org/apache/maven/api/plugin/testing/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L362">362</a></td></tr>
 <tr class="a">
-<td>org/apache/maven/plugin/testing/AbstractMojoTestCase.java</td>
-<td><a href="./xref/org/apache/maven/plugin/testing/AbstractMojoTestCase.html#L635">635</a></td></tr>
-<tr class="b"><td colspan='2'>
-<div>
-<pre>public static Map&lt;String, Object&gt; getVariablesAndValuesFromObject(Class&lt;?&gt; clazz, Object object)
+<td align="left">org/apache/maven/plugin/testing/AbstractMojoTestCase.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/AbstractMojoTestCase.html#L638">638</a></td></tr>
+<tr class="b">
+<td align="left">org/apache/maven/plugin/testing/junit5/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/junit5/MojoExtension.html#L385">385</a></td></tr>
+<tr class="a">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">public static Map&lt;String, Object&gt; getVariablesAndValuesFromObject(Class&lt;?&gt; clazz, Object object)
             throws IllegalAccessException {
         Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();
         Field[] fields = clazz.getDeclaredFields();
@@ -186,7 +494,56 @@
             map.putAll(getVariablesAndValuesFromObject(superclass, object));
         }
         return map;
-    }</pre></div></td></tr></table></section>
+    }</pre></div></td></tr></table>
+<table border="0" class="table table-striped">
+<tr class="a">
+<th>File</th>
+<th>Line</th></tr>
+<tr class="b">
+<td align="left">org/apache/maven/api/plugin/testing/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L223">223</a></td></tr>
+<tr class="a">
+<td align="left">org/apache/maven/plugin/testing/junit5/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/junit5/MojoExtension.html#L253">253</a></td></tr>
+<tr class="b">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">protected Mojo lookupMojo(String[] coord, XmlNode pluginConfiguration, PluginDescriptor descriptor)
+            throws Exception {
+        // pluginkey = groupId : artifactId : version : goal
+        Mojo mojo = lookup(Mojo.class, coord[0] + &quot;:&quot; + coord[1] + &quot;:&quot; + coord[2] + &quot;:&quot; + coord[3]);
+        for (MojoDescriptor mojoDescriptor : descriptor.getMojos()) {
+            if (Objects.equals(
+                    mojoDescriptor.getImplementation(), mojo.getClass().getName())) {
+                if (pluginConfiguration != null) {
+                    pluginConfiguration = finalizeConfig(pluginConfiguration, mojoDescriptor);
+                }
+            }
+        }
+        if (pluginConfiguration != null) {</pre></div></td></tr></table>
+<table border="0" class="table table-striped">
+<tr class="a">
+<th>File</th>
+<th>Line</th></tr>
+<tr class="b">
+<td align="left">org/apache/maven/api/plugin/testing/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/api/plugin/testing/MojoExtension.html#L308">308</a></td></tr>
+<tr class="a">
+<td align="left">org/apache/maven/plugin/testing/junit5/MojoExtension.java</td>
+<td><a href="./xref/org/apache/maven/plugin/testing/junit5/MojoExtension.html#L331">331</a></td></tr>
+<tr class="b">
+<td colspan="2" align="left">
+<div class="source"><pre class="prettyprint linenums">public static XmlNode extractPluginConfiguration(String artifactId, Xpp3Dom pomDom) throws Exception {
+        Xpp3Dom pluginConfigurationElement = child(pomDom, &quot;build&quot;)
+                .flatMap(buildElement -&gt; child(buildElement, &quot;plugins&quot;))
+                .map(MojoExtension::children)
+                .orElseGet(Stream::empty)
+                .filter(e -&gt; e.getChild(&quot;artifactId&quot;).getValue().equals(artifactId))
+                .findFirst()
+                .flatMap(buildElement -&gt; child(buildElement, &quot;configuration&quot;))
+                .orElseThrow(
+                        () -&gt; new ConfigurationException(&quot;Cannot find a configuration element for a plugin with an &quot;
+                                + &quot;artifactId of &quot; + artifactId + &quot;.&quot;));
+        return pluginConfigurationElement.getDom();</pre></div></td></tr></table></section></section>
         </main>
       </div>
     </div>

Added: maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/css/apache-maven-fluido-1.11.2.min.css
==============================================================================
--- maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/css/apache-maven-fluido-1.11.2.min.css (added)
+++ maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/css/apache-maven-fluido-1.11.2.min.css Tue Nov  7 22:03:57 2023
@@ -0,0 +1,20 @@
+/*!
+ * Bootstrap v2.3.2
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.

[... 14 lines stripped ...]
Propchange: maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/css/apache-maven-fluido-1.11.2.min.css
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/css/print.css
==============================================================================
--- maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/css/print.css (original)
+++ maven/website/components/plugin-testing-archives/LATEST/maven-plugin-testing-harness/css/print.css Tue Nov  7 22:03:57 2023
@@ -17,5 +17,19 @@
  * under the License.
  */
 
-#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn {display: none !important;}
-#bodyColumn, body.docs div.docs {margin: 0 !important;border: none !important}
\ No newline at end of file
+#banner,
+#footer,
+#leftcol,
+#breadcrumbs,
+.docs #toc,
+.docs .courtesylinks,
+#leftColumn,
+#navColumn {
+  display: none !important;
+}
+
+#bodyColumn,
+body.docs div.docs {
+  margin: 0 !important;
+  border: none !important;
+}
\ No newline at end of file