File project.diff of Package maven-compiler-plugin

--- maven-compiler-plugin-bootstrap-resources.patch.orig
+++ maven-compiler-plugin-bootstrap-resources.patch
@@ -1,11 +1,12 @@
---- maven-compiler-plugin-3.14.1/src/main/filtered-resources/META-INF/maven/org.apache.maven.plugins/maven-compiler-plugin/plugin-help.xml	1970-01-01 01:00:00.000000000 +0100
-+++ maven-compiler-plugin-3.14.1/src/main/filtered-resources/META-INF/maven/org.apache.maven.plugins/maven-compiler-plugin/plugin-help.xml	2025-09-21 13:30:11.742960611 +0200
-@@ -0,0 +1,1195 @@
+diff -urEbwBN a/src/main/filtered-resources/META-INF/maven/org.apache.maven.plugins/maven-compiler-plugin/plugin-help.xml b/src/main/filtered-resources/META-INF/maven/org.apache.maven.plugins/maven-compiler-plugin/plugin-help.xml
+--- a/src/main/filtered-resources/META-INF/maven/org.apache.maven.plugins/maven-compiler-plugin/plugin-help.xml	1970-01-01 01:00:00.000000000 +0100
++++ b/src/main/filtered-resources/META-INF/maven/org.apache.maven.plugins/maven-compiler-plugin/plugin-help.xml	2025-10-19 13:33:47.817564416 +0200
+@@ -0,0 +1,1243 @@
 +<?xml version="1.0" encoding="UTF-8"?>
 +
-+<!-- Generated by maven-plugin-tools 3.15 (for help mojo with limited elements)-->
++<!-- Generated by maven-plugin-tools 4.0 (for help mojo with limited elements)-->
 +
-+<plugin>
++<plugin xmlns="http://maven.apache.org/PLUGIN/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:location="http://maven.apache.org/PLUGIN/2.0.0 https://maven.apache.org/xsd/plugin-2.0.0.xsd">
 +  <name>${project.name}</name>
 +  <description>${project.description}</description>
 +  <groupId>${project.groupId}</groupId>
@@ -15,32 +16,26 @@
 +  <mojos>
 +    <mojo>
 +      <goal>compile</goal>
-+      <description>Compiles application sources. By default uses the javac &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&gt; compiler of the JDK used to execute Maven. This can be overwritten through Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; or parameter compilerId.
++      <description>Compiles application sources. Each instance shall be used only once, then discarded.
 +See also: javac Command &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&gt;</description>
-+      <requiresDependencyResolution>compile</requiresDependencyResolution>
-+      <requiresDirectInvocation>false</requiresDirectInvocation>
-+      <requiresProject>true</requiresProject>
-+      <requiresReports>false</requiresReports>
++      <directInvocationOnly>false</directInvocationOnly>
++      <projectRequired>true</projectRequired>
 +      <aggregator>false</aggregator>
-+      <requiresOnline>false</requiresOnline>
++      <onlineRequired>false</onlineRequired>
 +      <inheritedByDefault>true</inheritedByDefault>
 +      <phase>compile</phase>
 +      <implementation>org.apache.maven.plugin.compiler.CompilerMojo</implementation>
 +      <language>java</language>
-+      <instantiationStrategy>per-lookup</instantiationStrategy>
-+      <executionStrategy>once-per-session</executionStrategy>
 +      <since>2.0</since>
-+      <threadSafe>true</threadSafe>
 +      <parameters>
 +        <parameter>
 +          <name>annotationProcessorPaths</name>
 +          <type>java.util.List&lt;org.apache.maven.plugin.compiler.DependencyCoordinate&gt;</type>
 +          <since>3.5</since>
++          <deprecated>Replaced by ordinary dependencies with &lt;type&gt; element set to processor, classpath-processor or modular-processor.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Classpath elements to supply as annotation processor path. If specified, the compiler will detect annotation processors only in those classpath elements. If omitted, the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors.
-+
++          <description>Classpath elements to supply as annotation processor path. If specified, the compiler will detect annotation processors only in those classpath elements. If omitted (and proc is set to only or full), the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors. Since JDK 23 by default no annotation processing is performed as long as no processors is listed for security reasons. Therefore, you should always list the desired processors using this configuration element or annotationProcessorPaths. 
 +Each classpath element is specified using their Maven coordinates (groupId, artifactId, version, classifier, type). Transitive dependencies are added automatically. Exclusions are supported as well. Example:
 +&lt;configuration&gt; &lt;annotationProcessorPaths&gt; &lt;path&gt; &lt;groupId&gt;org.sample&lt;/groupId&gt; &lt;artifactId&gt;sample-annotation-processor&lt;/artifactId&gt; &lt;version&gt;1.2.3&lt;/version&gt; &lt;!-- Optional - taken from dependency management if not specified --&gt; &lt;!-- Optionally exclude transitive dependencies --&gt; &lt;exclusions&gt; &lt;exclusion&gt; &lt;groupId&gt;org.sample&lt;/groupId&gt; &lt;artifactId&gt;sample-dependency&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;/exclusions&gt; &lt;/path&gt; &lt;!-- ... more ... --&gt; &lt;/annotationProcessorPaths&gt; &lt;/configuration&gt; Note: Exclusions are supported from version 3.11.0.
 +See also: javac -processorpath &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor-path&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
@@ -49,13 +44,13 @@
 +          <name>annotationProcessorPathsUseDepMgmt</name>
 +          <type>boolean</type>
 +          <since>3.12.0</since>
++          <deprecated>This flag is ignored. Replaced by ordinary dependencies with &lt;type&gt; element set to processor, classpath-processor or modular-processor.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Whether to use the Maven dependency management section when resolving transitive dependencies of annotation processor paths.
-+
++          <description>Whether to use the Maven dependency management section when resolving transitive dependencies of annotation processor paths. 
 +This flag does not enable / disable the ability to resolve the version of annotation processor paths from dependency management section. It only influences the resolution of transitive dependencies of those top-level paths.
 +</description>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>annotationProcessors</name>
@@ -63,17 +58,16 @@
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Names of annotation processors to run. Only applies to JDK 1.6+ If not set, the default annotation processors discovery process applies.
-+
-+See also: javac -processor &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <description>Class names of annotation processors to run. If not set, the default annotation processors discovery process applies. If set, the value will be appended to the -processor compiler option.
++See also: proc</description>
 +        </parameter>
 +        <parameter>
 +          <name>compileSourceRoots</name>
 +          <type>java.util.List&lt;java.lang.String&gt;</type>
-+          <required>true</required>
++          <deprecated>Replaced by the project-wide &lt;sources&gt; element.</deprecated>
++          <required>false</required>
 +          <editable>true</editable>
-+          <description>The source directories containing the sources to be compiled.</description>
++          <description>The root directories containing the source files to be compiled. If null or empty, the directories will be obtained from the &lt;Source&gt; elements declared in the project. If non-empty, the project &lt;Source&gt; elements are ignored. This configuration option should be used only when there is a need to override the project configuration.</description>
 +        </parameter>
 +        <parameter>
 +          <name>compilerArgs</name>
@@ -81,69 +75,53 @@
 +          <since>3.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to the compiler.
-+
-+Note that -J options are only passed through if fork is set to true.
-+Example: &lt;compilerArgs&gt; &lt;arg&gt;-Xmaxerrs&lt;/arg&gt; &lt;arg&gt;1000&lt;/arg&gt; &lt;arg&gt;-Xlint&lt;/arg&gt; &lt;arg&gt;-J-Duser.language=en_us&lt;/arg&gt; &lt;/compilerArgs&gt; 
++          <description>Additional arguments to be passed verbatim to the Java compiler. This parameter can be used when the Maven compiler plugin does not provide a parameter for a Java compiler option. It may happen, for example, for new or preview Java features which are not yet handled by this compiler plugin. 
++If an option has a value, the option and the value shall be specified in two separated &lt;arg&gt; elements. For example, the -Xmaxerrs 1000 option (for setting the maximal number of errors to 1000) can be specified as below (together with other options):
++&lt;compilerArgs&gt; &lt;arg&gt;-Xlint&lt;/arg&gt; &lt;arg&gt;-Xmaxerrs&lt;/arg&gt; &lt;arg&gt;1000&lt;/arg&gt; &lt;arg&gt;J-Duser.language=en_us&lt;/arg&gt; &lt;/compilerArgs&gt; Note that -J options should be specified only if fork is set to true. Other options can be specified regardless the fork value. The compiler plugin does not verify whether the arguments given through this parameter are valid. For this reason, the other parameters provided by the compiler plugin should be preferred when they exist, because the plugin checks whether the corresponding options are supported.
 +See also: javac -J &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J&gt;</description>
 +        </parameter>
 +        <parameter>
 +          <name>compilerArgument</name>
 +          <type>java.lang.String</type>
++          <deprecated>Use compilerArgs instead.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the unformatted single argument string to be passed to the compiler. To pass multiple arguments such as -Xmaxerrs 1000 (which are actually two arguments) you have to use compilerArgs.
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+
-+Note that -J options are only passed through if fork is set to true.
++          <description>The single argument string to be passed to the compiler. To pass multiple arguments such as -Xmaxerrs 1000 (which are actually two arguments), compilerArgs is preferred. 
++Note that -J options should be specified only if fork is set to true.
 +
 +See also: javac -J &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J&gt;</description>
 +        </parameter>
 +        <parameter>
-+          <name>compilerArguments</name>
-+          <type>java.util.Map&lt;java.lang.String, java.lang.String&gt;</type>
-+          <since>2.0.1</since>
-+          <deprecated>use compilerArgs instead.</deprecated>
-+          <required>false</required>
-+          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to the compiler (prepending a dash).
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+
-+Note that -J options are only passed through if fork is set to true.
-+
-+To pass -Xmaxerrs 1000 -Xlint -Xlint:-path -Averbose=true you should include the following:
-+&lt;compilerArguments&gt; &lt;Xmaxerrs&gt;1000&lt;/Xmaxerrs&gt; &lt;Xlint/&gt; &lt;Xlint:-path/&gt; &lt;Averbose&gt;true&lt;/Averbose&gt; &lt;/compilerArguments&gt; </description>
-+        </parameter>
-+        <parameter>
 +          <name>compilerId</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The compiler id of the compiler to use. See this guide for more information.</description>
++          <description>Identifier of the compiler to use. This identifier shall match the identifier of a compiler known to the JDK tool chain, or the JavaCompiler#name() name of a javax.tools.JavaCompiler instance registered as a service findable by java.util.ServiceLoader. See this guide for more information. If unspecified, then the system Java compiler is used. The identifier of the system Java compiler is usually javac.
++See also: fork, executable, JavaCompiler#name()</description>
++          <expression>${maven.compiler.compilerId}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>compilerReuseStrategy</name>
 +          <type>java.lang.String</type>
 +          <since>2.5</since>
++          <deprecated>Not supported anymore. The reuse of javax.tools.JavaFileManager instance is plugin implementation details.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Strategy to re use javacc class created: 
-+* reuseCreated (default): will reuse already created but in case of multi-threaded builds, each thread will have its own instance 
-+* reuseSame: the same Javacc class will be used for each compilation even for multi-threaded build 
-+* alwaysNew: a new Javacc class will be created for each compilation Note this parameter value depends on the os/jdk you are using, but the default value should work on most of env.</description>
++          <description>Strategy to re use javacc class created. Legal values are: 
++* reuseCreated (default) – will reuse already created but in case of multi-threaded builds, each thread will have its own instance. 
++* reuseSame – the same Javacc class will be used for each compilation even for multi-threaded build. 
++* alwaysNew – a new Javacc class will be created for each compilation. Note this parameter value depends on the OS/JDK you are using, but the default value should work on most of env.</description>
++          <expression>${maven.compiler.compilerReuseStrategy}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>compilerVersion</name>
 +          <type>java.lang.String</type>
-+          <deprecated>This parameter is no longer evaluated by the underlying compilers, instead the actual version of the javac binary is automatically retrieved.</deprecated>
++          <deprecated>This parameter is no longer used by the underlying compilers.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Version of the compiler to use, ex. &quot;1.3&quot;, &quot;1.5&quot;, if fork is set to true.</description>
++          <description>Version of the compiler to use if fork is set to true. Examples! &quot;1.3&quot;, &quot;1.5&quot;.
++See also: fork</description>
++          <expression>${maven.compiler.compilerVersion}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>createMissingPackageInfoClass</name>
@@ -151,15 +129,23 @@
 +          <since>3.10</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Package info source files that only contain javadoc and no annotation on the package can lead to no class file being generated by the compiler. This causes a file miss on the next compilations and forces an unnecessary recompilation. The default value of true causes an empty class file to be generated. This behavior can be changed by setting this parameter to false.</description>
++          <description>Whether to generate package-info.class even when empty. By default, package info source files that only contain javadoc and no annotation on the package can lead to no class file being generated by the compiler. It may cause a file miss on build systems that check for file existence in order to decide what to recompile. 
++If true, the -Xpkginfo:always compiler option is added if the compiler supports that extra option. If the extra option is not supported, then a warning is logged and no option is added to the compiler arguments.
++
++See also: incrementalCompilation</description>
++          <expression>${maven.compiler.createMissingPackageInfoClass}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debug</name>
 +          <type>boolean</type>
++          <deprecated>Setting this flag to false is replaced by &lt;debuglevel&gt;none&lt;/debuglevel&gt;.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to include debugging information in the compiled class files.
-+See also: javac -g &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g&gt;, debuglevel</description>
++          <description>Whether to include debugging information in the compiled class files. The amount of debugging information to include is specified by the debuglevel parameter. If this debug flag is true, then the -g option may be added to compiler arguments with a value determined by the debuglevel argument. If this debug flag is false, then the -g:none option will be added to the compiler arguments.
++See also: debuglevel, javac -g &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g&gt;</description>
++          <expression>${maven.compiler.debug}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debugFileName</name>
@@ -167,7 +153,10 @@
 +          <since>3.10.0</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>When both fork and debug are enabled the commandline arguments used will be dumped to this file.</description>
++          <description>The file where to dump the command-line when debug is activated or when the compilation failed. For example, if the value is &quot;javac&quot;, then the Java compiler can be launched from the command-line by typing javac @target/javac.args. The debug file will contain the compiler options together with the list of source files to compile. 
++By default, this debug file is written only if the compilation of main code failed. The writing of the debug files can be forced by setting the verbose flag to true or by specifying the --verbose option to Maven on the command-line.
++</description>
++          <defaultValue>javac.args</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debuglevel</name>
@@ -175,8 +164,13 @@
 +          <since>2.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Keyword list to be appended to the -g command-line switch. Legal values are none or a comma-separated list of the following keywords: lines, vars, and source. If debug level is not specified, by default, nothing will be appended to -g. If debug is not turned on, this attribute will be ignored.
-+See also: javac -G:[lines,vars,source] &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom&gt;</description>
++          <description>Kinds of debugging information to include in the compiled class files. Legal values are lines, vars, source, all and none. Values other than all and none can be combined in a comma-separated list. 
++If debug level is not specified, then the -g option will not be added, which means that the default debugging information will be generated (typically lines and source but not vars).
++
++If debug level is all, then only the -g option is added, which means that all debugging information will be generated. If debug level is anything else, then the comma-separated list of keywords is appended to the -g command-line switch.
++
++See also: javac -g:[lines,vars,source] &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom&gt;</description>
++          <expression>${maven.compiler.debuglevel}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>enablePreview</name>
@@ -184,8 +178,10 @@
 +          <since>3.10.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to enable preview language features of the java compiler
++          <description>Whether to enable preview language features of the java compiler. If true, then the --enable-preview option will be added to compiler arguments.
 +See also: javac --enable-preview &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-enable-preview&gt;</description>
++          <expression>${maven.compiler.enablePreview}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>encoding</name>
@@ -195,20 +191,24 @@
 +          <editable>true</editable>
 +          <description>The -encoding argument for the Java compiler.
 +See also: javac -encoding &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-encoding&gt;</description>
++          <expression>${encoding}</expression>
++          <defaultValue>${project.build.sourceEncoding}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>excludes</name>
 +          <type>java.util.Set&lt;java.lang.String&gt;</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of exclusion filters for the compiler.</description>
++          <description>A set of exclusion filters for the compiler.</description>
 +        </parameter>
 +        <parameter>
 +          <name>executable</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the executable of the compiler to use when fork is true.</description>
++          <description>Executable of the compiler to use when fork is true. If this parameter is specified, then the jdkToolchain is ignored.
++See also: jdkToolchain, fork, compilerId</description>
++          <expression>${maven.compiler.executable}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>failOnError</name>
@@ -216,7 +216,10 @@
 +          <since>2.0.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Indicates whether the build will continue even if there are compilation errors.</description>
++          <description>Whether the build will stop if there are compilation errors.
++See also: failOnWarning</description>
++          <expression>${maven.compiler.failOnError}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>failOnWarning</name>
@@ -224,49 +227,60 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Indicates whether the build will continue even if there are compilation warnings.</description>
++          <description>Whether the build will stop if there are compilation warnings. If true, then the -Werror option will be added to compiler arguments.
++See also: showWarnings, showDeprecation</description>
++          <expression>${maven.compiler.failOnWarning}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>fileExtensions</name>
-+          <type>java.util.Set&lt;java.lang.String&gt;</type>
++          <type>java.util.List&lt;java.lang.String&gt;</type>
 +          <since>3.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>File extensions to check timestamp for incremental build.</description>
++          <description>File extensions to check timestamp for incremental build. Default contains only class and jar. TODO: Rename with a name making clearer that this parameter is about incremental build.
++See also: incrementalCompilation</description>
++          <defaultValue>class,jar</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>forceJavacCompilerUse</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.0</since>
-+          <deprecated>Use forceLegacyJavacApi instead</deprecated>
++          <deprecated>Ignored because java.lang.Compiler has been deprecated and removed from the JDK.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Legacy parameter name of forceLegacyJavacApi. Only considered if forceLegacyJavacApi is not set or false.</description>
++          <description>Whether to use legacy compiler API.</description>
++          <expression>${maven.compiler.forceJavacCompilerUse}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>forceLegacyJavacApi</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.13</since>
++          <deprecated>Ignored because the compiler plugin now always use the javax.tools API.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The underlying compiler now uses javax.tools API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html&gt; if available in your current JDK. Set this to true to always use the legacy com.sun.tools.javac API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html&gt; instead. 
-+This only has an effect for compilerId being javac and fork being false.
-+</description>
++          <description>Whether to use the legacy com.sun.tools.javac API instead of javax.tools API.
++See also: New API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html&gt;, Legacy API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html&gt;</description>
++          <expression>${maven.compiler.forceLegacyJavacApi}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>fork</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Allows running the compiler in a separate process. If false it uses the built in compiler, while if true it will use an executable.</description>
++          <description>Allows running the compiler in a separate process. If false, the plugin uses the built-in compiler, while if true it will use an executable.
++See also: executable, compilerId, meminitial, maxmem</description>
++          <expression>${maven.compiler.fork}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>generatedSourcesDirectory</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Specify where to place generated source files created by annotation processing. Only applies to JDK 1.6+</description>
++          <description>Specify where to place generated source files created by annotation processing.</description>
++          <defaultValue>${project.build.directory}/generated-sources/annotations</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>implicit</name>
@@ -274,15 +288,52 @@
 +          <since>3.10.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Keyword to be appended to the -implicit: command-line switch.
++          <description>Whether to generate class files for implicitly referenced files. If set, the value will be appended to the -implicit: compiler option. Standard values are: 
++* class – automatically generates class files. 
++* none – suppresses class file generation. 
 +See also: javac -implicit &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-implicit&gt;</description>
++          <expression>${maven.compiler.implicit}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>includes</name>
 +          <type>java.util.Set&lt;java.lang.String&gt;</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of inclusion filters for the compiler.</description>
++          <description>A set of inclusion filters for the compiler.</description>
++        </parameter>
++        <parameter>
++          <name>incrementalCompilation</name>
++          <type>java.lang.String</type>
++          <since>4.0.0</since>
++          <required>false</required>
++          <editable>true</editable>
++          <description>The algorithm to use for selecting which files to compile. Values can be dependencies, sources, classes, rebuild-on-change, rebuild-on-add, modules or none. 
++options: recompile all source files if the compiler options changed. Changes are detected on a best-effort basis only.
++
++dependencies: recompile all source files if at least one dependency (JAR file) changed since the last build. This check is based on the last modification times of JAR files.
++
++sources: recompile source files modified since the last build. In addition, if a source file has been deleted, then all source files are recompiled. This check is based on the modification times of source files rather than the modification times of the *.class files.
++
++classes: recompile source files (*.java) associated to no output file (*.class) or associated to an output file older than the source. This algorithm does not check if a source file has been removed, potentially leaving non-recompiled classes with references to classes that no longer exist.
++
++The sources and classes values are partially redundant, doing the same work in different ways. It is usually not necessary to specify those two values.
++
++modules: recompile modules and let the compiler decides which individual files to recompile. The compiler plugin does not enumerate the source files to recompile (actually, it does not scan at all the source directories). Instead, it only specifies the module to recompile using the --module option. The Java compiler will scan the source directories itself and compile only those source files that are newer than the corresponding files in the output directory.
++
++rebuild-on-add: modifier for recompiling all source files when the addition of a new file is detected. This flag is effective only when used together with sources or classes. When used with classes, it provides a way to detect class renaming (this is not needed with sources for detecting renaming).
++
++rebuild-on-change: modifier for recompiling all source files when a change is detected in at least one source file. This flag is effective only when used together with sources or classes. It does not rebuild when a new source file is added without change in other files, unless rebuild-on-add is also specified.
++
++none: the compiler plugin unconditionally specifies all sources to the Java compiler. This option is mutually exclusive with all other incremental compilation options.
++
++Limitations
++In all cases, the current compiler-plugin does not detect structural changes other than file addition or removal. For example, the plugin does not detect whether a method has been removed in a class. 
++Default value
++The default value depends on the context. If there is no annotation processor, then the default is &quot;options,dependencies,sources&quot;. It means that a full rebuild will be done if the compiler options or the dependencies changed, or if a source file has been deleted. Otherwise, only the modified source files will be recompiled. 
++If an annotation processor is present (e.g., proc set to a value other than &quot;none&quot;), then the default value is same as above with the addition of &quot;rebuild-on-add,rebuild-on-change&quot;. It means that a full rebuild will be done if any kind of change is detected.
++
++See also: staleMillis, fileExtensions, showCompilationChanges, createMissingPackageInfoClass</description>
++          <expression>${maven.compiler.incrementalCompilation}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>incrementalExcludes</name>
@@ -290,7 +341,9 @@
 +          <since>3.11</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of exclusion filters for the incremental calculation.</description>
++          <description>A set of exclusion filters for the incremental calculation. Updated source files, if excluded by this filter, will not cause the project to be rebuilt. 
++Limitation
++In the current implementation, those exclusion filters are applied for added or removed files, but not yet for removed files.</description>
 +        </parameter>
 +        <parameter>
 +          <name>jdkToolchain</name>
@@ -298,9 +351,8 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Specify the requirements for this jdk toolchain for using a different javac than the one of the JRE used by Maven. This overrules the toolchain selected by the maven-toolchain-plugin &lt;https://maven.apache.org/plugins/maven-toolchains-plugin/&gt;.
-+(see Guide to Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; for more info) &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;11&lt;/version&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;1.8&lt;/version&gt; &lt;vendor&gt;zulu&lt;/vendor&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; note: requires at least Maven 3.3.1</description>
++          <description>Requirements for this JDK toolchain for using a different javac than the one of the JDK used by Maven. This overrules the toolchain selected by the maven-toolchain-plugin &lt;https://maven.apache.org/plugins/maven-toolchains-plugin/&gt;. See Guide to Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; for more info. &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;11&lt;/version&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;1.8&lt;/version&gt; &lt;vendor&gt;zulu&lt;/vendor&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; 
++See also: fork, executable</description>
 +        </parameter>
 +        <parameter>
 +          <name>maxmem</name>
@@ -308,7 +360,9 @@
 +          <since>2.0.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the maximum size, in megabytes, of the memory allocation pool, ex. &quot;128&quot;, &quot;128m&quot; if fork is set to true.</description>
++          <description>Maximum size, in megabytes, of the memory allocation pool if fork is set to true. Examples: &quot;128&quot;, &quot;128M&quot;. Suffixes &quot;k&quot; (for kilobytes) and &quot;G&quot; (for gigabytes) are also accepted. If no suffix is provided, &quot;M&quot; is assumed.
++See also: fork</description>
++          <expression>${maven.compiler.maxmem}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>meminitial</name>
@@ -316,62 +370,60 @@
 +          <since>2.0.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Initial size, in megabytes, of the memory allocation pool, ex. &quot;64&quot;, &quot;64m&quot; if fork is set to true.</description>
++          <description>Initial size, in megabytes, of the memory allocation pool if fork is set to true. Examples: &quot;64&quot;, &quot;64M&quot;. Suffixes &quot;k&quot; (for kilobytes) and &quot;G&quot; (for gigabytes) are also accepted. If no suffix is provided, &quot;M&quot; is assumed.
++See also: fork</description>
++          <expression>${maven.compiler.meminitial}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>moduleVersion</name>
 +          <type>java.lang.String</type>
-+          <since>3.14.0</since>
++          <since>4.0.0</since>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>The --module-version argument for the Java compiler. This is ignored if not applicable, e.g., in non-modular projects.
 +See also: javac --module-version &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-module-version&gt;</description>
++          <expression>${maven.compiler.moduleVersion}</expression>
++          <defaultValue>${project.version}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>multiReleaseOutput</name>
 +          <type>boolean</type>
 +          <since>3.7.1</since>
++          <deprecated>Replaced by specifying the &lt;targetVersion&gt; value inside a &lt;source&gt; element.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+When set to true, the classes will be placed in META-INF/versions/${release} The release value must be set, otherwise the plugin will fail.
-+Note: A jar is only a multirelease jar if META-INF/MANIFEST.MF contains Multi-Release: true. You need to set this by configuring the maven-jar-plugin &lt;https://maven.apache.org/plugins/maven-jar-plugin/examples/manifest-customization.html&gt;. This implies that you cannot test a multirelease jar using the outputDirectory.</description>
++          <description>When set to true, the classes will be placed in META-INF/versions/${release}. 
++Note: A jar is only a multi-release jar if META-INF/MANIFEST.MF contains Multi-Release: true. You need to set this by configuring the maven-jar-plugin &lt;https://maven.apache.org/plugins/maven-jar-plugin/examples/manifest-customization.html&gt;. This implies that you cannot test a multi-release jar using the outputDirectory.
++</description>
 +        </parameter>
 +        <parameter>
 +          <name>optimize</name>
-+          <type>boolean</type>
-+          <deprecated>This property is a no-op in javac.</deprecated>
++          <type>java.lang.Boolean</type>
++          <deprecated>This property is ignored.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to optimize the compiled code using the compiler&apos;s optimization methods.</description>
-+        </parameter>
-+        <parameter>
-+          <name>outputDirectory</name>
-+          <type>java.io.File</type>
-+          <required>true</required>
-+          <editable>true</editable>
-+          <description>The directory for compiled classes. 
-+This parameter should only be modified in special cases. One example is creating a multi-release jar with a lower bytecode level (i.e. setting it to ${project.build.outputDirectory/META-INF/versions/21} or similar) in an additional execution.
-+
-+When the required bytecode level is available though an installed JDK or toolchain, it is recommended to use the &lt;release&gt; property in conjunction with the ${multiReleaseOutput} parameter instead.
-+</description>
++          <description>Whether to optimize the compiled code using the compiler&apos;s optimization methods.</description>
++          <expression>${maven.compiler.optimize}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>outputFileName</name>
 +          <type>java.lang.String</type>
++          <deprecated>Bundling many class files into a single file should be done by other plugins.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>Sets the name of the output file when compiling a set of sources to a single file. 
-+
-+expression=&quot;${project.build.finalName}&quot;</description>
++expression=&quot;${project.build.finalName}&quot;
++</description>
 +        </parameter>
 +        <parameter>
 +          <name>outputTimestamp</name>
 +          <type>java.lang.String</type>
 +          <since>3.12.0</since>
++          <deprecated>Not used by the compiler plugin since it does not generate archive.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd&apos;T&apos;HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH &lt;https://reproducible-builds.org/docs/source-date-epoch/&gt;).</description>
++          <description>Timestamp for reproducible output archive entries. It can be either formatted as ISO 8601 yyyy-MM-dd&apos;T&apos;HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH &lt;https://reproducible-builds.org/docs/source-date-epoch/&gt;).</description>
++          <defaultValue>${project.build.outputTimestamp}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>parameters</name>
@@ -379,8 +431,10 @@
 +          <since>3.6.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to generate metadata for reflection on method parameters.
++          <description>Whether to generate metadata for reflection on method parameters. If true, the -parameters option will be added to compiler arguments.
 +See also: javac -parameters &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-parameters&gt;</description>
++          <expression>${maven.compiler.parameters}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>proc</name>
@@ -388,15 +442,12 @@
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets whether annotation processing is performed or not. Only applies to JDK 1.6+ If not set, both compilation and annotation processing are performed at the same time.
-+
-+Allowed values are:
-+
-+* none - no annotation processing is performed. 
-+* only - only annotation processing is done, no compilation. 
-+* full - annotation processing and compilation. full is the default. Starting with JDK 21, this option must be set explicitly.
-+See also: javac -proc &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <description>Configures if annotation processing and/or compilation are performed by the compiler. If set, the value will be appended to the -proc: compiler option. Possible values are: 
++* none – no annotation processing is performed, only compilation is done. 
++* only – only annotation processing is done, no compilation. 
++* full – annotation processing followed by compilation is done. The default value depends on the JDK used for the build. Prior to Java 23, the default was full, so annotation processing and compilation were executed without explicit configuration. For security reasons, starting with Java 23 no annotation processing is done if neither any -processor, -processor path or -processor module are set, or either only or full is set. So literally the default is none. It is recommended to always list the annotation processors you want to execute instead of using the proc configuration, to ensure that only desired processors are executed and not any &quot;hidden&quot; (and maybe malicious).
++See also: annotationProcessors, Inside Java 2024-06-18 Quality Heads up &lt;https://inside.java/2024/06/18/quality-heads-up/&gt;, javac -proc &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <expression>${maven.compiler.proc}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>release</name>
@@ -404,178 +455,131 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The -release argument for the Java compiler, supported since Java9
-+See also: javac -release &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release&gt;</description>
++          <description>The --release argument for the Java compiler when the sources do not declare this version. The suggested way to declare the target Java release is to specify it with the sources like below: &lt;build&gt; &lt;sources&gt; &lt;source&gt; &lt;directory&gt;src/main/java&lt;/directory&gt; &lt;targetVersion&gt;17&lt;/targetVersion&gt; &lt;/source&gt; &lt;/sources&gt; &lt;/build&gt; If such &lt;targetVersion&gt; element is found, it has precedence over this release property. If a source does not declare a target Java version, then the value of this release property is used as a fallback. If omitted, the compiler will generate bytecodes for the Java version running the compiler.
++See also: javac --release &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release&gt;</description>
++          <expression>${maven.compiler.release}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>showCompilationChanges</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description></description>
++          <description>Whether to provide more details about why a module is rebuilt. This is used only if incrementalCompilation is set to something else than &quot;none&quot;.
++See also: incrementalCompilation</description>
++          <expression>${maven.compiler.showCompilationChanges}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>showDeprecation</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets whether to show source locations where deprecated APIs are used.</description>
++          <description>Whether to show source locations where deprecated APIs are used. If true, then the -deprecation option will be added to compiler arguments. That option is itself a shorthand for -Xlint:deprecation.
++See also: showWarnings, failOnWarning</description>
++          <expression>${maven.compiler.showDeprecation}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>showWarnings</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to false to disable warnings during compilation.</description>
++          <description>Whether to show compilation warnings. If false, then the -nowarn option will be added to compiler arguments. That option is itself a shorthand for -Xlint:none.
++See also: showDeprecation, failOnWarning</description>
++          <expression>${maven.compiler.showWarnings}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>skipMain</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set this to true to bypass compilation of main sources. Its use is NOT RECOMMENDED, but quite convenient on occasion.</description>
++          <description>Set this to true to bypass compilation of main sources. Its use is not recommended, but quite convenient on occasion.</description>
++          <expression>${maven.main.skip}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>skipMultiThreadWarning</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>2.5</since>
++          <deprecated>Deprecated as a consequence of compilerReuseStrategy deprecation.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description></description>
++          <expression>${maven.compiler.skipMultiThreadWarning}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>source</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+The -source argument for the Java compiler.
-+
-+NOTE: 
-+
-+Since 3.8.0 the default value has changed from 1.5 to 1.6
++          <description>The --source argument for the Java compiler. 
++Notes:
 +
-+Since 3.9.0 the default value has changed from 1.6 to 1.7
-+
-+Since 3.11.0 the default value has changed from 1.7 to 1.8
-+
-+See also: javac -source &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source&gt;</description>
++* Since 3.8.0 the default value has changed from 1.5 to 1.6. 
++* Since 3.9.0 the default value has changed from 1.6 to 1.7. 
++* Since 3.11.0 the default value has changed from 1.7 to 1.8. 
++* Since 4.0.0-beta-2 the default value has been removed. As of Java 9, the release parameter is preferred. 
++See also: javac --source &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source&gt;</description>
++          <expression>${maven.compiler.source}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>staleMillis</name>
 +          <type>int</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the granularity in milliseconds of the last modification date for testing whether a source needs recompilation.</description>
++          <description>The granularity in milliseconds of the last modification date for testing whether a source needs recompilation.
++See also: incrementalCompilation</description>
++          <expression>${lastModGranularityMs}</expression>
++          <defaultValue>0</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>target</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+The -target argument for the Java compiler.
-+
-+NOTE: 
-+
-+Since 3.8.0 the default value has changed from 1.5 to 1.6
-+
-+Since 3.9.0 the default value has changed from 1.6 to 1.7
-+
-+Since 3.11.0 the default value has changed from 1.7 to 1.8
++          <description>The --target argument for the Java compiler. 
++Notes:
 +
-+See also: javac -target &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target&gt;</description>
++* Since 3.8.0 the default value has changed from 1.5 to 1.6. 
++* Since 3.9.0 the default value has changed from 1.6 to 1.7. 
++* Since 3.11.0 the default value has changed from 1.7 to 1.8. 
++* Since 4.0.0-beta-2 the default value has been removed. As of Java 9, the release parameter is preferred. 
++See also: javac --target &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target&gt;</description>
++          <expression>${maven.compiler.target}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>useIncrementalCompilation</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.1</since>
++          <deprecated>Replaced by incrementalCompilation. A value of true in this old property is equivalent to &quot;dependencies,sources,rebuild-on-add&quot; in the new property, and a value of false is equivalent to &quot;classes&quot;.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+to enable/disable incremental compilation feature.
-+
-+This leads to two different modes depending on the underlying compiler. The default javac compiler does the following:
-+
-+* true (default) in this mode the compiler plugin determines whether any JAR files the current module depends on have changed in the current build run; or any source file was added, removed or changed since the last compilation. If this is the case, the compiler plugin recompiles all sources. 
-+* false (not recommended) this only compiles source files which are newer than their corresponding class files, namely which have changed since the last compilation. This does not recompile other classes which use the changed class, potentially leaving them with references to methods that no longer exist, leading to errors at runtime. </description>
-+        </parameter>
-+        <parameter>
-+          <name>useModuleVersion</name>
-+          <type>boolean</type>
-+          <since>3.15.0</since>
-+          <required>false</required>
-+          <editable>true</editable>
-+          <description>Use the --module-version argument for the Java compiler. This is ignored if not applicable, e.g., in non-modular projects.
-+See also: javac --module-version &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-module-version&gt;</description>
++          <description>Whether to enable/disable incremental compilation feature.</description>
++          <expression>${maven.compiler.useIncrementalCompilation}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>verbose</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to show messages about what the compiler is doing.
++          <description>Whether to show messages about what the compiler is doing. If true, then the -verbose option will be added to compiler arguments. In addition, files such as target/javac.args will be generated even on successful compilation.
 +See also: javac -verbose &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-verbose&gt;</description>
++          <expression>${maven.compiler.verbose}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +      </parameters>
-+      <configuration>
-+        <annotationProcessorPathsUseDepMgmt implementation="boolean" default-value="false"/>
-+        <compileSourceRoots implementation="java.util.List" default-value="${project.compileSourceRoots}"/>
-+        <compilerId implementation="java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId>
-+        <compilerReuseStrategy implementation="java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
-+        <compilerVersion implementation="java.lang.String">${maven.compiler.compilerVersion}</compilerVersion>
-+        <createMissingPackageInfoClass implementation="boolean" default-value="true">${maven.compiler.createMissingPackageInfoClass}</createMissingPackageInfoClass>
-+        <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug>
-+        <debugFileName implementation="java.lang.String" default-value="javac"/>
-+        <debuglevel implementation="java.lang.String">${maven.compiler.debuglevel}</debuglevel>
-+        <enablePreview implementation="boolean" default-value="false">${maven.compiler.enablePreview}</enablePreview>
-+        <encoding implementation="java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding>
-+        <executable implementation="java.lang.String">${maven.compiler.executable}</executable>
-+        <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError>
-+        <failOnWarning implementation="boolean" default-value="false">${maven.compiler.failOnWarning}</failOnWarning>
-+        <fileExtensions implementation="java.util.Set" default-value="class,jar"/>
-+        <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
-+        <forceLegacyJavacApi implementation="boolean" default-value="false">${maven.compiler.forceLegacyJavacApi}</forceLegacyJavacApi>
-+        <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork>
-+        <generatedSourcesDirectory implementation="java.io.File" default-value="${project.build.directory}/generated-sources/annotations"/>
-+        <implicit implementation="java.lang.String">${maven.compiler.implicit}</implicit>
-+        <maxmem implementation="java.lang.String">${maven.compiler.maxmem}</maxmem>
-+        <meminitial implementation="java.lang.String">${maven.compiler.meminitial}</meminitial>
-+        <moduleVersion implementation="java.lang.String" default-value="${project.version}">${maven.compiler.moduleVersion}</moduleVersion>
-+        <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize>
-+        <outputDirectory implementation="java.io.File" default-value="${project.build.outputDirectory}">${maven.compiler.outputDirectory}</outputDirectory>
-+        <outputTimestamp implementation="java.lang.String" default-value="${project.build.outputTimestamp}"/>
-+        <parameters implementation="boolean" default-value="false">${maven.compiler.parameters}</parameters>
-+        <proc implementation="java.lang.String">${maven.compiler.proc}</proc>
-+        <release implementation="java.lang.String">${maven.compiler.release}</release>
-+        <showCompilationChanges implementation="boolean" default-value="false">${maven.compiler.showCompilationChanges}</showCompilationChanges>
-+        <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
-+        <showWarnings implementation="boolean" default-value="true">${maven.compiler.showWarnings}</showWarnings>
-+        <skipMain implementation="boolean">${maven.main.skip}</skipMain>
-+        <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
-+        <source implementation="java.lang.String" default-value="1.8">${maven.compiler.source}</source>
-+        <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis>
-+        <target implementation="java.lang.String" default-value="1.8">${maven.compiler.target}</target>
-+        <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
-+        <useModuleVersion implementation="boolean" default-value="true">${maven.compiler.useModuleVersion}</useModuleVersion>
-+        <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
-+      </configuration>
 +    </mojo>
 +    <mojo>
 +      <goal>help</goal>
-+      <description>Display help information on maven-compiler-plugin.
++      <description>Display help information on maven-compiler-plugin. 
 +Call mvn compiler:help -Ddetail=true -Dgoal=&lt;goal-name&gt; to display parameter details.</description>
-+      <requiresDirectInvocation>false</requiresDirectInvocation>
-+      <requiresProject>false</requiresProject>
-+      <requiresReports>false</requiresReports>
++      <directInvocationOnly>false</directInvocationOnly>
++      <projectRequired>false</projectRequired>
 +      <aggregator>false</aggregator>
-+      <requiresOnline>false</requiresOnline>
++      <onlineRequired>false</onlineRequired>
 +      <inheritedByDefault>true</inheritedByDefault>
 +      <implementation>org.apache.maven.plugins.maven_compiler_plugin.HelpMojo</implementation>
 +      <language>java</language>
-+      <instantiationStrategy>per-lookup</instantiationStrategy>
-+      <executionStrategy>once-per-session</executionStrategy>
-+      <threadSafe>true</threadSafe>
 +      <parameters>
 +        <parameter>
 +          <name>detail</name>
@@ -583,6 +587,8 @@
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>If true, display all settable properties for each goal.</description>
++          <expression>${detail}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>goal</name>
@@ -590,6 +596,7 @@
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>The name of the goal for which to show help. If unspecified, all goals will be displayed.</description>
++          <expression>${goal}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>indentSize</name>
@@ -597,6 +604,8 @@
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>The number of spaces per indentation level, should be positive.</description>
++          <expression>${indentSize}</expression>
++          <defaultValue>2</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>lineLength</name>
@@ -604,43 +613,33 @@
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>The maximum length of a display line, should be positive.</description>
++          <expression>${lineLength}</expression>
++          <defaultValue>80</defaultValue>
 +        </parameter>
 +      </parameters>
-+      <configuration>
-+        <detail implementation="boolean" default-value="false">${detail}</detail>
-+        <goal implementation="java.lang.String">${goal}</goal>
-+        <indentSize implementation="int" default-value="2">${indentSize}</indentSize>
-+        <lineLength implementation="int" default-value="80">${lineLength}</lineLength>
-+      </configuration>
 +    </mojo>
 +    <mojo>
 +      <goal>testCompile</goal>
-+      <description>Compiles application test sources. By default uses the javac &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&gt; compiler of the JDK used to execute Maven. This can be overwritten through Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; or parameter compilerId.
++      <description>Compiles application test sources. Each instance shall be used only once, then discarded.
 +See also: javac Command &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&gt;</description>
-+      <requiresDependencyResolution>test</requiresDependencyResolution>
-+      <requiresDirectInvocation>false</requiresDirectInvocation>
-+      <requiresProject>true</requiresProject>
-+      <requiresReports>false</requiresReports>
++      <directInvocationOnly>false</directInvocationOnly>
++      <projectRequired>true</projectRequired>
 +      <aggregator>false</aggregator>
-+      <requiresOnline>false</requiresOnline>
++      <onlineRequired>false</onlineRequired>
 +      <inheritedByDefault>true</inheritedByDefault>
 +      <phase>test-compile</phase>
 +      <implementation>org.apache.maven.plugin.compiler.TestCompilerMojo</implementation>
 +      <language>java</language>
-+      <instantiationStrategy>per-lookup</instantiationStrategy>
-+      <executionStrategy>once-per-session</executionStrategy>
 +      <since>2.0</since>
-+      <threadSafe>true</threadSafe>
 +      <parameters>
 +        <parameter>
 +          <name>annotationProcessorPaths</name>
 +          <type>java.util.List&lt;org.apache.maven.plugin.compiler.DependencyCoordinate&gt;</type>
 +          <since>3.5</since>
++          <deprecated>Replaced by ordinary dependencies with &lt;type&gt; element set to processor, classpath-processor or modular-processor.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Classpath elements to supply as annotation processor path. If specified, the compiler will detect annotation processors only in those classpath elements. If omitted, the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors.
-+
++          <description>Classpath elements to supply as annotation processor path. If specified, the compiler will detect annotation processors only in those classpath elements. If omitted (and proc is set to only or full), the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors. Since JDK 23 by default no annotation processing is performed as long as no processors is listed for security reasons. Therefore, you should always list the desired processors using this configuration element or annotationProcessorPaths. 
 +Each classpath element is specified using their Maven coordinates (groupId, artifactId, version, classifier, type). Transitive dependencies are added automatically. Exclusions are supported as well. Example:
 +&lt;configuration&gt; &lt;annotationProcessorPaths&gt; &lt;path&gt; &lt;groupId&gt;org.sample&lt;/groupId&gt; &lt;artifactId&gt;sample-annotation-processor&lt;/artifactId&gt; &lt;version&gt;1.2.3&lt;/version&gt; &lt;!-- Optional - taken from dependency management if not specified --&gt; &lt;!-- Optionally exclude transitive dependencies --&gt; &lt;exclusions&gt; &lt;exclusion&gt; &lt;groupId&gt;org.sample&lt;/groupId&gt; &lt;artifactId&gt;sample-dependency&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;/exclusions&gt; &lt;/path&gt; &lt;!-- ... more ... --&gt; &lt;/annotationProcessorPaths&gt; &lt;/configuration&gt; Note: Exclusions are supported from version 3.11.0.
 +See also: javac -processorpath &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor-path&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
@@ -649,13 +648,13 @@
 +          <name>annotationProcessorPathsUseDepMgmt</name>
 +          <type>boolean</type>
 +          <since>3.12.0</since>
++          <deprecated>This flag is ignored. Replaced by ordinary dependencies with &lt;type&gt; element set to processor, classpath-processor or modular-processor.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Whether to use the Maven dependency management section when resolving transitive dependencies of annotation processor paths.
-+
++          <description>Whether to use the Maven dependency management section when resolving transitive dependencies of annotation processor paths. 
 +This flag does not enable / disable the ability to resolve the version of annotation processor paths from dependency management section. It only influences the resolution of transitive dependencies of those top-level paths.
 +</description>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>annotationProcessors</name>
@@ -663,17 +662,16 @@
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Names of annotation processors to run. Only applies to JDK 1.6+ If not set, the default annotation processors discovery process applies.
-+
-+See also: javac -processor &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <description>Class names of annotation processors to run. If not set, the default annotation processors discovery process applies. If set, the value will be appended to the -processor compiler option.
++See also: proc</description>
 +        </parameter>
 +        <parameter>
 +          <name>compileSourceRoots</name>
 +          <type>java.util.List&lt;java.lang.String&gt;</type>
-+          <required>true</required>
++          <deprecated>Replaced by the project-wide &lt;sources&gt; element.</deprecated>
++          <required>false</required>
 +          <editable>true</editable>
-+          <description>The source directories containing the test-source to be compiled.</description>
++          <description>The root directories containing the source files to be compiled. If null or empty, the directories will be obtained from the &lt;Source&gt; elements declared in the project. If non-empty, the project &lt;Source&gt; elements are ignored. This configuration option should be used only when there is a need to override the project configuration.</description>
 +        </parameter>
 +        <parameter>
 +          <name>compilerArgs</name>
@@ -681,69 +679,53 @@
 +          <since>3.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to the compiler.
-+
-+Note that -J options are only passed through if fork is set to true.
-+Example: &lt;compilerArgs&gt; &lt;arg&gt;-Xmaxerrs&lt;/arg&gt; &lt;arg&gt;1000&lt;/arg&gt; &lt;arg&gt;-Xlint&lt;/arg&gt; &lt;arg&gt;-J-Duser.language=en_us&lt;/arg&gt; &lt;/compilerArgs&gt; 
++          <description>Additional arguments to be passed verbatim to the Java compiler. This parameter can be used when the Maven compiler plugin does not provide a parameter for a Java compiler option. It may happen, for example, for new or preview Java features which are not yet handled by this compiler plugin. 
++If an option has a value, the option and the value shall be specified in two separated &lt;arg&gt; elements. For example, the -Xmaxerrs 1000 option (for setting the maximal number of errors to 1000) can be specified as below (together with other options):
++&lt;compilerArgs&gt; &lt;arg&gt;-Xlint&lt;/arg&gt; &lt;arg&gt;-Xmaxerrs&lt;/arg&gt; &lt;arg&gt;1000&lt;/arg&gt; &lt;arg&gt;J-Duser.language=en_us&lt;/arg&gt; &lt;/compilerArgs&gt; Note that -J options should be specified only if fork is set to true. Other options can be specified regardless the fork value. The compiler plugin does not verify whether the arguments given through this parameter are valid. For this reason, the other parameters provided by the compiler plugin should be preferred when they exist, because the plugin checks whether the corresponding options are supported.
 +See also: javac -J &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J&gt;</description>
 +        </parameter>
 +        <parameter>
 +          <name>compilerArgument</name>
 +          <type>java.lang.String</type>
++          <deprecated>Use compilerArgs instead.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the unformatted single argument string to be passed to the compiler. To pass multiple arguments such as -Xmaxerrs 1000 (which are actually two arguments) you have to use compilerArgs.
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+
-+Note that -J options are only passed through if fork is set to true.
++          <description>The single argument string to be passed to the compiler. To pass multiple arguments such as -Xmaxerrs 1000 (which are actually two arguments), compilerArgs is preferred. 
++Note that -J options should be specified only if fork is set to true.
 +
 +See also: javac -J &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J&gt;</description>
 +        </parameter>
 +        <parameter>
-+          <name>compilerArguments</name>
-+          <type>java.util.Map&lt;java.lang.String, java.lang.String&gt;</type>
-+          <since>2.0.1</since>
-+          <deprecated>use compilerArgs instead.</deprecated>
-+          <required>false</required>
-+          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to the compiler (prepending a dash).
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+
-+Note that -J options are only passed through if fork is set to true.
-+
-+To pass -Xmaxerrs 1000 -Xlint -Xlint:-path -Averbose=true you should include the following:
-+&lt;compilerArguments&gt; &lt;Xmaxerrs&gt;1000&lt;/Xmaxerrs&gt; &lt;Xlint/&gt; &lt;Xlint:-path/&gt; &lt;Averbose&gt;true&lt;/Averbose&gt; &lt;/compilerArguments&gt; </description>
-+        </parameter>
-+        <parameter>
 +          <name>compilerId</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The compiler id of the compiler to use. See this guide for more information.</description>
++          <description>Identifier of the compiler to use. This identifier shall match the identifier of a compiler known to the JDK tool chain, or the JavaCompiler#name() name of a javax.tools.JavaCompiler instance registered as a service findable by java.util.ServiceLoader. See this guide for more information. If unspecified, then the system Java compiler is used. The identifier of the system Java compiler is usually javac.
++See also: fork, executable, JavaCompiler#name()</description>
++          <expression>${maven.compiler.compilerId}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>compilerReuseStrategy</name>
 +          <type>java.lang.String</type>
 +          <since>2.5</since>
++          <deprecated>Not supported anymore. The reuse of javax.tools.JavaFileManager instance is plugin implementation details.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Strategy to re use javacc class created: 
-+* reuseCreated (default): will reuse already created but in case of multi-threaded builds, each thread will have its own instance 
-+* reuseSame: the same Javacc class will be used for each compilation even for multi-threaded build 
-+* alwaysNew: a new Javacc class will be created for each compilation Note this parameter value depends on the os/jdk you are using, but the default value should work on most of env.</description>
++          <description>Strategy to re use javacc class created. Legal values are: 
++* reuseCreated (default) – will reuse already created but in case of multi-threaded builds, each thread will have its own instance. 
++* reuseSame – the same Javacc class will be used for each compilation even for multi-threaded build. 
++* alwaysNew – a new Javacc class will be created for each compilation. Note this parameter value depends on the OS/JDK you are using, but the default value should work on most of env.</description>
++          <expression>${maven.compiler.compilerReuseStrategy}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>compilerVersion</name>
 +          <type>java.lang.String</type>
-+          <deprecated>This parameter is no longer evaluated by the underlying compilers, instead the actual version of the javac binary is automatically retrieved.</deprecated>
++          <deprecated>This parameter is no longer used by the underlying compilers.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Version of the compiler to use, ex. &quot;1.3&quot;, &quot;1.5&quot;, if fork is set to true.</description>
++          <description>Version of the compiler to use if fork is set to true. Examples! &quot;1.3&quot;, &quot;1.5&quot;.
++See also: fork</description>
++          <expression>${maven.compiler.compilerVersion}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>createMissingPackageInfoClass</name>
@@ -751,15 +733,23 @@
 +          <since>3.10</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Package info source files that only contain javadoc and no annotation on the package can lead to no class file being generated by the compiler. This causes a file miss on the next compilations and forces an unnecessary recompilation. The default value of true causes an empty class file to be generated. This behavior can be changed by setting this parameter to false.</description>
++          <description>Whether to generate package-info.class even when empty. By default, package info source files that only contain javadoc and no annotation on the package can lead to no class file being generated by the compiler. It may cause a file miss on build systems that check for file existence in order to decide what to recompile. 
++If true, the -Xpkginfo:always compiler option is added if the compiler supports that extra option. If the extra option is not supported, then a warning is logged and no option is added to the compiler arguments.
++
++See also: incrementalCompilation</description>
++          <expression>${maven.compiler.createMissingPackageInfoClass}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debug</name>
 +          <type>boolean</type>
++          <deprecated>Setting this flag to false is replaced by &lt;debuglevel&gt;none&lt;/debuglevel&gt;.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to include debugging information in the compiled class files.
-+See also: javac -g &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g&gt;, debuglevel</description>
++          <description>Whether to include debugging information in the compiled class files. The amount of debugging information to include is specified by the debuglevel parameter. If this debug flag is true, then the -g option may be added to compiler arguments with a value determined by the debuglevel argument. If this debug flag is false, then the -g:none option will be added to the compiler arguments.
++See also: debuglevel, javac -g &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g&gt;</description>
++          <expression>${maven.compiler.debug}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debugFileName</name>
@@ -767,7 +757,11 @@
 +          <since>3.10.0</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>when forking and debug activated the commandline used will be dumped in this file</description>
++          <description>The file where to dump the command-line when debug is activated or when the compilation failed. For example, if the value is &quot;javac-test&quot;, then the Java compiler can be launched from the command-line by typing javac @target/javac-test.args. The debug file will contain the compiler options together with the list of source files to compile. 
++By default, this debug file is written only if the compilation of test code failed. The writing of the debug files can be forced by setting the verbose flag to true or by specifying the --verbose option to Maven on the command-line.
++
++See also: CompilerMojo.debugFileName</description>
++          <defaultValue>javac-test.args</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debuglevel</name>
@@ -775,8 +769,13 @@
 +          <since>2.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Keyword list to be appended to the -g command-line switch. Legal values are none or a comma-separated list of the following keywords: lines, vars, and source. If debug level is not specified, by default, nothing will be appended to -g. If debug is not turned on, this attribute will be ignored.
-+See also: javac -G:[lines,vars,source] &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom&gt;</description>
++          <description>Kinds of debugging information to include in the compiled class files. Legal values are lines, vars, source, all and none. Values other than all and none can be combined in a comma-separated list. 
++If debug level is not specified, then the -g option will not be added, which means that the default debugging information will be generated (typically lines and source but not vars).
++
++If debug level is all, then only the -g option is added, which means that all debugging information will be generated. If debug level is anything else, then the comma-separated list of keywords is appended to the -g command-line switch.
++
++See also: javac -g:[lines,vars,source] &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom&gt;</description>
++          <expression>${maven.compiler.debuglevel}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>enablePreview</name>
@@ -784,8 +783,10 @@
 +          <since>3.10.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to enable preview language features of the java compiler
++          <description>Whether to enable preview language features of the java compiler. If true, then the --enable-preview option will be added to compiler arguments.
 +See also: javac --enable-preview &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-enable-preview&gt;</description>
++          <expression>${maven.compiler.enablePreview}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>encoding</name>
@@ -795,13 +796,17 @@
 +          <editable>true</editable>
 +          <description>The -encoding argument for the Java compiler.
 +See also: javac -encoding &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-encoding&gt;</description>
++          <expression>${encoding}</expression>
++          <defaultValue>${project.build.sourceEncoding}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>executable</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the executable of the compiler to use when fork is true.</description>
++          <description>Executable of the compiler to use when fork is true. If this parameter is specified, then the jdkToolchain is ignored.
++See also: jdkToolchain, fork, compilerId</description>
++          <expression>${maven.compiler.executable}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>failOnError</name>
@@ -809,7 +814,10 @@
 +          <since>2.0.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Indicates whether the build will continue even if there are compilation errors.</description>
++          <description>Whether the build will stop if there are compilation errors.
++See also: failOnWarning</description>
++          <expression>${maven.compiler.failOnError}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>failOnWarning</name>
@@ -817,51 +825,61 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Indicates whether the build will continue even if there are compilation warnings.</description>
++          <description>Whether the build will stop if there are compilation warnings. If true, then the -Werror option will be added to compiler arguments.
++See also: showWarnings, showDeprecation</description>
++          <expression>${maven.compiler.failOnWarning}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>fileExtensions</name>
-+          <type>java.util.Set&lt;java.lang.String&gt;</type>
++          <type>java.util.List&lt;java.lang.String&gt;</type>
 +          <since>3.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>File extensions to check timestamp for incremental build.</description>
++          <description>File extensions to check timestamp for incremental build. Default contains only class and jar. TODO: Rename with a name making clearer that this parameter is about incremental build.
++See also: incrementalCompilation</description>
++          <defaultValue>class,jar</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>forceJavacCompilerUse</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.0</since>
-+          <deprecated>Use forceLegacyJavacApi instead</deprecated>
++          <deprecated>Ignored because java.lang.Compiler has been deprecated and removed from the JDK.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Legacy parameter name of forceLegacyJavacApi. Only considered if forceLegacyJavacApi is not set or false.</description>
++          <description>Whether to use legacy compiler API.</description>
++          <expression>${maven.compiler.forceJavacCompilerUse}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>forceLegacyJavacApi</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.13</since>
++          <deprecated>Ignored because the compiler plugin now always use the javax.tools API.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The underlying compiler now uses javax.tools API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html&gt; if available in your current JDK. Set this to true to always use the legacy com.sun.tools.javac API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html&gt; instead. 
-+This only has an effect for compilerId being javac and fork being false.
-+</description>
++          <description>Whether to use the legacy com.sun.tools.javac API instead of javax.tools API.
++See also: New API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html&gt;, Legacy API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html&gt;</description>
++          <expression>${maven.compiler.forceLegacyJavacApi}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>fork</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Allows running the compiler in a separate process. If false it uses the built in compiler, while if true it will use an executable.</description>
++          <description>Allows running the compiler in a separate process. If false, the plugin uses the built-in compiler, while if true it will use an executable.
++See also: executable, compilerId, meminitial, maxmem</description>
++          <expression>${maven.compiler.fork}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>generatedTestSourcesDirectory</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Specify where to place generated source files created by annotation processing. Only applies to JDK 1.6+
-+</description>
++          <description>Specify where to place generated source files created by annotation processing.
++See also: CompilerMojo.generatedSourcesDirectory</description>
++          <defaultValue>${project.build.directory}/generated-test-sources/test-annotations</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>implicit</name>
@@ -869,8 +887,45 @@
 +          <since>3.10.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Keyword to be appended to the -implicit: command-line switch.
++          <description>Whether to generate class files for implicitly referenced files. If set, the value will be appended to the -implicit: compiler option. Standard values are: 
++* class – automatically generates class files. 
++* none – suppresses class file generation. 
 +See also: javac -implicit &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-implicit&gt;</description>
++          <expression>${maven.compiler.implicit}</expression>
++        </parameter>
++        <parameter>
++          <name>incrementalCompilation</name>
++          <type>java.lang.String</type>
++          <since>4.0.0</since>
++          <required>false</required>
++          <editable>true</editable>
++          <description>The algorithm to use for selecting which files to compile. Values can be dependencies, sources, classes, rebuild-on-change, rebuild-on-add, modules or none. 
++options: recompile all source files if the compiler options changed. Changes are detected on a best-effort basis only.
++
++dependencies: recompile all source files if at least one dependency (JAR file) changed since the last build. This check is based on the last modification times of JAR files.
++
++sources: recompile source files modified since the last build. In addition, if a source file has been deleted, then all source files are recompiled. This check is based on the modification times of source files rather than the modification times of the *.class files.
++
++classes: recompile source files (*.java) associated to no output file (*.class) or associated to an output file older than the source. This algorithm does not check if a source file has been removed, potentially leaving non-recompiled classes with references to classes that no longer exist.
++
++The sources and classes values are partially redundant, doing the same work in different ways. It is usually not necessary to specify those two values.
++
++modules: recompile modules and let the compiler decides which individual files to recompile. The compiler plugin does not enumerate the source files to recompile (actually, it does not scan at all the source directories). Instead, it only specifies the module to recompile using the --module option. The Java compiler will scan the source directories itself and compile only those source files that are newer than the corresponding files in the output directory.
++
++rebuild-on-add: modifier for recompiling all source files when the addition of a new file is detected. This flag is effective only when used together with sources or classes. When used with classes, it provides a way to detect class renaming (this is not needed with sources for detecting renaming).
++
++rebuild-on-change: modifier for recompiling all source files when a change is detected in at least one source file. This flag is effective only when used together with sources or classes. It does not rebuild when a new source file is added without change in other files, unless rebuild-on-add is also specified.
++
++none: the compiler plugin unconditionally specifies all sources to the Java compiler. This option is mutually exclusive with all other incremental compilation options.
++
++Limitations
++In all cases, the current compiler-plugin does not detect structural changes other than file addition or removal. For example, the plugin does not detect whether a method has been removed in a class. 
++Default value
++The default value depends on the context. If there is no annotation processor, then the default is &quot;options,dependencies,sources&quot;. It means that a full rebuild will be done if the compiler options or the dependencies changed, or if a source file has been deleted. Otherwise, only the modified source files will be recompiled. 
++If an annotation processor is present (e.g., proc set to a value other than &quot;none&quot;), then the default value is same as above with the addition of &quot;rebuild-on-add,rebuild-on-change&quot;. It means that a full rebuild will be done if any kind of change is detected.
++
++See also: staleMillis, fileExtensions, showCompilationChanges, createMissingPackageInfoClass</description>
++          <expression>${maven.compiler.incrementalCompilation}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>jdkToolchain</name>
@@ -878,9 +933,8 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Specify the requirements for this jdk toolchain for using a different javac than the one of the JRE used by Maven. This overrules the toolchain selected by the maven-toolchain-plugin &lt;https://maven.apache.org/plugins/maven-toolchains-plugin/&gt;.
-+(see Guide to Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; for more info) &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;11&lt;/version&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;1.8&lt;/version&gt; &lt;vendor&gt;zulu&lt;/vendor&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; note: requires at least Maven 3.3.1</description>
++          <description>Requirements for this JDK toolchain for using a different javac than the one of the JDK used by Maven. This overrules the toolchain selected by the maven-toolchain-plugin &lt;https://maven.apache.org/plugins/maven-toolchains-plugin/&gt;. See Guide to Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; for more info. &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;11&lt;/version&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;1.8&lt;/version&gt; &lt;vendor&gt;zulu&lt;/vendor&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; 
++See also: fork, executable</description>
 +        </parameter>
 +        <parameter>
 +          <name>maxmem</name>
@@ -888,7 +942,9 @@
 +          <since>2.0.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the maximum size, in megabytes, of the memory allocation pool, ex. &quot;128&quot;, &quot;128m&quot; if fork is set to true.</description>
++          <description>Maximum size, in megabytes, of the memory allocation pool if fork is set to true. Examples: &quot;128&quot;, &quot;128M&quot;. Suffixes &quot;k&quot; (for kilobytes) and &quot;G&quot; (for gigabytes) are also accepted. If no suffix is provided, &quot;M&quot; is assumed.
++See also: fork</description>
++          <expression>${maven.compiler.maxmem}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>meminitial</name>
@@ -896,42 +952,58 @@
 +          <since>2.0.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Initial size, in megabytes, of the memory allocation pool, ex. &quot;64&quot;, &quot;64m&quot; if fork is set to true.</description>
++          <description>Initial size, in megabytes, of the memory allocation pool if fork is set to true. Examples: &quot;64&quot;, &quot;64M&quot;. Suffixes &quot;k&quot; (for kilobytes) and &quot;G&quot; (for gigabytes) are also accepted. If no suffix is provided, &quot;M&quot; is assumed.
++See also: fork</description>
++          <expression>${maven.compiler.meminitial}</expression>
++        </parameter>
++        <parameter>
++          <name>moduleVersion</name>
++          <type>java.lang.String</type>
++          <since>4.0.0</since>
++          <required>false</required>
++          <editable>true</editable>
++          <description>The --module-version argument for the Java compiler. This is ignored if not applicable, e.g., in non-modular projects.
++See also: javac --module-version &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-module-version&gt;</description>
++          <expression>${maven.compiler.moduleVersion}</expression>
++          <defaultValue>${project.version}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>optimize</name>
-+          <type>boolean</type>
-+          <deprecated>This property is a no-op in javac.</deprecated>
++          <type>java.lang.Boolean</type>
++          <deprecated>This property is ignored.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to optimize the compiled code using the compiler&apos;s optimization methods.</description>
++          <description>Whether to optimize the compiled code using the compiler&apos;s optimization methods.</description>
++          <expression>${maven.compiler.optimize}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>outputDirectory</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <required>true</required>
 +          <editable>true</editable>
-+          <description>The directory where compiled test classes go. 
-+This parameter should only be modified in special cases. See the CompilerMojo.outputDirectory for more information.
-+
-+See also: CompilerMojo.outputDirectory</description>
++          <description>The directory where compiled test classes go. This parameter should only be modified in special cases. See the CompilerMojo.outputDirectory for more information.
++See also: CompilerMojo.outputDirectory, getOutputDirectory()</description>
++          <defaultValue>${project.build.testOutputDirectory}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>outputFileName</name>
 +          <type>java.lang.String</type>
++          <deprecated>Bundling many class files into a single file should be done by other plugins.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>Sets the name of the output file when compiling a set of sources to a single file. 
-+
-+expression=&quot;${project.build.finalName}&quot;</description>
++expression=&quot;${project.build.finalName}&quot;
++</description>
 +        </parameter>
 +        <parameter>
 +          <name>outputTimestamp</name>
 +          <type>java.lang.String</type>
 +          <since>3.12.0</since>
++          <deprecated>Not used by the compiler plugin since it does not generate archive.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd&apos;T&apos;HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH &lt;https://reproducible-builds.org/docs/source-date-epoch/&gt;).</description>
++          <description>Timestamp for reproducible output archive entries. It can be either formatted as ISO 8601 yyyy-MM-dd&apos;T&apos;HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH &lt;https://reproducible-builds.org/docs/source-date-epoch/&gt;).</description>
++          <defaultValue>${project.build.outputTimestamp}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>parameters</name>
@@ -939,8 +1011,10 @@
 +          <since>3.6.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to generate metadata for reflection on method parameters.
++          <description>Whether to generate metadata for reflection on method parameters. If true, the -parameters option will be added to compiler arguments.
 +See also: javac -parameters &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-parameters&gt;</description>
++          <expression>${maven.compiler.parameters}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>proc</name>
@@ -948,15 +1022,12 @@
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets whether annotation processing is performed or not. Only applies to JDK 1.6+ If not set, both compilation and annotation processing are performed at the same time.
-+
-+Allowed values are:
-+
-+* none - no annotation processing is performed. 
-+* only - only annotation processing is done, no compilation. 
-+* full - annotation processing and compilation. full is the default. Starting with JDK 21, this option must be set explicitly.
-+See also: javac -proc &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <description>Configures if annotation processing and/or compilation are performed by the compiler. If set, the value will be appended to the -proc: compiler option. Possible values are: 
++* none – no annotation processing is performed, only compilation is done. 
++* only – only annotation processing is done, no compilation. 
++* full – annotation processing followed by compilation is done. The default value depends on the JDK used for the build. Prior to Java 23, the default was full, so annotation processing and compilation were executed without explicit configuration. For security reasons, starting with Java 23 no annotation processing is done if neither any -processor, -processor path or -processor module are set, or either only or full is set. So literally the default is none. It is recommended to always list the annotation processors you want to execute instead of using the proc configuration, to ensure that only desired processors are executed and not any &quot;hidden&quot; (and maybe malicious).
++See also: annotationProcessors, Inside Java 2024-06-18 Quality Heads up &lt;https://inside.java/2024/06/18/quality-heads-up/&gt;, javac -proc &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <expression>${maven.compiler.proc}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>release</name>
@@ -964,125 +1035,142 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The -release argument for the Java compiler, supported since Java9
-+See also: javac -release &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release&gt;</description>
++          <description>The --release argument for the Java compiler when the sources do not declare this version. The suggested way to declare the target Java release is to specify it with the sources like below: &lt;build&gt; &lt;sources&gt; &lt;source&gt; &lt;directory&gt;src/main/java&lt;/directory&gt; &lt;targetVersion&gt;17&lt;/targetVersion&gt; &lt;/source&gt; &lt;/sources&gt; &lt;/build&gt; If such &lt;targetVersion&gt; element is found, it has precedence over this release property. If a source does not declare a target Java version, then the value of this release property is used as a fallback. If omitted, the compiler will generate bytecodes for the Java version running the compiler.
++See also: javac --release &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release&gt;</description>
++          <expression>${maven.compiler.release}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>showCompilationChanges</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description></description>
++          <description>Whether to provide more details about why a module is rebuilt. This is used only if incrementalCompilation is set to something else than &quot;none&quot;.
++See also: incrementalCompilation</description>
++          <expression>${maven.compiler.showCompilationChanges}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>showDeprecation</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets whether to show source locations where deprecated APIs are used.</description>
++          <description>Whether to show source locations where deprecated APIs are used. If true, then the -deprecation option will be added to compiler arguments. That option is itself a shorthand for -Xlint:deprecation.
++See also: showWarnings, failOnWarning</description>
++          <expression>${maven.compiler.showDeprecation}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>showWarnings</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to false to disable warnings during compilation.</description>
++          <description>Whether to show compilation warnings. If false, then the -nowarn option will be added to compiler arguments. That option is itself a shorthand for -Xlint:none.
++See also: showDeprecation, failOnWarning</description>
++          <expression>${maven.compiler.showWarnings}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>skip</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set this to &apos;true&apos; to bypass compilation of test sources. Its use is NOT RECOMMENDED, but quite convenient on occasion.</description>
++          <description>Whether to bypass compilation of test sources. Its use is not recommended, but quite convenient on occasion.
++See also: CompilerMojo.skipMain</description>
++          <expression>${maven.test.skip}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>skipMultiThreadWarning</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>2.5</since>
++          <deprecated>Deprecated as a consequence of compilerReuseStrategy deprecation.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description></description>
++          <expression>${maven.compiler.skipMultiThreadWarning}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>source</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+The -source argument for the Java compiler.
-+
-+NOTE: 
++          <description>The --source argument for the Java compiler. 
++Notes:
 +
-+Since 3.8.0 the default value has changed from 1.5 to 1.6
-+
-+Since 3.9.0 the default value has changed from 1.6 to 1.7
-+
-+Since 3.11.0 the default value has changed from 1.7 to 1.8
-+
-+See also: javac -source &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source&gt;</description>
++* Since 3.8.0 the default value has changed from 1.5 to 1.6. 
++* Since 3.9.0 the default value has changed from 1.6 to 1.7. 
++* Since 3.11.0 the default value has changed from 1.7 to 1.8. 
++* Since 4.0.0-beta-2 the default value has been removed. As of Java 9, the release parameter is preferred. 
++See also: javac --source &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source&gt;</description>
++          <expression>${maven.compiler.source}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>staleMillis</name>
 +          <type>int</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the granularity in milliseconds of the last modification date for testing whether a source needs recompilation.</description>
++          <description>The granularity in milliseconds of the last modification date for testing whether a source needs recompilation.
++See also: incrementalCompilation</description>
++          <expression>${lastModGranularityMs}</expression>
++          <defaultValue>0</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>target</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+The -target argument for the Java compiler.
-+
-+NOTE: 
-+
-+Since 3.8.0 the default value has changed from 1.5 to 1.6
++          <description>The --target argument for the Java compiler. 
++Notes:
 +
-+Since 3.9.0 the default value has changed from 1.6 to 1.7
-+
-+Since 3.11.0 the default value has changed from 1.7 to 1.8
-+
-+See also: javac -target &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target&gt;</description>
++* Since 3.8.0 the default value has changed from 1.5 to 1.6. 
++* Since 3.9.0 the default value has changed from 1.6 to 1.7. 
++* Since 3.11.0 the default value has changed from 1.7 to 1.8. 
++* Since 4.0.0-beta-2 the default value has been removed. As of Java 9, the release parameter is preferred. 
++See also: javac --target &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target&gt;</description>
++          <expression>${maven.compiler.target}</expression>
++        </parameter>
++        <parameter>
++          <name>testCompilerArgs</name>
++          <type>java.util.List&lt;java.lang.String&gt;</type>
++          <since>4.0.0</since>
++          <required>false</required>
++          <editable>true</editable>
++          <description>The arguments to be passed to the test compiler. If this parameter is specified, it replaces compilerArgs. Otherwise, the compilerArgs parameter is used.
++See also: CompilerMojo#compilerArgs</description>
 +        </parameter>
 +        <parameter>
 +          <name>testCompilerArgument</name>
 +          <type>java.lang.String</type>
 +          <since>2.1</since>
++          <deprecated>Use testCompilerArgs instead.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the unformatted argument string to be passed to test compiler if fork is set to true.
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+</description>
++          <description>The single argument string to be passed to the test compiler. If this parameter is specified, it replaces compilerArgument. Otherwise, the compilerArgument parameter is used.
++See also: CompilerMojo#compilerArgument</description>
 +        </parameter>
 +        <parameter>
 +          <name>testCompilerArguments</name>
 +          <type>java.util.Map&lt;java.lang.String, java.lang.String&gt;</type>
 +          <since>2.1</since>
++          <deprecated>Replaced by testCompilerArgs for consistency with the main phase.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to test compiler (prepending a dash) if fork is set to true.
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+</description>
++          <description>The arguments to be passed to test compiler.</description>
 +        </parameter>
 +        <parameter>
 +          <name>testExcludes</name>
 +          <type>java.util.Set&lt;java.lang.String&gt;</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of exclusion filters for the compiler.</description>
++          <description>A set of exclusion filters for the compiler.
++See also: CompilerMojo.excludes</description>
 +        </parameter>
 +        <parameter>
 +          <name>testIncludes</name>
 +          <type>java.util.Set&lt;java.lang.String&gt;</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of inclusion filters for the compiler.</description>
++          <description>A set of inclusion filters for the compiler.
++See also: CompilerMojo.includes</description>
 +        </parameter>
 +        <parameter>
 +          <name>testIncrementalExcludes</name>
@@ -1090,7 +1178,8 @@
 +          <since>3.11</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of exclusion filters for the incremental calculation.</description>
++          <description>A set of exclusion filters for the incremental calculation. Updated files, if excluded by this filter, will not cause the project to be rebuilt.
++See also: CompilerMojo.incrementalExcludes</description>
 +        </parameter>
 +        <parameter>
 +          <name>testRelease</name>
@@ -1098,7 +1187,9 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>the -release argument for the test Java compiler</description>
++          <description>the --release argument for the test Java compiler
++See also: CompilerMojo#release</description>
++          <expression>${maven.compiler.testRelease}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>testSource</name>
@@ -1106,7 +1197,9 @@
 +          <since>2.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The -source argument for the test Java compiler.</description>
++          <description>The --source argument for the test Java compiler.
++See also: CompilerMojo#source</description>
++          <expression>${maven.compiler.testSource}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>testTarget</name>
@@ -1114,96 +1207,53 @@
 +          <since>2.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The -target argument for the test Java compiler.</description>
++          <description>The --target argument for the test Java compiler.
++See also: CompilerMojo#target</description>
++          <expression>${maven.compiler.testTarget}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>useIncrementalCompilation</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.1</since>
++          <deprecated>Replaced by incrementalCompilation. A value of true in this old property is equivalent to &quot;dependencies,sources,rebuild-on-add&quot; in the new property, and a value of false is equivalent to &quot;classes&quot;.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+to enable/disable incremental compilation feature.
-+
-+This leads to two different modes depending on the underlying compiler. The default javac compiler does the following:
-+
-+* true (default) in this mode the compiler plugin determines whether any JAR files the current module depends on have changed in the current build run; or any source file was added, removed or changed since the last compilation. If this is the case, the compiler plugin recompiles all sources. 
-+* false (not recommended) this only compiles source files which are newer than their corresponding class files, namely which have changed since the last compilation. This does not recompile other classes which use the changed class, potentially leaving them with references to methods that no longer exist, leading to errors at runtime. </description>
++          <description>Whether to enable/disable incremental compilation feature.</description>
++          <expression>${maven.compiler.useIncrementalCompilation}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>useModulePath</name>
 +          <type>boolean</type>
 +          <since>3.11</since>
++          <deprecated>Use &quot;claspath-jar&quot; dependency type instead, and avoid module-info.java in tests.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+When true, uses the module path when compiling with a release or target of 9+ and module-info.java or module-info.class is present. When false, always uses the class path.
-+</description>
++          <description>Whether to place the main classes on the module path when module-info is present. When false, always places the main classes on the class path. Dependencies are also placed on the class-path, unless their type is module-jar.</description>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>verbose</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to show messages about what the compiler is doing.
++          <description>Whether to show messages about what the compiler is doing. If true, then the -verbose option will be added to compiler arguments. In addition, files such as target/javac.args will be generated even on successful compilation.
 +See also: javac -verbose &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-verbose&gt;</description>
++          <expression>${maven.compiler.verbose}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +      </parameters>
-+      <configuration>
-+        <annotationProcessorPathsUseDepMgmt implementation="boolean" default-value="false"/>
-+        <compileSourceRoots implementation="java.util.List" default-value="${project.testCompileSourceRoots}"/>
-+        <compilerId implementation="java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId>
-+        <compilerReuseStrategy implementation="java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
-+        <compilerVersion implementation="java.lang.String">${maven.compiler.compilerVersion}</compilerVersion>
-+        <createMissingPackageInfoClass implementation="boolean" default-value="true">${maven.compiler.createMissingPackageInfoClass}</createMissingPackageInfoClass>
-+        <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug>
-+        <debugFileName implementation="java.lang.String" default-value="javac-test"/>
-+        <debuglevel implementation="java.lang.String">${maven.compiler.debuglevel}</debuglevel>
-+        <enablePreview implementation="boolean" default-value="false">${maven.compiler.enablePreview}</enablePreview>
-+        <encoding implementation="java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding>
-+        <executable implementation="java.lang.String">${maven.compiler.executable}</executable>
-+        <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError>
-+        <failOnWarning implementation="boolean" default-value="false">${maven.compiler.failOnWarning}</failOnWarning>
-+        <fileExtensions implementation="java.util.Set" default-value="class,jar"/>
-+        <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
-+        <forceLegacyJavacApi implementation="boolean" default-value="false">${maven.compiler.forceLegacyJavacApi}</forceLegacyJavacApi>
-+        <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork>
-+        <generatedTestSourcesDirectory implementation="java.io.File" default-value="${project.build.directory}/generated-test-sources/test-annotations"/>
-+        <implicit implementation="java.lang.String">${maven.compiler.implicit}</implicit>
-+        <maxmem implementation="java.lang.String">${maven.compiler.maxmem}</maxmem>
-+        <meminitial implementation="java.lang.String">${maven.compiler.meminitial}</meminitial>
-+        <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize>
-+        <outputDirectory implementation="java.io.File" default-value="${project.build.testOutputDirectory}"/>
-+        <outputTimestamp implementation="java.lang.String" default-value="${project.build.outputTimestamp}"/>
-+        <parameters implementation="boolean" default-value="false">${maven.compiler.parameters}</parameters>
-+        <proc implementation="java.lang.String">${maven.compiler.proc}</proc>
-+        <release implementation="java.lang.String">${maven.compiler.release}</release>
-+        <showCompilationChanges implementation="boolean" default-value="false">${maven.compiler.showCompilationChanges}</showCompilationChanges>
-+        <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
-+        <showWarnings implementation="boolean" default-value="true">${maven.compiler.showWarnings}</showWarnings>
-+        <skip implementation="boolean">${maven.test.skip}</skip>
-+        <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
-+        <source implementation="java.lang.String" default-value="1.8">${maven.compiler.source}</source>
-+        <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis>
-+        <target implementation="java.lang.String" default-value="1.8">${maven.compiler.target}</target>
-+        <testRelease implementation="java.lang.String">${maven.compiler.testRelease}</testRelease>
-+        <testSource implementation="java.lang.String">${maven.compiler.testSource}</testSource>
-+        <testTarget implementation="java.lang.String">${maven.compiler.testTarget}</testTarget>
-+        <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
-+        <useModulePath implementation="boolean" default-value="true"/>
-+        <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
-+      </configuration>
 +    </mojo>
 +  </mojos>
 +</plugin>
---- maven-compiler-plugin-3.14.1/src/main/filtered-resources/META-INF/maven/plugin.xml	1970-01-01 01:00:00.000000000 +0100
-+++ maven-compiler-plugin-3.14.1/src/main/filtered-resources/META-INF/maven/plugin.xml	2025-09-21 13:31:52.102781401 +0200
-@@ -0,0 +1,1415 @@
+diff -urEbwBN a/src/main/filtered-resources/META-INF/maven/plugin.xml b/src/main/filtered-resources/META-INF/maven/plugin.xml
+--- a/src/main/filtered-resources/META-INF/maven/plugin.xml	1970-01-01 01:00:00.000000000 +0100
++++ b/src/main/filtered-resources/META-INF/maven/plugin.xml	2025-10-19 13:34:28.393835835 +0200
+@@ -0,0 +1,1305 @@
 +<?xml version="1.0" encoding="UTF-8"?>
 +
-+<!-- Generated by maven-plugin-tools 3.15-->
++<!-- Generated by maven-plugin-tools 4.0-->
 +
-+<plugin>
++<plugin xmlns="http://maven.apache.org/PLUGIN/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:location="http://maven.apache.org/PLUGIN/2.0.0 https://maven.apache.org/xsd/plugin-2.0.0.xsd">
 +  <name>${project.name}</name>
 +  <description>${project.description}</description>
 +  <groupId>${project.groupId}</groupId>
@@ -1212,37 +1262,31 @@
 +  <goalPrefix>compiler</goalPrefix>
 +  <isolatedRealm>false</isolatedRealm>
 +  <inheritedByDefault>true</inheritedByDefault>
-+  <requiredJavaVersion>1.8</requiredJavaVersion>
-+  <requiredMavenVersion>3.6.3</requiredMavenVersion>
++  <requiredJavaVersion>17</requiredJavaVersion>
++  <requiredMavenVersion>4.0.0-rc-4</requiredMavenVersion>
 +  <mojos>
 +    <mojo>
 +      <goal>compile</goal>
-+      <description>Compiles application sources. By default uses the javac &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&gt; compiler of the JDK used to execute Maven. This can be overwritten through Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; or parameter compilerId.
++      <description>Compiles application sources. Each instance shall be used only once, then discarded.
 +See also: javac Command &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&gt;</description>
-+      <requiresDependencyResolution>compile</requiresDependencyResolution>
-+      <requiresDirectInvocation>false</requiresDirectInvocation>
-+      <requiresProject>true</requiresProject>
-+      <requiresReports>false</requiresReports>
++      <directInvocationOnly>false</directInvocationOnly>
++      <projectRequired>true</projectRequired>
 +      <aggregator>false</aggregator>
-+      <requiresOnline>false</requiresOnline>
++      <onlineRequired>false</onlineRequired>
 +      <inheritedByDefault>true</inheritedByDefault>
 +      <phase>compile</phase>
 +      <implementation>org.apache.maven.plugin.compiler.CompilerMojo</implementation>
 +      <language>java</language>
-+      <instantiationStrategy>per-lookup</instantiationStrategy>
-+      <executionStrategy>once-per-session</executionStrategy>
 +      <since>2.0</since>
-+      <threadSafe>true</threadSafe>
 +      <parameters>
 +        <parameter>
 +          <name>annotationProcessorPaths</name>
 +          <type>java.util.List</type>
 +          <since>3.5</since>
++          <deprecated>Replaced by ordinary dependencies with &lt;type&gt; element set to processor, classpath-processor or modular-processor.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Classpath elements to supply as annotation processor path. If specified, the compiler will detect annotation processors only in those classpath elements. If omitted, the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors.
-+
++          <description>Classpath elements to supply as annotation processor path. If specified, the compiler will detect annotation processors only in those classpath elements. If omitted (and proc is set to only or full), the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors. Since JDK 23 by default no annotation processing is performed as long as no processors is listed for security reasons. Therefore, you should always list the desired processors using this configuration element or annotationProcessorPaths. 
 +Each classpath element is specified using their Maven coordinates (groupId, artifactId, version, classifier, type). Transitive dependencies are added automatically. Exclusions are supported as well. Example:
 +&lt;configuration&gt; &lt;annotationProcessorPaths&gt; &lt;path&gt; &lt;groupId&gt;org.sample&lt;/groupId&gt; &lt;artifactId&gt;sample-annotation-processor&lt;/artifactId&gt; &lt;version&gt;1.2.3&lt;/version&gt; &lt;!-- Optional - taken from dependency management if not specified --&gt; &lt;!-- Optionally exclude transitive dependencies --&gt; &lt;exclusions&gt; &lt;exclusion&gt; &lt;groupId&gt;org.sample&lt;/groupId&gt; &lt;artifactId&gt;sample-dependency&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;/exclusions&gt; &lt;/path&gt; &lt;!-- ... more ... --&gt; &lt;/annotationProcessorPaths&gt; &lt;/configuration&gt; Note: Exclusions are supported from version 3.11.0.
 +See also: javac -processorpath &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor-path&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
@@ -1251,13 +1295,13 @@
 +          <name>annotationProcessorPathsUseDepMgmt</name>
 +          <type>boolean</type>
 +          <since>3.12.0</since>
++          <deprecated>This flag is ignored. Replaced by ordinary dependencies with &lt;type&gt; element set to processor, classpath-processor or modular-processor.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Whether to use the Maven dependency management section when resolving transitive dependencies of annotation processor paths.
-+
++          <description>Whether to use the Maven dependency management section when resolving transitive dependencies of annotation processor paths. 
 +This flag does not enable / disable the ability to resolve the version of annotation processor paths from dependency management section. It only influences the resolution of transitive dependencies of those top-level paths.
 +</description>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>annotationProcessors</name>
@@ -1265,38 +1309,24 @@
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Names of annotation processors to run. Only applies to JDK 1.6+ If not set, the default annotation processors discovery process applies.
-+
-+See also: javac -processor &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <description>Class names of annotation processors to run. If not set, the default annotation processors discovery process applies. If set, the value will be appended to the -processor compiler option.
++See also: proc</description>
 +        </parameter>
 +        <parameter>
 +          <name>basedir</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <required>true</required>
 +          <editable>false</editable>
 +          <description>The directory to run the compiler from if fork is true.</description>
-+        </parameter>
-+        <parameter>
-+          <name>buildDirectory</name>
-+          <type>java.io.File</type>
-+          <required>true</required>
-+          <editable>false</editable>
-+          <description>The target directory of the compiler if fork is true.</description>
-+        </parameter>
-+        <parameter>
-+          <name>compilePath</name>
-+          <type>java.util.List</type>
-+          <required>true</required>
-+          <editable>false</editable>
-+          <description></description>
++          <defaultValue>${project.basedir}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>compileSourceRoots</name>
 +          <type>java.util.List</type>
-+          <required>true</required>
++          <deprecated>Replaced by the project-wide &lt;sources&gt; element.</deprecated>
++          <required>false</required>
 +          <editable>true</editable>
-+          <description>The source directories containing the sources to be compiled.</description>
++          <description>The root directories containing the source files to be compiled. If null or empty, the directories will be obtained from the &lt;Source&gt; elements declared in the project. If non-empty, the project &lt;Source&gt; elements are ignored. This configuration option should be used only when there is a need to override the project configuration.</description>
 +        </parameter>
 +        <parameter>
 +          <name>compilerArgs</name>
@@ -1304,69 +1334,53 @@
 +          <since>3.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to the compiler.
-+
-+Note that -J options are only passed through if fork is set to true.
-+Example: &lt;compilerArgs&gt; &lt;arg&gt;-Xmaxerrs&lt;/arg&gt; &lt;arg&gt;1000&lt;/arg&gt; &lt;arg&gt;-Xlint&lt;/arg&gt; &lt;arg&gt;-J-Duser.language=en_us&lt;/arg&gt; &lt;/compilerArgs&gt; 
++          <description>Additional arguments to be passed verbatim to the Java compiler. This parameter can be used when the Maven compiler plugin does not provide a parameter for a Java compiler option. It may happen, for example, for new or preview Java features which are not yet handled by this compiler plugin. 
++If an option has a value, the option and the value shall be specified in two separated &lt;arg&gt; elements. For example, the -Xmaxerrs 1000 option (for setting the maximal number of errors to 1000) can be specified as below (together with other options):
++&lt;compilerArgs&gt; &lt;arg&gt;-Xlint&lt;/arg&gt; &lt;arg&gt;-Xmaxerrs&lt;/arg&gt; &lt;arg&gt;1000&lt;/arg&gt; &lt;arg&gt;J-Duser.language=en_us&lt;/arg&gt; &lt;/compilerArgs&gt; Note that -J options should be specified only if fork is set to true. Other options can be specified regardless the fork value. The compiler plugin does not verify whether the arguments given through this parameter are valid. For this reason, the other parameters provided by the compiler plugin should be preferred when they exist, because the plugin checks whether the corresponding options are supported.
 +See also: javac -J &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J&gt;</description>
 +        </parameter>
 +        <parameter>
 +          <name>compilerArgument</name>
 +          <type>java.lang.String</type>
++          <deprecated>Use compilerArgs instead.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the unformatted single argument string to be passed to the compiler. To pass multiple arguments such as -Xmaxerrs 1000 (which are actually two arguments) you have to use compilerArgs.
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+
-+Note that -J options are only passed through if fork is set to true.
++          <description>The single argument string to be passed to the compiler. To pass multiple arguments such as -Xmaxerrs 1000 (which are actually two arguments), compilerArgs is preferred. 
++Note that -J options should be specified only if fork is set to true.
 +
 +See also: javac -J &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J&gt;</description>
 +        </parameter>
 +        <parameter>
-+          <name>compilerArguments</name>
-+          <type>java.util.Map</type>
-+          <since>2.0.1</since>
-+          <deprecated>use compilerArgs instead.</deprecated>
-+          <required>false</required>
-+          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to the compiler (prepending a dash).
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+
-+Note that -J options are only passed through if fork is set to true.
-+
-+To pass -Xmaxerrs 1000 -Xlint -Xlint:-path -Averbose=true you should include the following:
-+&lt;compilerArguments&gt; &lt;Xmaxerrs&gt;1000&lt;/Xmaxerrs&gt; &lt;Xlint/&gt; &lt;Xlint:-path/&gt; &lt;Averbose&gt;true&lt;/Averbose&gt; &lt;/compilerArguments&gt; </description>
-+        </parameter>
-+        <parameter>
 +          <name>compilerId</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The compiler id of the compiler to use. See this guide for more information.</description>
++          <description>Identifier of the compiler to use. This identifier shall match the identifier of a compiler known to the JDK tool chain, or the JavaCompiler#name() name of a javax.tools.JavaCompiler instance registered as a service findable by java.util.ServiceLoader. See this guide for more information. If unspecified, then the system Java compiler is used. The identifier of the system Java compiler is usually javac.
++See also: fork, executable, JavaCompiler#name()</description>
++          <expression>${maven.compiler.compilerId}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>compilerReuseStrategy</name>
 +          <type>java.lang.String</type>
 +          <since>2.5</since>
++          <deprecated>Not supported anymore. The reuse of javax.tools.JavaFileManager instance is plugin implementation details.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Strategy to re use javacc class created: 
-+* reuseCreated (default): will reuse already created but in case of multi-threaded builds, each thread will have its own instance 
-+* reuseSame: the same Javacc class will be used for each compilation even for multi-threaded build 
-+* alwaysNew: a new Javacc class will be created for each compilation Note this parameter value depends on the os/jdk you are using, but the default value should work on most of env.</description>
++          <description>Strategy to re use javacc class created. Legal values are: 
++* reuseCreated (default) – will reuse already created but in case of multi-threaded builds, each thread will have its own instance. 
++* reuseSame – the same Javacc class will be used for each compilation even for multi-threaded build. 
++* alwaysNew – a new Javacc class will be created for each compilation. Note this parameter value depends on the OS/JDK you are using, but the default value should work on most of env.</description>
++          <expression>${maven.compiler.compilerReuseStrategy}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>compilerVersion</name>
 +          <type>java.lang.String</type>
-+          <deprecated>This parameter is no longer evaluated by the underlying compilers, instead the actual version of the javac binary is automatically retrieved.</deprecated>
++          <deprecated>This parameter is no longer used by the underlying compilers.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Version of the compiler to use, ex. &quot;1.3&quot;, &quot;1.5&quot;, if fork is set to true.</description>
++          <description>Version of the compiler to use if fork is set to true. Examples! &quot;1.3&quot;, &quot;1.5&quot;.
++See also: fork</description>
++          <expression>${maven.compiler.compilerVersion}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>createMissingPackageInfoClass</name>
@@ -1374,15 +1388,23 @@
 +          <since>3.10</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Package info source files that only contain javadoc and no annotation on the package can lead to no class file being generated by the compiler. This causes a file miss on the next compilations and forces an unnecessary recompilation. The default value of true causes an empty class file to be generated. This behavior can be changed by setting this parameter to false.</description>
++          <description>Whether to generate package-info.class even when empty. By default, package info source files that only contain javadoc and no annotation on the package can lead to no class file being generated by the compiler. It may cause a file miss on build systems that check for file existence in order to decide what to recompile. 
++If true, the -Xpkginfo:always compiler option is added if the compiler supports that extra option. If the extra option is not supported, then a warning is logged and no option is added to the compiler arguments.
++
++See also: incrementalCompilation</description>
++          <expression>${maven.compiler.createMissingPackageInfoClass}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debug</name>
 +          <type>boolean</type>
++          <deprecated>Setting this flag to false is replaced by &lt;debuglevel&gt;none&lt;/debuglevel&gt;.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to include debugging information in the compiled class files.
-+See also: javac -g &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g&gt;, debuglevel</description>
++          <description>Whether to include debugging information in the compiled class files. The amount of debugging information to include is specified by the debuglevel parameter. If this debug flag is true, then the -g option may be added to compiler arguments with a value determined by the debuglevel argument. If this debug flag is false, then the -g:none option will be added to the compiler arguments.
++See also: debuglevel, javac -g &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g&gt;</description>
++          <expression>${maven.compiler.debug}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debugFileName</name>
@@ -1390,7 +1412,10 @@
 +          <since>3.10.0</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>When both fork and debug are enabled the commandline arguments used will be dumped to this file.</description>
++          <description>The file where to dump the command-line when debug is activated or when the compilation failed. For example, if the value is &quot;javac&quot;, then the Java compiler can be launched from the command-line by typing javac @target/javac.args. The debug file will contain the compiler options together with the list of source files to compile. 
++By default, this debug file is written only if the compilation of main code failed. The writing of the debug files can be forced by setting the verbose flag to true or by specifying the --verbose option to Maven on the command-line.
++</description>
++          <defaultValue>javac.args</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debuglevel</name>
@@ -1398,8 +1423,13 @@
 +          <since>2.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Keyword list to be appended to the -g command-line switch. Legal values are none or a comma-separated list of the following keywords: lines, vars, and source. If debug level is not specified, by default, nothing will be appended to -g. If debug is not turned on, this attribute will be ignored.
-+See also: javac -G:[lines,vars,source] &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom&gt;</description>
++          <description>Kinds of debugging information to include in the compiled class files. Legal values are lines, vars, source, all and none. Values other than all and none can be combined in a comma-separated list. 
++If debug level is not specified, then the -g option will not be added, which means that the default debugging information will be generated (typically lines and source but not vars).
++
++If debug level is all, then only the -g option is added, which means that all debugging information will be generated. If debug level is anything else, then the comma-separated list of keywords is appended to the -g command-line switch.
++
++See also: javac -g:[lines,vars,source] &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom&gt;</description>
++          <expression>${maven.compiler.debuglevel}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>enablePreview</name>
@@ -1407,8 +1437,10 @@
 +          <since>3.10.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to enable preview language features of the java compiler
++          <description>Whether to enable preview language features of the java compiler. If true, then the --enable-preview option will be added to compiler arguments.
 +See also: javac --enable-preview &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-enable-preview&gt;</description>
++          <expression>${maven.compiler.enablePreview}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>encoding</name>
@@ -1418,20 +1450,24 @@
 +          <editable>true</editable>
 +          <description>The -encoding argument for the Java compiler.
 +See also: javac -encoding &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-encoding&gt;</description>
++          <expression>${encoding}</expression>
++          <defaultValue>${project.build.sourceEncoding}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>excludes</name>
 +          <type>java.util.Set</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of exclusion filters for the compiler.</description>
++          <description>A set of exclusion filters for the compiler.</description>
 +        </parameter>
 +        <parameter>
 +          <name>executable</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the executable of the compiler to use when fork is true.</description>
++          <description>Executable of the compiler to use when fork is true. If this parameter is specified, then the jdkToolchain is ignored.
++See also: jdkToolchain, fork, compilerId</description>
++          <expression>${maven.compiler.executable}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>failOnError</name>
@@ -1439,7 +1475,10 @@
 +          <since>2.0.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Indicates whether the build will continue even if there are compilation errors.</description>
++          <description>Whether the build will stop if there are compilation errors.
++See also: failOnWarning</description>
++          <expression>${maven.compiler.failOnError}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>failOnWarning</name>
@@ -1447,49 +1486,60 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Indicates whether the build will continue even if there are compilation warnings.</description>
++          <description>Whether the build will stop if there are compilation warnings. If true, then the -Werror option will be added to compiler arguments.
++See also: showWarnings, showDeprecation</description>
++          <expression>${maven.compiler.failOnWarning}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>fileExtensions</name>
-+          <type>java.util.Set</type>
++          <type>java.util.List</type>
 +          <since>3.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>File extensions to check timestamp for incremental build.</description>
++          <description>File extensions to check timestamp for incremental build. Default contains only class and jar. TODO: Rename with a name making clearer that this parameter is about incremental build.
++See also: incrementalCompilation</description>
++          <defaultValue>class,jar</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>forceJavacCompilerUse</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.0</since>
-+          <deprecated>Use forceLegacyJavacApi instead</deprecated>
++          <deprecated>Ignored because java.lang.Compiler has been deprecated and removed from the JDK.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Legacy parameter name of forceLegacyJavacApi. Only considered if forceLegacyJavacApi is not set or false.</description>
++          <description>Whether to use legacy compiler API.</description>
++          <expression>${maven.compiler.forceJavacCompilerUse}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>forceLegacyJavacApi</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.13</since>
++          <deprecated>Ignored because the compiler plugin now always use the javax.tools API.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The underlying compiler now uses javax.tools API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html&gt; if available in your current JDK. Set this to true to always use the legacy com.sun.tools.javac API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html&gt; instead. 
-+This only has an effect for compilerId being javac and fork being false.
-+</description>
++          <description>Whether to use the legacy com.sun.tools.javac API instead of javax.tools API.
++See also: New API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html&gt;, Legacy API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html&gt;</description>
++          <expression>${maven.compiler.forceLegacyJavacApi}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>fork</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Allows running the compiler in a separate process. If false it uses the built in compiler, while if true it will use an executable.</description>
++          <description>Allows running the compiler in a separate process. If false, the plugin uses the built-in compiler, while if true it will use an executable.
++See also: executable, compilerId, meminitial, maxmem</description>
++          <expression>${maven.compiler.fork}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>generatedSourcesDirectory</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Specify where to place generated source files created by annotation processing. Only applies to JDK 1.6+</description>
++          <description>Specify where to place generated source files created by annotation processing.</description>
++          <defaultValue>${project.build.directory}/generated-sources/annotations</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>implicit</name>
@@ -1497,15 +1547,52 @@
 +          <since>3.10.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Keyword to be appended to the -implicit: command-line switch.
++          <description>Whether to generate class files for implicitly referenced files. If set, the value will be appended to the -implicit: compiler option. Standard values are: 
++* class – automatically generates class files. 
++* none – suppresses class file generation. 
 +See also: javac -implicit &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-implicit&gt;</description>
++          <expression>${maven.compiler.implicit}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>includes</name>
 +          <type>java.util.Set</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of inclusion filters for the compiler.</description>
++          <description>A set of inclusion filters for the compiler.</description>
++        </parameter>
++        <parameter>
++          <name>incrementalCompilation</name>
++          <type>java.lang.String</type>
++          <since>4.0.0</since>
++          <required>false</required>
++          <editable>true</editable>
++          <description>The algorithm to use for selecting which files to compile. Values can be dependencies, sources, classes, rebuild-on-change, rebuild-on-add, modules or none. 
++options: recompile all source files if the compiler options changed. Changes are detected on a best-effort basis only.
++
++dependencies: recompile all source files if at least one dependency (JAR file) changed since the last build. This check is based on the last modification times of JAR files.
++
++sources: recompile source files modified since the last build. In addition, if a source file has been deleted, then all source files are recompiled. This check is based on the modification times of source files rather than the modification times of the *.class files.
++
++classes: recompile source files (*.java) associated to no output file (*.class) or associated to an output file older than the source. This algorithm does not check if a source file has been removed, potentially leaving non-recompiled classes with references to classes that no longer exist.
++
++The sources and classes values are partially redundant, doing the same work in different ways. It is usually not necessary to specify those two values.
++
++modules: recompile modules and let the compiler decides which individual files to recompile. The compiler plugin does not enumerate the source files to recompile (actually, it does not scan at all the source directories). Instead, it only specifies the module to recompile using the --module option. The Java compiler will scan the source directories itself and compile only those source files that are newer than the corresponding files in the output directory.
++
++rebuild-on-add: modifier for recompiling all source files when the addition of a new file is detected. This flag is effective only when used together with sources or classes. When used with classes, it provides a way to detect class renaming (this is not needed with sources for detecting renaming).
++
++rebuild-on-change: modifier for recompiling all source files when a change is detected in at least one source file. This flag is effective only when used together with sources or classes. It does not rebuild when a new source file is added without change in other files, unless rebuild-on-add is also specified.
++
++none: the compiler plugin unconditionally specifies all sources to the Java compiler. This option is mutually exclusive with all other incremental compilation options.
++
++Limitations
++In all cases, the current compiler-plugin does not detect structural changes other than file addition or removal. For example, the plugin does not detect whether a method has been removed in a class. 
++Default value
++The default value depends on the context. If there is no annotation processor, then the default is &quot;options,dependencies,sources&quot;. It means that a full rebuild will be done if the compiler options or the dependencies changed, or if a source file has been deleted. Otherwise, only the modified source files will be recompiled. 
++If an annotation processor is present (e.g., proc set to a value other than &quot;none&quot;), then the default value is same as above with the addition of &quot;rebuild-on-add,rebuild-on-change&quot;. It means that a full rebuild will be done if any kind of change is detected.
++
++See also: staleMillis, fileExtensions, showCompilationChanges, createMissingPackageInfoClass</description>
++          <expression>${maven.compiler.incrementalCompilation}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>incrementalExcludes</name>
@@ -1513,7 +1600,9 @@
 +          <since>3.11</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of exclusion filters for the incremental calculation.</description>
++          <description>A set of exclusion filters for the incremental calculation. Updated source files, if excluded by this filter, will not cause the project to be rebuilt. 
++Limitation
++In the current implementation, those exclusion filters are applied for added or removed files, but not yet for removed files.</description>
 +        </parameter>
 +        <parameter>
 +          <name>jdkToolchain</name>
@@ -1521,9 +1610,8 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Specify the requirements for this jdk toolchain for using a different javac than the one of the JRE used by Maven. This overrules the toolchain selected by the maven-toolchain-plugin &lt;https://maven.apache.org/plugins/maven-toolchains-plugin/&gt;.
-+(see Guide to Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; for more info) &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;11&lt;/version&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;1.8&lt;/version&gt; &lt;vendor&gt;zulu&lt;/vendor&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; note: requires at least Maven 3.3.1</description>
++          <description>Requirements for this JDK toolchain for using a different javac than the one of the JDK used by Maven. This overrules the toolchain selected by the maven-toolchain-plugin &lt;https://maven.apache.org/plugins/maven-toolchains-plugin/&gt;. See Guide to Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; for more info. &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;11&lt;/version&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;1.8&lt;/version&gt; &lt;vendor&gt;zulu&lt;/vendor&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; 
++See also: fork, executable</description>
 +        </parameter>
 +        <parameter>
 +          <name>maxmem</name>
@@ -1531,7 +1619,9 @@
 +          <since>2.0.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the maximum size, in megabytes, of the memory allocation pool, ex. &quot;128&quot;, &quot;128m&quot; if fork is set to true.</description>
++          <description>Maximum size, in megabytes, of the memory allocation pool if fork is set to true. Examples: &quot;128&quot;, &quot;128M&quot;. Suffixes &quot;k&quot; (for kilobytes) and &quot;G&quot; (for gigabytes) are also accepted. If no suffix is provided, &quot;M&quot; is assumed.
++See also: fork</description>
++          <expression>${maven.compiler.maxmem}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>meminitial</name>
@@ -1539,70 +1629,77 @@
 +          <since>2.0.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Initial size, in megabytes, of the memory allocation pool, ex. &quot;64&quot;, &quot;64m&quot; if fork is set to true.</description>
++          <description>Initial size, in megabytes, of the memory allocation pool if fork is set to true. Examples: &quot;64&quot;, &quot;64M&quot;. Suffixes &quot;k&quot; (for kilobytes) and &quot;G&quot; (for gigabytes) are also accepted. If no suffix is provided, &quot;M&quot; is assumed.
++See also: fork</description>
++          <expression>${maven.compiler.meminitial}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>moduleVersion</name>
 +          <type>java.lang.String</type>
-+          <since>3.14.0</since>
++          <since>4.0.0</since>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>The --module-version argument for the Java compiler. This is ignored if not applicable, e.g., in non-modular projects.
 +See also: javac --module-version &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-module-version&gt;</description>
++          <expression>${maven.compiler.moduleVersion}</expression>
++          <defaultValue>${project.version}</defaultValue>
 +        </parameter>
 +        <parameter>
-+          <name>mojoExecution</name>
-+          <type>org.apache.maven.plugin.MojoExecution</type>
-+          <since>3.0 needed for storing the status for the incremental build support.</since>
++          <name>mojoStatusPath</name>
++          <type>java.nio.file.Path</type>
 +          <required>true</required>
 +          <editable>false</editable>
-+          <description></description>
++          <description>Path to a file where to cache information about the last incremental build. This is used when &quot;incremental&quot; builds are enabled for detecting additions or removals of source files, or changes in plugin configuration. This file should be in the output directory and can be deleted at any time</description>
++          <defaultValue>${project.build.directory}/maven-status/${mojo.plugin.descriptor.artifactId}/${mojo.executionId}.cache</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>multiReleaseOutput</name>
 +          <type>boolean</type>
 +          <since>3.7.1</since>
++          <deprecated>Replaced by specifying the &lt;targetVersion&gt; value inside a &lt;source&gt; element.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+When set to true, the classes will be placed in META-INF/versions/${release} The release value must be set, otherwise the plugin will fail.
-+Note: A jar is only a multirelease jar if META-INF/MANIFEST.MF contains Multi-Release: true. You need to set this by configuring the maven-jar-plugin &lt;https://maven.apache.org/plugins/maven-jar-plugin/examples/manifest-customization.html&gt;. This implies that you cannot test a multirelease jar using the outputDirectory.</description>
++          <description>When set to true, the classes will be placed in META-INF/versions/${release}. 
++Note: A jar is only a multi-release jar if META-INF/MANIFEST.MF contains Multi-Release: true. You need to set this by configuring the maven-jar-plugin &lt;https://maven.apache.org/plugins/maven-jar-plugin/examples/manifest-customization.html&gt;. This implies that you cannot test a multi-release jar using the outputDirectory.
++</description>
 +        </parameter>
 +        <parameter>
 +          <name>optimize</name>
-+          <type>boolean</type>
-+          <deprecated>This property is a no-op in javac.</deprecated>
++          <type>java.lang.Boolean</type>
++          <deprecated>This property is ignored.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to optimize the compiled code using the compiler&apos;s optimization methods.</description>
++          <description>Whether to optimize the compiled code using the compiler&apos;s optimization methods.</description>
++          <expression>${maven.compiler.optimize}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>outputDirectory</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <required>true</required>
-+          <editable>true</editable>
-+          <description>The directory for compiled classes. 
-+This parameter should only be modified in special cases. One example is creating a multi-release jar with a lower bytecode level (i.e. setting it to ${project.build.outputDirectory/META-INF/versions/21} or similar) in an additional execution.
-+
-+When the required bytecode level is available though an installed JDK or toolchain, it is recommended to use the &lt;release&gt; property in conjunction with the ${multiReleaseOutput} parameter instead.
-+</description>
++          <editable>false</editable>
++          <description>The directory for compiled classes.
++See also: getOutputDirectory()</description>
++          <defaultValue>${project.build.outputDirectory}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>outputFileName</name>
 +          <type>java.lang.String</type>
++          <deprecated>Bundling many class files into a single file should be done by other plugins.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>Sets the name of the output file when compiling a set of sources to a single file. 
-+
-+expression=&quot;${project.build.finalName}&quot;</description>
++expression=&quot;${project.build.finalName}&quot;
++</description>
 +        </parameter>
 +        <parameter>
 +          <name>outputTimestamp</name>
 +          <type>java.lang.String</type>
 +          <since>3.12.0</since>
++          <deprecated>Not used by the compiler plugin since it does not generate archive.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd&apos;T&apos;HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH &lt;https://reproducible-builds.org/docs/source-date-epoch/&gt;).</description>
++          <description>Timestamp for reproducible output archive entries. It can be either formatted as ISO 8601 yyyy-MM-dd&apos;T&apos;HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH &lt;https://reproducible-builds.org/docs/source-date-epoch/&gt;).</description>
++          <defaultValue>${project.build.outputTimestamp}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>parameters</name>
@@ -1610,8 +1707,10 @@
 +          <since>3.6.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to generate metadata for reflection on method parameters.
++          <description>Whether to generate metadata for reflection on method parameters. If true, the -parameters option will be added to compiler arguments.
 +See also: javac -parameters &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-parameters&gt;</description>
++          <expression>${maven.compiler.parameters}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>proc</name>
@@ -1619,29 +1718,20 @@
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets whether annotation processing is performed or not. Only applies to JDK 1.6+ If not set, both compilation and annotation processing are performed at the same time.
-+
-+Allowed values are:
-+
-+* none - no annotation processing is performed. 
-+* only - only annotation processing is done, no compilation. 
-+* full - annotation processing and compilation. full is the default. Starting with JDK 21, this option must be set explicitly.
-+See also: javac -proc &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
-+        </parameter>
-+        <parameter>
-+          <name>project</name>
-+          <type>org.apache.maven.project.MavenProject</type>
-+          <required>true</required>
-+          <editable>false</editable>
-+          <description>The current project instance. This is used for propagating generated-sources paths as compile/testCompile source roots.</description>
++          <description>Configures if annotation processing and/or compilation are performed by the compiler. If set, the value will be appended to the -proc: compiler option. Possible values are: 
++* none – no annotation processing is performed, only compilation is done. 
++* only – only annotation processing is done, no compilation. 
++* full – annotation processing followed by compilation is done. The default value depends on the JDK used for the build. Prior to Java 23, the default was full, so annotation processing and compilation were executed without explicit configuration. For security reasons, starting with Java 23 no annotation processing is done if neither any -processor, -processor path or -processor module are set, or either only or full is set. So literally the default is none. It is recommended to always list the annotation processors you want to execute instead of using the proc configuration, to ensure that only desired processors are executed and not any &quot;hidden&quot; (and maybe malicious).
++See also: annotationProcessors, Inside Java 2024-06-18 Quality Heads up &lt;https://inside.java/2024/06/18/quality-heads-up/&gt;, javac -proc &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <expression>${maven.compiler.proc}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>projectArtifact</name>
-+          <type>org.apache.maven.artifact.Artifact</type>
++          <type>org.apache.maven.api.ProducedArtifact</type>
 +          <required>true</required>
 +          <editable>false</editable>
 +          <description>Projects main artifact.</description>
++          <defaultValue>${project.mainArtifact}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>release</name>
@@ -1649,210 +1739,131 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The -release argument for the Java compiler, supported since Java9
-+See also: javac -release &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release&gt;</description>
-+        </parameter>
-+        <parameter>
-+          <name>session</name>
-+          <type>org.apache.maven.execution.MavenSession</type>
-+          <required>true</required>
-+          <editable>false</editable>
-+          <description>The current build session instance. This is used for toolchain manager API calls.</description>
++          <description>The --release argument for the Java compiler when the sources do not declare this version. The suggested way to declare the target Java release is to specify it with the sources like below: &lt;build&gt; &lt;sources&gt; &lt;source&gt; &lt;directory&gt;src/main/java&lt;/directory&gt; &lt;targetVersion&gt;17&lt;/targetVersion&gt; &lt;/source&gt; &lt;/sources&gt; &lt;/build&gt; If such &lt;targetVersion&gt; element is found, it has precedence over this release property. If a source does not declare a target Java version, then the value of this release property is used as a fallback. If omitted, the compiler will generate bytecodes for the Java version running the compiler.
++See also: javac --release &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release&gt;</description>
++          <expression>${maven.compiler.release}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>showCompilationChanges</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description></description>
++          <description>Whether to provide more details about why a module is rebuilt. This is used only if incrementalCompilation is set to something else than &quot;none&quot;.
++See also: incrementalCompilation</description>
++          <expression>${maven.compiler.showCompilationChanges}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>showDeprecation</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets whether to show source locations where deprecated APIs are used.</description>
++          <description>Whether to show source locations where deprecated APIs are used. If true, then the -deprecation option will be added to compiler arguments. That option is itself a shorthand for -Xlint:deprecation.
++See also: showWarnings, failOnWarning</description>
++          <expression>${maven.compiler.showDeprecation}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>showWarnings</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to false to disable warnings during compilation.</description>
++          <description>Whether to show compilation warnings. If false, then the -nowarn option will be added to compiler arguments. That option is itself a shorthand for -Xlint:none.
++See also: showDeprecation, failOnWarning</description>
++          <expression>${maven.compiler.showWarnings}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>skipMain</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set this to true to bypass compilation of main sources. Its use is NOT RECOMMENDED, but quite convenient on occasion.</description>
++          <description>Set this to true to bypass compilation of main sources. Its use is not recommended, but quite convenient on occasion.</description>
++          <expression>${maven.main.skip}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>skipMultiThreadWarning</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>2.5</since>
++          <deprecated>Deprecated as a consequence of compilerReuseStrategy deprecation.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description></description>
++          <expression>${maven.compiler.skipMultiThreadWarning}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>source</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+The -source argument for the Java compiler.
++          <description>The --source argument for the Java compiler. 
++Notes:
 +
-+NOTE: 
-+
-+Since 3.8.0 the default value has changed from 1.5 to 1.6
-+
-+Since 3.9.0 the default value has changed from 1.6 to 1.7
-+
-+Since 3.11.0 the default value has changed from 1.7 to 1.8
-+
-+See also: javac -source &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source&gt;</description>
++* Since 3.8.0 the default value has changed from 1.5 to 1.6. 
++* Since 3.9.0 the default value has changed from 1.6 to 1.7. 
++* Since 3.11.0 the default value has changed from 1.7 to 1.8. 
++* Since 4.0.0-beta-2 the default value has been removed. As of Java 9, the release parameter is preferred. 
++See also: javac --source &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source&gt;</description>
++          <expression>${maven.compiler.source}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>staleMillis</name>
 +          <type>int</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the granularity in milliseconds of the last modification date for testing whether a source needs recompilation.</description>
++          <description>The granularity in milliseconds of the last modification date for testing whether a source needs recompilation.
++See also: incrementalCompilation</description>
++          <expression>${lastModGranularityMs}</expression>
++          <defaultValue>0</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>target</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+The -target argument for the Java compiler.
-+
-+NOTE: 
++          <description>The --target argument for the Java compiler. 
++Notes:
 +
-+Since 3.8.0 the default value has changed from 1.5 to 1.6
-+
-+Since 3.9.0 the default value has changed from 1.6 to 1.7
-+
-+Since 3.11.0 the default value has changed from 1.7 to 1.8
-+
-+See also: javac -target &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target&gt;</description>
++* Since 3.8.0 the default value has changed from 1.5 to 1.6. 
++* Since 3.9.0 the default value has changed from 1.6 to 1.7. 
++* Since 3.11.0 the default value has changed from 1.7 to 1.8. 
++* Since 4.0.0-beta-2 the default value has been removed. As of Java 9, the release parameter is preferred. 
++See also: javac --target &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target&gt;</description>
++          <expression>${maven.compiler.target}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>useIncrementalCompilation</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.1</since>
++          <deprecated>Replaced by incrementalCompilation. A value of true in this old property is equivalent to &quot;dependencies,sources,rebuild-on-add&quot; in the new property, and a value of false is equivalent to &quot;classes&quot;.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+to enable/disable incremental compilation feature.
-+
-+This leads to two different modes depending on the underlying compiler. The default javac compiler does the following:
-+
-+* true (default) in this mode the compiler plugin determines whether any JAR files the current module depends on have changed in the current build run; or any source file was added, removed or changed since the last compilation. If this is the case, the compiler plugin recompiles all sources. 
-+* false (not recommended) this only compiles source files which are newer than their corresponding class files, namely which have changed since the last compilation. This does not recompile other classes which use the changed class, potentially leaving them with references to methods that no longer exist, leading to errors at runtime. </description>
-+        </parameter>
-+        <parameter>
-+          <name>useModuleVersion</name>
-+          <type>boolean</type>
-+          <since>3.15.0</since>
-+          <required>false</required>
-+          <editable>true</editable>
-+          <description>Use the --module-version argument for the Java compiler. This is ignored if not applicable, e.g., in non-modular projects.
-+See also: javac --module-version &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-module-version&gt;</description>
++          <description>Whether to enable/disable incremental compilation feature.</description>
++          <expression>${maven.compiler.useIncrementalCompilation}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>verbose</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to show messages about what the compiler is doing.
++          <description>Whether to show messages about what the compiler is doing. If true, then the -verbose option will be added to compiler arguments. In addition, files such as target/javac.args will be generated even on successful compilation.
 +See also: javac -verbose &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-verbose&gt;</description>
++          <expression>${maven.compiler.verbose}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +      </parameters>
-+      <configuration>
-+        <annotationProcessorPathsUseDepMgmt implementation="boolean" default-value="false"/>
-+        <basedir implementation="java.io.File" default-value="${basedir}"/>
-+        <buildDirectory implementation="java.io.File" default-value="${project.build.directory}"/>
-+        <compilePath implementation="java.util.List" default-value="${project.compileClasspathElements}"/>
-+        <compileSourceRoots implementation="java.util.List" default-value="${project.compileSourceRoots}"/>
-+        <compilerId implementation="java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId>
-+        <compilerReuseStrategy implementation="java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
-+        <compilerVersion implementation="java.lang.String">${maven.compiler.compilerVersion}</compilerVersion>
-+        <createMissingPackageInfoClass implementation="boolean" default-value="true">${maven.compiler.createMissingPackageInfoClass}</createMissingPackageInfoClass>
-+        <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug>
-+        <debugFileName implementation="java.lang.String" default-value="javac"/>
-+        <debuglevel implementation="java.lang.String">${maven.compiler.debuglevel}</debuglevel>
-+        <enablePreview implementation="boolean" default-value="false">${maven.compiler.enablePreview}</enablePreview>
-+        <encoding implementation="java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding>
-+        <executable implementation="java.lang.String">${maven.compiler.executable}</executable>
-+        <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError>
-+        <failOnWarning implementation="boolean" default-value="false">${maven.compiler.failOnWarning}</failOnWarning>
-+        <fileExtensions implementation="java.util.Set" default-value="class,jar"/>
-+        <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
-+        <forceLegacyJavacApi implementation="boolean" default-value="false">${maven.compiler.forceLegacyJavacApi}</forceLegacyJavacApi>
-+        <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork>
-+        <generatedSourcesDirectory implementation="java.io.File" default-value="${project.build.directory}/generated-sources/annotations"/>
-+        <implicit implementation="java.lang.String">${maven.compiler.implicit}</implicit>
-+        <maxmem implementation="java.lang.String">${maven.compiler.maxmem}</maxmem>
-+        <meminitial implementation="java.lang.String">${maven.compiler.meminitial}</meminitial>
-+        <moduleVersion implementation="java.lang.String" default-value="${project.version}">${maven.compiler.moduleVersion}</moduleVersion>
-+        <mojoExecution implementation="org.apache.maven.plugin.MojoExecution" default-value="${mojoExecution}"/>
-+        <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize>
-+        <outputDirectory implementation="java.io.File" default-value="${project.build.outputDirectory}">${maven.compiler.outputDirectory}</outputDirectory>
-+        <outputTimestamp implementation="java.lang.String" default-value="${project.build.outputTimestamp}"/>
-+        <parameters implementation="boolean" default-value="false">${maven.compiler.parameters}</parameters>
-+        <proc implementation="java.lang.String">${maven.compiler.proc}</proc>
-+        <project implementation="org.apache.maven.project.MavenProject" default-value="${project}"/>
-+        <projectArtifact implementation="org.apache.maven.artifact.Artifact" default-value="${project.artifact}"/>
-+        <release implementation="java.lang.String">${maven.compiler.release}</release>
-+        <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
-+        <showCompilationChanges implementation="boolean" default-value="false">${maven.compiler.showCompilationChanges}</showCompilationChanges>
-+        <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
-+        <showWarnings implementation="boolean" default-value="true">${maven.compiler.showWarnings}</showWarnings>
-+        <skipMain implementation="boolean">${maven.main.skip}</skipMain>
-+        <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
-+        <source implementation="java.lang.String" default-value="1.8">${maven.compiler.source}</source>
-+        <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis>
-+        <target implementation="java.lang.String" default-value="1.8">${maven.compiler.target}</target>
-+        <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
-+        <useModuleVersion implementation="boolean" default-value="true">${maven.compiler.useModuleVersion}</useModuleVersion>
-+        <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
-+      </configuration>
-+      <requirements>
-+        <requirement>
-+          <role>org.apache.maven.artifact.handler.manager.ArtifactHandlerManager</role>
-+          <field-name>artifactHandlerManager</field-name>
-+        </requirement>
-+        <requirement>
-+          <role>org.codehaus.plexus.compiler.manager.CompilerManager</role>
-+          <field-name>compilerManager</field-name>
-+        </requirement>
-+        <requirement>
-+          <role>org.eclipse.aether.RepositorySystem</role>
-+          <field-name>repositorySystem</field-name>
-+        </requirement>
-+        <requirement>
-+          <role>org.apache.maven.toolchain.ToolchainManager</role>
-+          <field-name>toolchainManager</field-name>
-+        </requirement>
-+      </requirements>
 +    </mojo>
 +    <mojo>
 +      <goal>help</goal>
-+      <description>Display help information on maven-compiler-plugin.
++      <description>Display help information on maven-compiler-plugin. 
 +Call mvn compiler:help -Ddetail=true -Dgoal=&lt;goal-name&gt; to display parameter details.</description>
-+      <requiresDirectInvocation>false</requiresDirectInvocation>
-+      <requiresProject>false</requiresProject>
-+      <requiresReports>false</requiresReports>
++      <directInvocationOnly>false</directInvocationOnly>
++      <projectRequired>false</projectRequired>
 +      <aggregator>false</aggregator>
-+      <requiresOnline>false</requiresOnline>
++      <onlineRequired>false</onlineRequired>
 +      <inheritedByDefault>true</inheritedByDefault>
 +      <implementation>org.apache.maven.plugins.maven_compiler_plugin.HelpMojo</implementation>
 +      <language>java</language>
-+      <instantiationStrategy>per-lookup</instantiationStrategy>
-+      <executionStrategy>once-per-session</executionStrategy>
-+      <threadSafe>true</threadSafe>
 +      <parameters>
 +        <parameter>
 +          <name>detail</name>
@@ -1860,6 +1871,8 @@
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>If true, display all settable properties for each goal.</description>
++          <expression>${detail}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>goal</name>
@@ -1867,6 +1880,7 @@
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>The name of the goal for which to show help. If unspecified, all goals will be displayed.</description>
++          <expression>${goal}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>indentSize</name>
@@ -1874,6 +1888,8 @@
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>The number of spaces per indentation level, should be positive.</description>
++          <expression>${indentSize}</expression>
++          <defaultValue>2</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>lineLength</name>
@@ -1881,43 +1897,33 @@
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>The maximum length of a display line, should be positive.</description>
++          <expression>${lineLength}</expression>
++          <defaultValue>80</defaultValue>
 +        </parameter>
 +      </parameters>
-+      <configuration>
-+        <detail implementation="boolean" default-value="false">${detail}</detail>
-+        <goal implementation="java.lang.String">${goal}</goal>
-+        <indentSize implementation="int" default-value="2">${indentSize}</indentSize>
-+        <lineLength implementation="int" default-value="80">${lineLength}</lineLength>
-+      </configuration>
 +    </mojo>
 +    <mojo>
 +      <goal>testCompile</goal>
-+      <description>Compiles application test sources. By default uses the javac &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&gt; compiler of the JDK used to execute Maven. This can be overwritten through Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; or parameter compilerId.
++      <description>Compiles application test sources. Each instance shall be used only once, then discarded.
 +See also: javac Command &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&gt;</description>
-+      <requiresDependencyResolution>test</requiresDependencyResolution>
-+      <requiresDirectInvocation>false</requiresDirectInvocation>
-+      <requiresProject>true</requiresProject>
-+      <requiresReports>false</requiresReports>
++      <directInvocationOnly>false</directInvocationOnly>
++      <projectRequired>true</projectRequired>
 +      <aggregator>false</aggregator>
-+      <requiresOnline>false</requiresOnline>
++      <onlineRequired>false</onlineRequired>
 +      <inheritedByDefault>true</inheritedByDefault>
 +      <phase>test-compile</phase>
 +      <implementation>org.apache.maven.plugin.compiler.TestCompilerMojo</implementation>
 +      <language>java</language>
-+      <instantiationStrategy>per-lookup</instantiationStrategy>
-+      <executionStrategy>once-per-session</executionStrategy>
 +      <since>2.0</since>
-+      <threadSafe>true</threadSafe>
 +      <parameters>
 +        <parameter>
 +          <name>annotationProcessorPaths</name>
 +          <type>java.util.List</type>
 +          <since>3.5</since>
++          <deprecated>Replaced by ordinary dependencies with &lt;type&gt; element set to processor, classpath-processor or modular-processor.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Classpath elements to supply as annotation processor path. If specified, the compiler will detect annotation processors only in those classpath elements. If omitted, the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors.
-+
++          <description>Classpath elements to supply as annotation processor path. If specified, the compiler will detect annotation processors only in those classpath elements. If omitted (and proc is set to only or full), the default classpath is used to detect annotation processors. The detection itself depends on the configuration of annotationProcessors. Since JDK 23 by default no annotation processing is performed as long as no processors is listed for security reasons. Therefore, you should always list the desired processors using this configuration element or annotationProcessorPaths. 
 +Each classpath element is specified using their Maven coordinates (groupId, artifactId, version, classifier, type). Transitive dependencies are added automatically. Exclusions are supported as well. Example:
 +&lt;configuration&gt; &lt;annotationProcessorPaths&gt; &lt;path&gt; &lt;groupId&gt;org.sample&lt;/groupId&gt; &lt;artifactId&gt;sample-annotation-processor&lt;/artifactId&gt; &lt;version&gt;1.2.3&lt;/version&gt; &lt;!-- Optional - taken from dependency management if not specified --&gt; &lt;!-- Optionally exclude transitive dependencies --&gt; &lt;exclusions&gt; &lt;exclusion&gt; &lt;groupId&gt;org.sample&lt;/groupId&gt; &lt;artifactId&gt;sample-dependency&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;/exclusions&gt; &lt;/path&gt; &lt;!-- ... more ... --&gt; &lt;/annotationProcessorPaths&gt; &lt;/configuration&gt; Note: Exclusions are supported from version 3.11.0.
 +See also: javac -processorpath &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor-path&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
@@ -1926,13 +1932,13 @@
 +          <name>annotationProcessorPathsUseDepMgmt</name>
 +          <type>boolean</type>
 +          <since>3.12.0</since>
++          <deprecated>This flag is ignored. Replaced by ordinary dependencies with &lt;type&gt; element set to processor, classpath-processor or modular-processor.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Whether to use the Maven dependency management section when resolving transitive dependencies of annotation processor paths.
-+
++          <description>Whether to use the Maven dependency management section when resolving transitive dependencies of annotation processor paths. 
 +This flag does not enable / disable the ability to resolve the version of annotation processor paths from dependency management section. It only influences the resolution of transitive dependencies of those top-level paths.
 +</description>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>annotationProcessors</name>
@@ -1940,31 +1946,24 @@
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Names of annotation processors to run. Only applies to JDK 1.6+ If not set, the default annotation processors discovery process applies.
-+
-+See also: javac -processor &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <description>Class names of annotation processors to run. If not set, the default annotation processors discovery process applies. If set, the value will be appended to the -processor compiler option.
++See also: proc</description>
 +        </parameter>
 +        <parameter>
 +          <name>basedir</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <required>true</required>
 +          <editable>false</editable>
 +          <description>The directory to run the compiler from if fork is true.</description>
-+        </parameter>
-+        <parameter>
-+          <name>buildDirectory</name>
-+          <type>java.io.File</type>
-+          <required>true</required>
-+          <editable>false</editable>
-+          <description>The target directory of the compiler if fork is true.</description>
++          <defaultValue>${project.basedir}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>compileSourceRoots</name>
 +          <type>java.util.List</type>
-+          <required>true</required>
++          <deprecated>Replaced by the project-wide &lt;sources&gt; element.</deprecated>
++          <required>false</required>
 +          <editable>true</editable>
-+          <description>The source directories containing the test-source to be compiled.</description>
++          <description>The root directories containing the source files to be compiled. If null or empty, the directories will be obtained from the &lt;Source&gt; elements declared in the project. If non-empty, the project &lt;Source&gt; elements are ignored. This configuration option should be used only when there is a need to override the project configuration.</description>
 +        </parameter>
 +        <parameter>
 +          <name>compilerArgs</name>
@@ -1972,69 +1971,53 @@
 +          <since>3.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to the compiler.
-+
-+Note that -J options are only passed through if fork is set to true.
-+Example: &lt;compilerArgs&gt; &lt;arg&gt;-Xmaxerrs&lt;/arg&gt; &lt;arg&gt;1000&lt;/arg&gt; &lt;arg&gt;-Xlint&lt;/arg&gt; &lt;arg&gt;-J-Duser.language=en_us&lt;/arg&gt; &lt;/compilerArgs&gt; 
++          <description>Additional arguments to be passed verbatim to the Java compiler. This parameter can be used when the Maven compiler plugin does not provide a parameter for a Java compiler option. It may happen, for example, for new or preview Java features which are not yet handled by this compiler plugin. 
++If an option has a value, the option and the value shall be specified in two separated &lt;arg&gt; elements. For example, the -Xmaxerrs 1000 option (for setting the maximal number of errors to 1000) can be specified as below (together with other options):
++&lt;compilerArgs&gt; &lt;arg&gt;-Xlint&lt;/arg&gt; &lt;arg&gt;-Xmaxerrs&lt;/arg&gt; &lt;arg&gt;1000&lt;/arg&gt; &lt;arg&gt;J-Duser.language=en_us&lt;/arg&gt; &lt;/compilerArgs&gt; Note that -J options should be specified only if fork is set to true. Other options can be specified regardless the fork value. The compiler plugin does not verify whether the arguments given through this parameter are valid. For this reason, the other parameters provided by the compiler plugin should be preferred when they exist, because the plugin checks whether the corresponding options are supported.
 +See also: javac -J &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J&gt;</description>
 +        </parameter>
 +        <parameter>
 +          <name>compilerArgument</name>
 +          <type>java.lang.String</type>
++          <deprecated>Use compilerArgs instead.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the unformatted single argument string to be passed to the compiler. To pass multiple arguments such as -Xmaxerrs 1000 (which are actually two arguments) you have to use compilerArgs.
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+
-+Note that -J options are only passed through if fork is set to true.
++          <description>The single argument string to be passed to the compiler. To pass multiple arguments such as -Xmaxerrs 1000 (which are actually two arguments), compilerArgs is preferred. 
++Note that -J options should be specified only if fork is set to true.
 +
 +See also: javac -J &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J&gt;</description>
 +        </parameter>
 +        <parameter>
-+          <name>compilerArguments</name>
-+          <type>java.util.Map</type>
-+          <since>2.0.1</since>
-+          <deprecated>use compilerArgs instead.</deprecated>
-+          <required>false</required>
-+          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to the compiler (prepending a dash).
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+
-+Note that -J options are only passed through if fork is set to true.
-+
-+To pass -Xmaxerrs 1000 -Xlint -Xlint:-path -Averbose=true you should include the following:
-+&lt;compilerArguments&gt; &lt;Xmaxerrs&gt;1000&lt;/Xmaxerrs&gt; &lt;Xlint/&gt; &lt;Xlint:-path/&gt; &lt;Averbose&gt;true&lt;/Averbose&gt; &lt;/compilerArguments&gt; </description>
-+        </parameter>
-+        <parameter>
 +          <name>compilerId</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The compiler id of the compiler to use. See this guide for more information.</description>
++          <description>Identifier of the compiler to use. This identifier shall match the identifier of a compiler known to the JDK tool chain, or the JavaCompiler#name() name of a javax.tools.JavaCompiler instance registered as a service findable by java.util.ServiceLoader. See this guide for more information. If unspecified, then the system Java compiler is used. The identifier of the system Java compiler is usually javac.
++See also: fork, executable, JavaCompiler#name()</description>
++          <expression>${maven.compiler.compilerId}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>compilerReuseStrategy</name>
 +          <type>java.lang.String</type>
 +          <since>2.5</since>
++          <deprecated>Not supported anymore. The reuse of javax.tools.JavaFileManager instance is plugin implementation details.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Strategy to re use javacc class created: 
-+* reuseCreated (default): will reuse already created but in case of multi-threaded builds, each thread will have its own instance 
-+* reuseSame: the same Javacc class will be used for each compilation even for multi-threaded build 
-+* alwaysNew: a new Javacc class will be created for each compilation Note this parameter value depends on the os/jdk you are using, but the default value should work on most of env.</description>
++          <description>Strategy to re use javacc class created. Legal values are: 
++* reuseCreated (default) – will reuse already created but in case of multi-threaded builds, each thread will have its own instance. 
++* reuseSame – the same Javacc class will be used for each compilation even for multi-threaded build. 
++* alwaysNew – a new Javacc class will be created for each compilation. Note this parameter value depends on the OS/JDK you are using, but the default value should work on most of env.</description>
++          <expression>${maven.compiler.compilerReuseStrategy}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>compilerVersion</name>
 +          <type>java.lang.String</type>
-+          <deprecated>This parameter is no longer evaluated by the underlying compilers, instead the actual version of the javac binary is automatically retrieved.</deprecated>
++          <deprecated>This parameter is no longer used by the underlying compilers.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Version of the compiler to use, ex. &quot;1.3&quot;, &quot;1.5&quot;, if fork is set to true.</description>
++          <description>Version of the compiler to use if fork is set to true. Examples! &quot;1.3&quot;, &quot;1.5&quot;.
++See also: fork</description>
++          <expression>${maven.compiler.compilerVersion}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>createMissingPackageInfoClass</name>
@@ -2042,15 +2025,23 @@
 +          <since>3.10</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Package info source files that only contain javadoc and no annotation on the package can lead to no class file being generated by the compiler. This causes a file miss on the next compilations and forces an unnecessary recompilation. The default value of true causes an empty class file to be generated. This behavior can be changed by setting this parameter to false.</description>
++          <description>Whether to generate package-info.class even when empty. By default, package info source files that only contain javadoc and no annotation on the package can lead to no class file being generated by the compiler. It may cause a file miss on build systems that check for file existence in order to decide what to recompile. 
++If true, the -Xpkginfo:always compiler option is added if the compiler supports that extra option. If the extra option is not supported, then a warning is logged and no option is added to the compiler arguments.
++
++See also: incrementalCompilation</description>
++          <expression>${maven.compiler.createMissingPackageInfoClass}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debug</name>
 +          <type>boolean</type>
++          <deprecated>Setting this flag to false is replaced by &lt;debuglevel&gt;none&lt;/debuglevel&gt;.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to include debugging information in the compiled class files.
-+See also: javac -g &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g&gt;, debuglevel</description>
++          <description>Whether to include debugging information in the compiled class files. The amount of debugging information to include is specified by the debuglevel parameter. If this debug flag is true, then the -g option may be added to compiler arguments with a value determined by the debuglevel argument. If this debug flag is false, then the -g:none option will be added to the compiler arguments.
++See also: debuglevel, javac -g &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g&gt;</description>
++          <expression>${maven.compiler.debug}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debugFileName</name>
@@ -2058,7 +2049,11 @@
 +          <since>3.10.0</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>when forking and debug activated the commandline used will be dumped in this file</description>
++          <description>The file where to dump the command-line when debug is activated or when the compilation failed. For example, if the value is &quot;javac-test&quot;, then the Java compiler can be launched from the command-line by typing javac @target/javac-test.args. The debug file will contain the compiler options together with the list of source files to compile. 
++By default, this debug file is written only if the compilation of test code failed. The writing of the debug files can be forced by setting the verbose flag to true or by specifying the --verbose option to Maven on the command-line.
++
++See also: CompilerMojo.debugFileName</description>
++          <defaultValue>javac-test.args</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>debuglevel</name>
@@ -2066,8 +2061,13 @@
 +          <since>2.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Keyword list to be appended to the -g command-line switch. Legal values are none or a comma-separated list of the following keywords: lines, vars, and source. If debug level is not specified, by default, nothing will be appended to -g. If debug is not turned on, this attribute will be ignored.
-+See also: javac -G:[lines,vars,source] &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom&gt;</description>
++          <description>Kinds of debugging information to include in the compiled class files. Legal values are lines, vars, source, all and none. Values other than all and none can be combined in a comma-separated list. 
++If debug level is not specified, then the -g option will not be added, which means that the default debugging information will be generated (typically lines and source but not vars).
++
++If debug level is all, then only the -g option is added, which means that all debugging information will be generated. If debug level is anything else, then the comma-separated list of keywords is appended to the -g command-line switch.
++
++See also: javac -g:[lines,vars,source] &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom&gt;</description>
++          <expression>${maven.compiler.debuglevel}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>enablePreview</name>
@@ -2075,8 +2075,10 @@
 +          <since>3.10.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to enable preview language features of the java compiler
++          <description>Whether to enable preview language features of the java compiler. If true, then the --enable-preview option will be added to compiler arguments.
 +See also: javac --enable-preview &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-enable-preview&gt;</description>
++          <expression>${maven.compiler.enablePreview}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>encoding</name>
@@ -2086,13 +2088,17 @@
 +          <editable>true</editable>
 +          <description>The -encoding argument for the Java compiler.
 +See also: javac -encoding &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-encoding&gt;</description>
++          <expression>${encoding}</expression>
++          <defaultValue>${project.build.sourceEncoding}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>executable</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the executable of the compiler to use when fork is true.</description>
++          <description>Executable of the compiler to use when fork is true. If this parameter is specified, then the jdkToolchain is ignored.
++See also: jdkToolchain, fork, compilerId</description>
++          <expression>${maven.compiler.executable}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>failOnError</name>
@@ -2100,7 +2106,10 @@
 +          <since>2.0.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Indicates whether the build will continue even if there are compilation errors.</description>
++          <description>Whether the build will stop if there are compilation errors.
++See also: failOnWarning</description>
++          <expression>${maven.compiler.failOnError}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>failOnWarning</name>
@@ -2108,51 +2117,61 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Indicates whether the build will continue even if there are compilation warnings.</description>
++          <description>Whether the build will stop if there are compilation warnings. If true, then the -Werror option will be added to compiler arguments.
++See also: showWarnings, showDeprecation</description>
++          <expression>${maven.compiler.failOnWarning}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>fileExtensions</name>
-+          <type>java.util.Set</type>
++          <type>java.util.List</type>
 +          <since>3.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>File extensions to check timestamp for incremental build.</description>
++          <description>File extensions to check timestamp for incremental build. Default contains only class and jar. TODO: Rename with a name making clearer that this parameter is about incremental build.
++See also: incrementalCompilation</description>
++          <defaultValue>class,jar</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>forceJavacCompilerUse</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.0</since>
-+          <deprecated>Use forceLegacyJavacApi instead</deprecated>
++          <deprecated>Ignored because java.lang.Compiler has been deprecated and removed from the JDK.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Legacy parameter name of forceLegacyJavacApi. Only considered if forceLegacyJavacApi is not set or false.</description>
++          <description>Whether to use legacy compiler API.</description>
++          <expression>${maven.compiler.forceJavacCompilerUse}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>forceLegacyJavacApi</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.13</since>
++          <deprecated>Ignored because the compiler plugin now always use the javax.tools API.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The underlying compiler now uses javax.tools API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html&gt; if available in your current JDK. Set this to true to always use the legacy com.sun.tools.javac API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html&gt; instead. 
-+This only has an effect for compilerId being javac and fork being false.
-+</description>
++          <description>Whether to use the legacy com.sun.tools.javac API instead of javax.tools API.
++See also: New API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html&gt;, Legacy API &lt;https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html&gt;</description>
++          <expression>${maven.compiler.forceLegacyJavacApi}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>fork</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Allows running the compiler in a separate process. If false it uses the built in compiler, while if true it will use an executable.</description>
++          <description>Allows running the compiler in a separate process. If false, the plugin uses the built-in compiler, while if true it will use an executable.
++See also: executable, compilerId, meminitial, maxmem</description>
++          <expression>${maven.compiler.fork}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>generatedTestSourcesDirectory</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Specify where to place generated source files created by annotation processing. Only applies to JDK 1.6+
-+</description>
++          <description>Specify where to place generated source files created by annotation processing.
++See also: CompilerMojo.generatedSourcesDirectory</description>
++          <defaultValue>${project.build.directory}/generated-test-sources/test-annotations</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>implicit</name>
@@ -2160,8 +2179,45 @@
 +          <since>3.10.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Keyword to be appended to the -implicit: command-line switch.
++          <description>Whether to generate class files for implicitly referenced files. If set, the value will be appended to the -implicit: compiler option. Standard values are: 
++* class – automatically generates class files. 
++* none – suppresses class file generation. 
 +See also: javac -implicit &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-implicit&gt;</description>
++          <expression>${maven.compiler.implicit}</expression>
++        </parameter>
++        <parameter>
++          <name>incrementalCompilation</name>
++          <type>java.lang.String</type>
++          <since>4.0.0</since>
++          <required>false</required>
++          <editable>true</editable>
++          <description>The algorithm to use for selecting which files to compile. Values can be dependencies, sources, classes, rebuild-on-change, rebuild-on-add, modules or none. 
++options: recompile all source files if the compiler options changed. Changes are detected on a best-effort basis only.
++
++dependencies: recompile all source files if at least one dependency (JAR file) changed since the last build. This check is based on the last modification times of JAR files.
++
++sources: recompile source files modified since the last build. In addition, if a source file has been deleted, then all source files are recompiled. This check is based on the modification times of source files rather than the modification times of the *.class files.
++
++classes: recompile source files (*.java) associated to no output file (*.class) or associated to an output file older than the source. This algorithm does not check if a source file has been removed, potentially leaving non-recompiled classes with references to classes that no longer exist.
++
++The sources and classes values are partially redundant, doing the same work in different ways. It is usually not necessary to specify those two values.
++
++modules: recompile modules and let the compiler decides which individual files to recompile. The compiler plugin does not enumerate the source files to recompile (actually, it does not scan at all the source directories). Instead, it only specifies the module to recompile using the --module option. The Java compiler will scan the source directories itself and compile only those source files that are newer than the corresponding files in the output directory.
++
++rebuild-on-add: modifier for recompiling all source files when the addition of a new file is detected. This flag is effective only when used together with sources or classes. When used with classes, it provides a way to detect class renaming (this is not needed with sources for detecting renaming).
++
++rebuild-on-change: modifier for recompiling all source files when a change is detected in at least one source file. This flag is effective only when used together with sources or classes. It does not rebuild when a new source file is added without change in other files, unless rebuild-on-add is also specified.
++
++none: the compiler plugin unconditionally specifies all sources to the Java compiler. This option is mutually exclusive with all other incremental compilation options.
++
++Limitations
++In all cases, the current compiler-plugin does not detect structural changes other than file addition or removal. For example, the plugin does not detect whether a method has been removed in a class. 
++Default value
++The default value depends on the context. If there is no annotation processor, then the default is &quot;options,dependencies,sources&quot;. It means that a full rebuild will be done if the compiler options or the dependencies changed, or if a source file has been deleted. Otherwise, only the modified source files will be recompiled. 
++If an annotation processor is present (e.g., proc set to a value other than &quot;none&quot;), then the default value is same as above with the addition of &quot;rebuild-on-add,rebuild-on-change&quot;. It means that a full rebuild will be done if any kind of change is detected.
++
++See also: staleMillis, fileExtensions, showCompilationChanges, createMissingPackageInfoClass</description>
++          <expression>${maven.compiler.incrementalCompilation}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>jdkToolchain</name>
@@ -2169,9 +2225,17 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Specify the requirements for this jdk toolchain for using a different javac than the one of the JRE used by Maven. This overrules the toolchain selected by the maven-toolchain-plugin &lt;https://maven.apache.org/plugins/maven-toolchains-plugin/&gt;.
-+(see Guide to Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; for more info) &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;11&lt;/version&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;1.8&lt;/version&gt; &lt;vendor&gt;zulu&lt;/vendor&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; note: requires at least Maven 3.3.1</description>
++          <description>Requirements for this JDK toolchain for using a different javac than the one of the JDK used by Maven. This overrules the toolchain selected by the maven-toolchain-plugin &lt;https://maven.apache.org/plugins/maven-toolchains-plugin/&gt;. See Guide to Toolchains &lt;https://maven.apache.org/guides/mini/guide-using-toolchains.html&gt; for more info. &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;11&lt;/version&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; &lt;configuration&gt; &lt;jdkToolchain&gt; &lt;version&gt;1.8&lt;/version&gt; &lt;vendor&gt;zulu&lt;/vendor&gt; &lt;/jdkToolchain&gt; ... &lt;/configuration&gt; 
++See also: fork, executable</description>
++        </parameter>
++        <parameter>
++          <name>mainOutputDirectory</name>
++          <type>java.nio.file.Path</type>
++          <required>true</required>
++          <editable>false</editable>
++          <description>The output directory of the main classes. This directory will be added to the class-path or module-path. Its value should be the same as CompilerMojo.outputDirectory.
++See also: CompilerMojo.outputDirectory</description>
++          <defaultValue>${project.build.outputDirectory}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>maxmem</name>
@@ -2179,7 +2243,9 @@
 +          <since>2.0.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the maximum size, in megabytes, of the memory allocation pool, ex. &quot;128&quot;, &quot;128m&quot; if fork is set to true.</description>
++          <description>Maximum size, in megabytes, of the memory allocation pool if fork is set to true. Examples: &quot;128&quot;, &quot;128M&quot;. Suffixes &quot;k&quot; (for kilobytes) and &quot;G&quot; (for gigabytes) are also accepted. If no suffix is provided, &quot;M&quot; is assumed.
++See also: fork</description>
++          <expression>${maven.compiler.maxmem}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>meminitial</name>
@@ -2187,50 +2253,66 @@
 +          <since>2.0.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Initial size, in megabytes, of the memory allocation pool, ex. &quot;64&quot;, &quot;64m&quot; if fork is set to true.</description>
++          <description>Initial size, in megabytes, of the memory allocation pool if fork is set to true. Examples: &quot;64&quot;, &quot;64M&quot;. Suffixes &quot;k&quot; (for kilobytes) and &quot;G&quot; (for gigabytes) are also accepted. If no suffix is provided, &quot;M&quot; is assumed.
++See also: fork</description>
++          <expression>${maven.compiler.meminitial}</expression>
++        </parameter>
++        <parameter>
++          <name>moduleVersion</name>
++          <type>java.lang.String</type>
++          <since>4.0.0</since>
++          <required>false</required>
++          <editable>true</editable>
++          <description>The --module-version argument for the Java compiler. This is ignored if not applicable, e.g., in non-modular projects.
++See also: javac --module-version &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-module-version&gt;</description>
++          <expression>${maven.compiler.moduleVersion}</expression>
++          <defaultValue>${project.version}</defaultValue>
 +        </parameter>
 +        <parameter>
-+          <name>mojoExecution</name>
-+          <type>org.apache.maven.plugin.MojoExecution</type>
-+          <since>3.0 needed for storing the status for the incremental build support.</since>
++          <name>mojoStatusPath</name>
++          <type>java.nio.file.Path</type>
 +          <required>true</required>
 +          <editable>false</editable>
-+          <description></description>
++          <description>Path to a file where to cache information about the last incremental build. This is used when &quot;incremental&quot; builds are enabled for detecting additions or removals of source files, or changes in plugin configuration. This file should be in the output directory and can be deleted at any time</description>
++          <defaultValue>${project.build.directory}/maven-status/${mojo.plugin.descriptor.artifactId}/${mojo.executionId}.cache</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>optimize</name>
-+          <type>boolean</type>
-+          <deprecated>This property is a no-op in javac.</deprecated>
++          <type>java.lang.Boolean</type>
++          <deprecated>This property is ignored.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to optimize the compiled code using the compiler&apos;s optimization methods.</description>
++          <description>Whether to optimize the compiled code using the compiler&apos;s optimization methods.</description>
++          <expression>${maven.compiler.optimize}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>outputDirectory</name>
-+          <type>java.io.File</type>
++          <type>java.nio.file.Path</type>
 +          <required>true</required>
 +          <editable>true</editable>
-+          <description>The directory where compiled test classes go. 
-+This parameter should only be modified in special cases. See the CompilerMojo.outputDirectory for more information.
-+
-+See also: CompilerMojo.outputDirectory</description>
++          <description>The directory where compiled test classes go. This parameter should only be modified in special cases. See the CompilerMojo.outputDirectory for more information.
++See also: CompilerMojo.outputDirectory, getOutputDirectory()</description>
++          <defaultValue>${project.build.testOutputDirectory}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>outputFileName</name>
 +          <type>java.lang.String</type>
++          <deprecated>Bundling many class files into a single file should be done by other plugins.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description>Sets the name of the output file when compiling a set of sources to a single file. 
-+
-+expression=&quot;${project.build.finalName}&quot;</description>
++expression=&quot;${project.build.finalName}&quot;
++</description>
 +        </parameter>
 +        <parameter>
 +          <name>outputTimestamp</name>
 +          <type>java.lang.String</type>
 +          <since>3.12.0</since>
++          <deprecated>Not used by the compiler plugin since it does not generate archive.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd&apos;T&apos;HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH &lt;https://reproducible-builds.org/docs/source-date-epoch/&gt;).</description>
++          <description>Timestamp for reproducible output archive entries. It can be either formatted as ISO 8601 yyyy-MM-dd&apos;T&apos;HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH &lt;https://reproducible-builds.org/docs/source-date-epoch/&gt;).</description>
++          <defaultValue>${project.build.outputTimestamp}</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>parameters</name>
@@ -2238,8 +2320,10 @@
 +          <since>3.6.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to generate metadata for reflection on method parameters.
++          <description>Whether to generate metadata for reflection on method parameters. If true, the -parameters option will be added to compiler arguments.
 +See also: javac -parameters &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-parameters&gt;</description>
++          <expression>${maven.compiler.parameters}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>proc</name>
@@ -2247,22 +2331,12 @@
 +          <since>2.2</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets whether annotation processing is performed or not. Only applies to JDK 1.6+ If not set, both compilation and annotation processing are performed at the same time.
-+
-+Allowed values are:
-+
-+* none - no annotation processing is performed. 
-+* only - only annotation processing is done, no compilation. 
-+* full - annotation processing and compilation. full is the default. Starting with JDK 21, this option must be set explicitly.
-+See also: javac -proc &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
-+        </parameter>
-+        <parameter>
-+          <name>project</name>
-+          <type>org.apache.maven.project.MavenProject</type>
-+          <required>true</required>
-+          <editable>false</editable>
-+          <description>The current project instance. This is used for propagating generated-sources paths as compile/testCompile source roots.</description>
++          <description>Configures if annotation processing and/or compilation are performed by the compiler. If set, the value will be appended to the -proc: compiler option. Possible values are: 
++* none – no annotation processing is performed, only compilation is done. 
++* only – only annotation processing is done, no compilation. 
++* full – annotation processing followed by compilation is done. The default value depends on the JDK used for the build. Prior to Java 23, the default was full, so annotation processing and compilation were executed without explicit configuration. For security reasons, starting with Java 23 no annotation processing is done if neither any -processor, -processor path or -processor module are set, or either only or full is set. So literally the default is none. It is recommended to always list the annotation processors you want to execute instead of using the proc configuration, to ensure that only desired processors are executed and not any &quot;hidden&quot; (and maybe malicious).
++See also: annotationProcessors, Inside Java 2024-06-18 Quality Heads up &lt;https://inside.java/2024/06/18/quality-heads-up/&gt;, javac -proc &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc&gt;, javac Annotation Processing &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing&gt;</description>
++          <expression>${maven.compiler.proc}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>release</name>
@@ -2270,132 +2344,142 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The -release argument for the Java compiler, supported since Java9
-+See also: javac -release &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release&gt;</description>
-+        </parameter>
-+        <parameter>
-+          <name>session</name>
-+          <type>org.apache.maven.execution.MavenSession</type>
-+          <required>true</required>
-+          <editable>false</editable>
-+          <description>The current build session instance. This is used for toolchain manager API calls.</description>
++          <description>The --release argument for the Java compiler when the sources do not declare this version. The suggested way to declare the target Java release is to specify it with the sources like below: &lt;build&gt; &lt;sources&gt; &lt;source&gt; &lt;directory&gt;src/main/java&lt;/directory&gt; &lt;targetVersion&gt;17&lt;/targetVersion&gt; &lt;/source&gt; &lt;/sources&gt; &lt;/build&gt; If such &lt;targetVersion&gt; element is found, it has precedence over this release property. If a source does not declare a target Java version, then the value of this release property is used as a fallback. If omitted, the compiler will generate bytecodes for the Java version running the compiler.
++See also: javac --release &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release&gt;</description>
++          <expression>${maven.compiler.release}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>showCompilationChanges</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description></description>
++          <description>Whether to provide more details about why a module is rebuilt. This is used only if incrementalCompilation is set to something else than &quot;none&quot;.
++See also: incrementalCompilation</description>
++          <expression>${maven.compiler.showCompilationChanges}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>showDeprecation</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets whether to show source locations where deprecated APIs are used.</description>
++          <description>Whether to show source locations where deprecated APIs are used. If true, then the -deprecation option will be added to compiler arguments. That option is itself a shorthand for -Xlint:deprecation.
++See also: showWarnings, failOnWarning</description>
++          <expression>${maven.compiler.showDeprecation}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>showWarnings</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to false to disable warnings during compilation.</description>
++          <description>Whether to show compilation warnings. If false, then the -nowarn option will be added to compiler arguments. That option is itself a shorthand for -Xlint:none.
++See also: showDeprecation, failOnWarning</description>
++          <expression>${maven.compiler.showWarnings}</expression>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>skip</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set this to &apos;true&apos; to bypass compilation of test sources. Its use is NOT RECOMMENDED, but quite convenient on occasion.</description>
++          <description>Whether to bypass compilation of test sources. Its use is not recommended, but quite convenient on occasion.
++See also: CompilerMojo.skipMain</description>
++          <expression>${maven.test.skip}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>skipMultiThreadWarning</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>2.5</since>
++          <deprecated>Deprecated as a consequence of compilerReuseStrategy deprecation.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
 +          <description></description>
++          <expression>${maven.compiler.skipMultiThreadWarning}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>source</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+The -source argument for the Java compiler.
-+
-+NOTE: 
-+
-+Since 3.8.0 the default value has changed from 1.5 to 1.6
-+
-+Since 3.9.0 the default value has changed from 1.6 to 1.7
++          <description>The --source argument for the Java compiler. 
++Notes:
 +
-+Since 3.11.0 the default value has changed from 1.7 to 1.8
-+
-+See also: javac -source &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source&gt;</description>
++* Since 3.8.0 the default value has changed from 1.5 to 1.6. 
++* Since 3.9.0 the default value has changed from 1.6 to 1.7. 
++* Since 3.11.0 the default value has changed from 1.7 to 1.8. 
++* Since 4.0.0-beta-2 the default value has been removed. As of Java 9, the release parameter is preferred. 
++See also: javac --source &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source&gt;</description>
++          <expression>${maven.compiler.source}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>staleMillis</name>
 +          <type>int</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Sets the granularity in milliseconds of the last modification date for testing whether a source needs recompilation.</description>
++          <description>The granularity in milliseconds of the last modification date for testing whether a source needs recompilation.
++See also: incrementalCompilation</description>
++          <expression>${lastModGranularityMs}</expression>
++          <defaultValue>0</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>target</name>
 +          <type>java.lang.String</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+The -target argument for the Java compiler.
-+
-+NOTE: 
-+
-+Since 3.8.0 the default value has changed from 1.5 to 1.6
++          <description>The --target argument for the Java compiler. 
++Notes:
 +
-+Since 3.9.0 the default value has changed from 1.6 to 1.7
-+
-+Since 3.11.0 the default value has changed from 1.7 to 1.8
-+
-+See also: javac -target &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target&gt;</description>
++* Since 3.8.0 the default value has changed from 1.5 to 1.6. 
++* Since 3.9.0 the default value has changed from 1.6 to 1.7. 
++* Since 3.11.0 the default value has changed from 1.7 to 1.8. 
++* Since 4.0.0-beta-2 the default value has been removed. As of Java 9, the release parameter is preferred. 
++See also: javac --target &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target&gt;</description>
++          <expression>${maven.compiler.target}</expression>
++        </parameter>
++        <parameter>
++          <name>testCompilerArgs</name>
++          <type>java.util.List</type>
++          <since>4.0.0</since>
++          <required>false</required>
++          <editable>true</editable>
++          <description>The arguments to be passed to the test compiler. If this parameter is specified, it replaces compilerArgs. Otherwise, the compilerArgs parameter is used.
++See also: CompilerMojo#compilerArgs</description>
 +        </parameter>
 +        <parameter>
 +          <name>testCompilerArgument</name>
 +          <type>java.lang.String</type>
 +          <since>2.1</since>
++          <deprecated>Use testCompilerArgs instead.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the unformatted argument string to be passed to test compiler if fork is set to true.
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+</description>
++          <description>The single argument string to be passed to the test compiler. If this parameter is specified, it replaces compilerArgument. Otherwise, the compilerArgument parameter is used.
++See also: CompilerMojo#compilerArgument</description>
 +        </parameter>
 +        <parameter>
 +          <name>testCompilerArguments</name>
 +          <type>java.util.Map</type>
 +          <since>2.1</since>
++          <deprecated>Replaced by testCompilerArgs for consistency with the main phase.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+Sets the arguments to be passed to test compiler (prepending a dash) if fork is set to true.
-+
-+This is because the list of valid arguments passed to a Java compiler varies based on the compiler version.
-+</description>
++          <description>The arguments to be passed to test compiler.</description>
 +        </parameter>
 +        <parameter>
 +          <name>testExcludes</name>
 +          <type>java.util.Set</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of exclusion filters for the compiler.</description>
++          <description>A set of exclusion filters for the compiler.
++See also: CompilerMojo.excludes</description>
 +        </parameter>
 +        <parameter>
 +          <name>testIncludes</name>
 +          <type>java.util.Set</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of inclusion filters for the compiler.</description>
++          <description>A set of inclusion filters for the compiler.
++See also: CompilerMojo.includes</description>
 +        </parameter>
 +        <parameter>
 +          <name>testIncrementalExcludes</name>
@@ -2403,14 +2487,8 @@
 +          <since>3.11</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>A list of exclusion filters for the incremental calculation.</description>
-+        </parameter>
-+        <parameter>
-+          <name>testPath</name>
-+          <type>java.util.List</type>
-+          <required>false</required>
-+          <editable>false</editable>
-+          <description></description>
++          <description>A set of exclusion filters for the incremental calculation. Updated files, if excluded by this filter, will not cause the project to be rebuilt.
++See also: CompilerMojo.incrementalExcludes</description>
 +        </parameter>
 +        <parameter>
 +          <name>testRelease</name>
@@ -2418,7 +2496,9 @@
 +          <since>3.6</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>the -release argument for the test Java compiler</description>
++          <description>the --release argument for the test Java compiler
++See also: CompilerMojo#release</description>
++          <expression>${maven.compiler.testRelease}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>testSource</name>
@@ -2426,7 +2506,9 @@
 +          <since>2.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The -source argument for the test Java compiler.</description>
++          <description>The --source argument for the test Java compiler.
++See also: CompilerMojo#source</description>
++          <expression>${maven.compiler.testSource}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>testTarget</name>
@@ -2434,195 +2516,100 @@
 +          <since>2.1</since>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>The -target argument for the test Java compiler.</description>
++          <description>The --target argument for the test Java compiler.
++See also: CompilerMojo#target</description>
++          <expression>${maven.compiler.testTarget}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>useIncrementalCompilation</name>
-+          <type>boolean</type>
++          <type>java.lang.Boolean</type>
 +          <since>3.1</since>
++          <deprecated>Replaced by incrementalCompilation. A value of true in this old property is equivalent to &quot;dependencies,sources,rebuild-on-add&quot; in the new property, and a value of false is equivalent to &quot;classes&quot;.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+to enable/disable incremental compilation feature.
-+
-+This leads to two different modes depending on the underlying compiler. The default javac compiler does the following:
-+
-+* true (default) in this mode the compiler plugin determines whether any JAR files the current module depends on have changed in the current build run; or any source file was added, removed or changed since the last compilation. If this is the case, the compiler plugin recompiles all sources. 
-+* false (not recommended) this only compiles source files which are newer than their corresponding class files, namely which have changed since the last compilation. This does not recompile other classes which use the changed class, potentially leaving them with references to methods that no longer exist, leading to errors at runtime. </description>
++          <description>Whether to enable/disable incremental compilation feature.</description>
++          <expression>${maven.compiler.useIncrementalCompilation}</expression>
 +        </parameter>
 +        <parameter>
 +          <name>useModulePath</name>
 +          <type>boolean</type>
 +          <since>3.11</since>
++          <deprecated>Use &quot;claspath-jar&quot; dependency type instead, and avoid module-info.java in tests.</deprecated>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>
-+When true, uses the module path when compiling with a release or target of 9+ and module-info.java or module-info.class is present. When false, always uses the class path.
-+</description>
++          <description>Whether to place the main classes on the module path when module-info is present. When false, always places the main classes on the class path. Dependencies are also placed on the class-path, unless their type is module-jar.</description>
++          <defaultValue>true</defaultValue>
 +        </parameter>
 +        <parameter>
 +          <name>verbose</name>
 +          <type>boolean</type>
 +          <required>false</required>
 +          <editable>true</editable>
-+          <description>Set to true to show messages about what the compiler is doing.
++          <description>Whether to show messages about what the compiler is doing. If true, then the -verbose option will be added to compiler arguments. In addition, files such as target/javac.args will be generated even on successful compilation.
 +See also: javac -verbose &lt;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-verbose&gt;</description>
++          <expression>${maven.compiler.verbose}</expression>
++          <defaultValue>false</defaultValue>
 +        </parameter>
 +      </parameters>
-+      <configuration>
-+        <annotationProcessorPathsUseDepMgmt implementation="boolean" default-value="false"/>
-+        <basedir implementation="java.io.File" default-value="${basedir}"/>
-+        <buildDirectory implementation="java.io.File" default-value="${project.build.directory}"/>
-+        <compileSourceRoots implementation="java.util.List" default-value="${project.testCompileSourceRoots}"/>
-+        <compilerId implementation="java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId>
-+        <compilerReuseStrategy implementation="java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
-+        <compilerVersion implementation="java.lang.String">${maven.compiler.compilerVersion}</compilerVersion>
-+        <createMissingPackageInfoClass implementation="boolean" default-value="true">${maven.compiler.createMissingPackageInfoClass}</createMissingPackageInfoClass>
-+        <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug>
-+        <debugFileName implementation="java.lang.String" default-value="javac-test"/>
-+        <debuglevel implementation="java.lang.String">${maven.compiler.debuglevel}</debuglevel>
-+        <enablePreview implementation="boolean" default-value="false">${maven.compiler.enablePreview}</enablePreview>
-+        <encoding implementation="java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding>
-+        <executable implementation="java.lang.String">${maven.compiler.executable}</executable>
-+        <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError>
-+        <failOnWarning implementation="boolean" default-value="false">${maven.compiler.failOnWarning}</failOnWarning>
-+        <fileExtensions implementation="java.util.Set" default-value="class,jar"/>
-+        <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
-+        <forceLegacyJavacApi implementation="boolean" default-value="false">${maven.compiler.forceLegacyJavacApi}</forceLegacyJavacApi>
-+        <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork>
-+        <generatedTestSourcesDirectory implementation="java.io.File" default-value="${project.build.directory}/generated-test-sources/test-annotations"/>
-+        <implicit implementation="java.lang.String">${maven.compiler.implicit}</implicit>
-+        <maxmem implementation="java.lang.String">${maven.compiler.maxmem}</maxmem>
-+        <meminitial implementation="java.lang.String">${maven.compiler.meminitial}</meminitial>
-+        <mojoExecution implementation="org.apache.maven.plugin.MojoExecution" default-value="${mojoExecution}"/>
-+        <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize>
-+        <outputDirectory implementation="java.io.File" default-value="${project.build.testOutputDirectory}"/>
-+        <outputTimestamp implementation="java.lang.String" default-value="${project.build.outputTimestamp}"/>
-+        <parameters implementation="boolean" default-value="false">${maven.compiler.parameters}</parameters>
-+        <proc implementation="java.lang.String">${maven.compiler.proc}</proc>
-+        <project implementation="org.apache.maven.project.MavenProject" default-value="${project}"/>
-+        <release implementation="java.lang.String">${maven.compiler.release}</release>
-+        <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
-+        <showCompilationChanges implementation="boolean" default-value="false">${maven.compiler.showCompilationChanges}</showCompilationChanges>
-+        <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
-+        <showWarnings implementation="boolean" default-value="true">${maven.compiler.showWarnings}</showWarnings>
-+        <skip implementation="boolean">${maven.test.skip}</skip>
-+        <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
-+        <source implementation="java.lang.String" default-value="1.8">${maven.compiler.source}</source>
-+        <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis>
-+        <target implementation="java.lang.String" default-value="1.8">${maven.compiler.target}</target>
-+        <testPath implementation="java.util.List" default-value="${project.testClasspathElements}"/>
-+        <testRelease implementation="java.lang.String">${maven.compiler.testRelease}</testRelease>
-+        <testSource implementation="java.lang.String">${maven.compiler.testSource}</testSource>
-+        <testTarget implementation="java.lang.String">${maven.compiler.testTarget}</testTarget>
-+        <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
-+        <useModulePath implementation="boolean" default-value="true"/>
-+        <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
-+      </configuration>
-+      <requirements>
-+        <requirement>
-+          <role>org.apache.maven.artifact.handler.manager.ArtifactHandlerManager</role>
-+          <field-name>artifactHandlerManager</field-name>
-+        </requirement>
-+        <requirement>
-+          <role>org.codehaus.plexus.compiler.manager.CompilerManager</role>
-+          <field-name>compilerManager</field-name>
-+        </requirement>
-+        <requirement>
-+          <role>org.eclipse.aether.RepositorySystem</role>
-+          <field-name>repositorySystem</field-name>
-+        </requirement>
-+        <requirement>
-+          <role>org.apache.maven.toolchain.ToolchainManager</role>
-+          <field-name>toolchainManager</field-name>
-+        </requirement>
-+      </requirements>
 +    </mojo>
 +  </mojos>
-+  <dependencies>
-+    <dependency>
-+      <groupId>org.slf4j</groupId>
-+      <artifactId>slf4j-api</artifactId>
-+      <type>jar</type>
-+      <version>1.7.36</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>javax.inject</groupId>
-+      <artifactId>javax.inject</artifactId>
-+      <type>jar</type>
-+      <version>1</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.ow2.asm</groupId>
-+      <artifactId>asm</artifactId>
-+      <type>jar</type>
-+      <version>9.8</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.apache.maven.shared</groupId>
-+      <artifactId>maven-shared-utils</artifactId>
-+      <type>jar</type>
-+      <version>3.4.2</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>commons-io</groupId>
-+      <artifactId>commons-io</artifactId>
-+      <type>jar</type>
-+      <version>2.11.0</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.apache.maven.shared</groupId>
-+      <artifactId>maven-shared-incremental</artifactId>
-+      <type>jar</type>
-+      <version>1.1</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.codehaus.plexus</groupId>
-+      <artifactId>plexus-java</artifactId>
-+      <type>jar</type>
-+      <version>1.5.0</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>com.thoughtworks.qdox</groupId>
-+      <artifactId>qdox</artifactId>
-+      <type>jar</type>
-+      <version>2.2.0</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.codehaus.plexus</groupId>
-+      <artifactId>plexus-compiler-api</artifactId>
-+      <type>jar</type>
-+      <version>2.15.0</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.codehaus.plexus</groupId>
-+      <artifactId>plexus-compiler-manager</artifactId>
-+      <type>jar</type>
-+      <version>2.15.0</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.codehaus.plexus</groupId>
-+      <artifactId>plexus-compiler-javac</artifactId>
-+      <type>jar</type>
-+      <version>2.15.0</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.codehaus.plexus</groupId>
-+      <artifactId>plexus-utils</artifactId>
-+      <type>jar</type>
-+      <version>4.0.1</version>
-+    </dependency>
-+  </dependencies>
 +</plugin>
---- maven-compiler-plugin-3.14.1/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojo.java	1970-01-01 01:00:00.000000000 +0100
-+++ maven-compiler-plugin-3.14.1/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojo.java	2025-09-21 13:28:25.168614657 +0200
-@@ -0,0 +1,448 @@
+diff -urEbwBN a/src/main/java/org/apache/maven/plugin/compiler/CompilerMojoFactory.java b/src/main/java/org/apache/maven/plugin/compiler/CompilerMojoFactory.java
+--- a/src/main/java/org/apache/maven/plugin/compiler/CompilerMojoFactory.java	1970-01-01 01:00:00.000000000 +0100
++++ b/src/main/java/org/apache/maven/plugin/compiler/CompilerMojoFactory.java	2025-10-19 13:27:28.242455927 +0200
+@@ -0,0 +1,11 @@
++package org.apache.maven.plugin.compiler;
++
++import org.apache.maven.api.annotations.Generated;
++import org.apache.maven.api.di.Named;
++
++// $FF: synthetic class
++@Named("org.apache.maven.plugins:maven-compiler-plugin:@VERSION@:compile")
++@Generated
++public class CompilerMojoFactory extends CompilerMojo
++{
++}
+diff -urEbwBN a/src/main/java/org/apache/maven/plugin/compiler/TestCompilerMojoFactory.java b/src/main/java/org/apache/maven/plugin/compiler/TestCompilerMojoFactory.java
+--- a/src/main/java/org/apache/maven/plugin/compiler/TestCompilerMojoFactory.java	1970-01-01 01:00:00.000000000 +0100
++++ b/src/main/java/org/apache/maven/plugin/compiler/TestCompilerMojoFactory.java	2025-10-19 13:27:28.242531062 +0200
+@@ -0,0 +1,11 @@
++package org.apache.maven.plugin.compiler;
++
++import org.apache.maven.api.annotations.Generated;
++import org.apache.maven.api.di.Named;
++
++// $FF: synthetic class
++@Named("org.apache.maven.plugins:maven-compiler-plugin:@VERSION@:testCompile")
++@Generated
++public class TestCompilerMojoFactory extends TestCompilerMojo
++{
++}
+diff -urEbwBN a/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojoFactory.java b/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojoFactory.java
+--- a/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojoFactory.java	1970-01-01 01:00:00.000000000 +0100
++++ b/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojoFactory.java	2025-10-19 13:27:28.242683149 +0200
+@@ -0,0 +1,11 @@
 +package org.apache.maven.plugins.maven_compiler_plugin;
 +
-+import org.apache.maven.plugin.AbstractMojo;
-+import org.apache.maven.plugin.MojoExecutionException;
-+import org.apache.maven.plugins.annotations.Mojo;
-+import org.apache.maven.plugins.annotations.Parameter;
++import org.apache.maven.api.annotations.Generated;
++import org.apache.maven.api.di.Named;
++
++// $FF: synthetic class
++@Named("org.apache.maven.plugins:maven-compiler-plugin:@VERSION@:help")
++@Generated
++public class HelpMojoFactory extends HelpMojo
++{
++}
+diff -urEbwBN a/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojo.java b/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojo.java
+--- a/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojo.java	1970-01-01 01:00:00.000000000 +0100
++++ b/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojo.java	2025-10-19 13:27:28.242756694 +0200
+@@ -0,0 +1,458 @@
++package org.apache.maven.plugins.maven_compiler_plugin;
++
++import org.apache.maven.api.di.Inject;
++import org.apache.maven.api.plugin.MojoException;
++import org.apache.maven.api.plugin.annotations.Mojo;
++import org.apache.maven.api.plugin.annotations.Parameter;
++import org.apache.maven.api.plugin.Log;
 +
 +import org.w3c.dom.Document;
 +import org.w3c.dom.Element;
@@ -2643,34 +2630,33 @@
 + * Call <code>mvn compiler:help -Ddetail=true -Dgoal=&lt;goal-name&gt;</code> to display parameter details.
 + * @author maven-plugin-tools
 + */
-+@Mojo( name = "help", requiresProject = false, threadSafe = true )
++@Mojo( name = "help", projectRequired = false )
 +public class HelpMojo
-+    extends AbstractMojo
++    implements org.apache.maven.api.plugin.Mojo
 +{
++    @Inject
++    private Log logger;
++
 +    /**
 +     * If <code>true</code>, display all settable properties for each goal.
-+     *
 +     */
 +    @Parameter( property = "detail", defaultValue = "false" )
 +    private boolean detail;
 +
 +    /**
 +     * The name of the goal for which to show help. If unspecified, all goals will be displayed.
-+     *
 +     */
 +    @Parameter( property = "goal" )
 +    private java.lang.String goal;
 +
 +    /**
 +     * The maximum length of a display line, should be positive.
-+     *
 +     */
 +    @Parameter( property = "lineLength", defaultValue = "80" )
 +    private int lineLength;
 +
 +    /**
 +     * The number of spaces per indentation level, should be positive.
-+     *
 +     */
 +    @Parameter( property = "indentSize", defaultValue = "2" )
 +    private int indentSize;
@@ -2682,14 +2668,14 @@
 +    private static final int DEFAULT_LINE_LENGTH = 80;
 +
 +    private Document build()
-+        throws MojoExecutionException
++        throws MojoException
 +    {
-+        getLog().debug( "load plugin-help.xml: " + PLUGIN_HELP_PATH );
++        logger.debug( "load plugin-help.xml: " + PLUGIN_HELP_PATH );
 +        try ( InputStream is = getClass().getResourceAsStream( PLUGIN_HELP_PATH ) )
 +        {
 +            if ( is == null )
 +            {
-+                throw new MojoExecutionException( "Could not find plugin descriptor at " + PLUGIN_HELP_PATH );
++                throw new MojoException( "Could not find plugin descriptor at " + PLUGIN_HELP_PATH );
 +            }
 +            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
 +            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
@@ -2697,15 +2683,15 @@
 +        }
 +        catch ( IOException e )
 +        {
-+            throw new MojoExecutionException( e.getMessage(), e );
++            throw new MojoException( e.getMessage(), e );
 +        }
 +        catch ( ParserConfigurationException e )
 +        {
-+            throw new MojoExecutionException( e.getMessage(), e );
++            throw new MojoException( e.getMessage(), e );
 +        }
 +        catch ( SAXException e )
 +        {
-+            throw new MojoExecutionException( e.getMessage(), e );
++            throw new MojoException( e.getMessage(), e );
 +        }
 +    }
 +
@@ -2714,16 +2700,16 @@
 +     */
 +    @Override
 +    public void execute()
-+        throws MojoExecutionException
++        throws MojoException
 +    {
 +        if ( lineLength <= 0 )
 +        {
-+            getLog().warn( "The parameter 'lineLength' should be positive, using '80' as default." );
++            logger.warn( "The parameter 'lineLength' should be positive, using '80' as default." );
 +            lineLength = DEFAULT_LINE_LENGTH;
 +        }
 +        if ( indentSize <= 0 )
 +        {
-+            getLog().warn( "The parameter 'indentSize' should be positive, using '2' as default." );
++            logger.warn( "The parameter 'indentSize' should be positive, using '2' as default." );
 +            indentSize = 2;
 +        }
 +
@@ -2772,9 +2758,9 @@
 +            writeGoal( sb, goalPrefix, (Element) mojo );
 +        }
 +
-+        if ( getLog().isInfoEnabled() )
++        if ( logger.isInfoEnabled() )
 +        {
-+            getLog().info( sb.toString() );
++            logger.info( sb.toString() );
 +        }
 +    }
 +
@@ -2785,22 +2771,37 @@
 +    }
 +
 +    private static String getValue( Node node, String elementName )
-+        throws MojoExecutionException
++        throws MojoException
 +    {
 +        return getSingleChild( node, elementName ).getTextContent();
 +    }
 +
++    private static String getValueOr( Node node, String elementName, String def )
++        throws MojoException
++    {
++        List<Node> namedChild = findNamedChild( node, elementName );
++        if ( namedChild.isEmpty() )
++        {
++            return def;
++        }
++        if ( namedChild.size() > 1 )
++        {
++            throw new MojoException( "Multiple " + elementName + " in plugin-help.xml" );
++        }
++        return namedChild.get( 0 ).getTextContent();
++    }
++
 +    private static Node getSingleChild( Node node, String elementName )
-+        throws MojoExecutionException
++        throws MojoException
 +    {
 +        List<Node> namedChild = findNamedChild( node, elementName );
 +        if ( namedChild.isEmpty() )
 +        {
-+            throw new MojoExecutionException( "Could not find " + elementName + " in plugin-help.xml" );
++            throw new MojoException( "Could not find " + elementName + " in plugin-help.xml" );
 +        }
 +        if ( namedChild.size() > 1 )
 +        {
-+            throw new MojoExecutionException( "Multiple " + elementName + " in plugin-help.xml" );
++            throw new MojoException( "Multiple " + elementName + " in plugin-help.xml" );
 +        }
 +        return namedChild.get( 0 );
 +    }
@@ -2821,7 +2822,7 @@
 +    }
 +
 +    private static Node findSingleChild( Node node, String elementName )
-+        throws MojoExecutionException
++        throws MojoException
 +    {
 +        List<Node> elementsByTagName = findNamedChild( node, elementName );
 +        if ( elementsByTagName.isEmpty() )
@@ -2830,16 +2831,15 @@
 +        }
 +        if ( elementsByTagName.size() > 1 )
 +        {
-+            throw new MojoExecutionException( "Multiple " + elementName + "in plugin-help.xml" );
++            throw new MojoException( "Multiple " + elementName + "in plugin-help.xml" );
 +        }
 +        return elementsByTagName.get( 0 );
 +    }
 +
 +    private void writeGoal( StringBuilder sb, String goalPrefix, Element mojo )
-+        throws MojoExecutionException
++        throws MojoException
 +    {
 +        String mojoGoal = getValue( mojo, "goal" );
-+        Node configurationElement = findSingleChild( mojo, "configuration" );
 +        Node description = findSingleChild( mojo, "description" );
 +        if ( goal == null || goal.length() <= 0 || mojoGoal.equals( goal ) )
 +        {
@@ -2869,28 +2869,22 @@
 +
 +                for ( Node parameter : parameters )
 +                {
-+                    writeParameter( sb, parameter, configurationElement );
++                    writeParameter( sb, parameter );
 +                }
 +            }
 +        }
 +    }
 +
-+    private void writeParameter( StringBuilder sb, Node parameter, Node configurationElement )
-+        throws MojoExecutionException
++    private void writeParameter( StringBuilder sb, Node parameter )
++        throws MojoException
 +    {
 +        String parameterName = getValue( parameter, "name" );
 +        String parameterDescription = getValue( parameter, "description" );
 +
-+        Element fieldConfigurationElement = null;
-+        if ( configurationElement != null )
++        String parameterDefaultValue = getValueOr( parameter, "defaultValue", "" );
++        if ( isNotEmpty( parameterDefaultValue ) )
 +        {
-+          fieldConfigurationElement =  (Element) findSingleChild( configurationElement, parameterName );
-+        }
-+
-+        String parameterDefaultValue = "";
-+        if ( fieldConfigurationElement != null && fieldConfigurationElement.hasAttribute( "default-value" ) )
-+        {
-+            parameterDefaultValue = " (Default: " + fieldConfigurationElement.getAttribute( "default-value" ) + ")";
++            parameterDefaultValue = " (Default: " + parameterDefaultValue + ")";
 +        }
 +        append( sb, parameterName + parameterDefaultValue, 2 );
 +        Node deprecated = findSingleChild( parameter, "deprecated" );
@@ -2906,9 +2900,11 @@
 +        {
 +            append( sb, "Required: Yes", 3 );
 +        }
-+        if ( ( fieldConfigurationElement != null ) && isNotEmpty( fieldConfigurationElement.getTextContent() ) )
++
++        String parameterExpression = getValueOr( parameter, "expression", "" );
++        if ( isNotEmpty( parameterExpression ) )
 +        {
-+            String property = getPropertyFromExpression( fieldConfigurationElement.getTextContent() );
++            String property = getPropertyFromExpression( parameterExpression );
 +            append( sb, "User property: " + property, 3 );
 +        }
 +
--- maven-compiler-plugin-build.xml.orig
+++ maven-compiler-plugin-build.xml
@@ -14,13 +14,13 @@
             value="The Compiler Plugin is used to compile the sources of your project."/>
   <property name="project.groupId" value="org.apache.maven.plugins"/>
   <property name="project.artifactId" value="maven-compiler-plugin"/>
-  <property name="project.version" value="3.14.1"/>
+  <property name="project.version" value="4.0.0-beta-3"/>
   <property name="project.organization.name" value="The Apache Software Foundation"/>
 
-  <property name="spec.version" value="3.14"/>
+  <property name="spec.version" value="4.0"/>
 
-  <property name="compiler.release" value="8"/>
-  <property name="compiler.source" value="1.${compiler.release}"/>
+  <property name="compiler.release" value="17"/>
+  <property name="compiler.source" value="${compiler.release}"/>
   <property name="compiler.target" value="${compiler.source}"/>
 
   <property name="build.finalName" value="${project.artifactId}-${project.version}"/>
@@ -63,6 +63,10 @@
 
   <target name="compile" description="Compile the code">
     <mkdir dir="${build.outputDir}"/>
+    <replace dir="${build.srcDir}" value="${project.version}">
+      <include name="**/*.java"/>
+      <replacetoken>@VERSION@</replacetoken>
+    </replace>
     <javac destdir="${build.outputDir}"
            nowarn="false"
            debug="true"
@@ -70,10 +74,8 @@
            optimize="false"
            deprecation="true"
            release="${compiler.release}"
-           target="${compiler.target}"
            verbose="false"
-           fork="false"
-           source="${compiler.source}">
+           fork="false">
       <src>
         <pathelement location="${build.srcDir}"/>
       </src>
--- maven-compiler-plugin.spec.orig
+++ maven-compiler-plugin.spec
@@ -1,7 +1,7 @@
 #
 # spec file for package maven-compiler-plugin
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -23,27 +23,20 @@
 %bcond_with bootstrap
 %endif
 %global base_name maven-compiler-plugin
-Version:        3.14.1
+%global file_version 4.0.0-beta-3
+Version:        4.0.0~20251015.git51303cf
 Release:        0
 Summary:        Maven Compiler Plugin
 License:        Apache-2.0
 Group:          Development/Libraries/Java
 URL:            https://maven.apache.org/plugins/maven-compiler-plugin
-Source0:        https://archive.apache.org/dist/maven/plugins/%{base_name}-%{version}-source-release.zip
+Source0:        %{base_name}-%{version}.tar.xz
 Source1:        %{base_name}-build.xml
 Patch0:         %{base_name}-bootstrap-resources.patch
+Patch1:         0001-Don-t-conflict-source-and-release.patch
 BuildRequires:  javapackages-local
-BuildRequires:  maven-plugin-annotations
-BuildRequires:  maven-resolver1-api
-BuildRequires:  maven-resolver1-util
-BuildRequires:  maven-shared-incremental
-BuildRequires:  maven-shared-utils
-BuildRequires:  maven3-lib
+BuildRequires:  maven-lib
 BuildRequires:  objectweb-asm
-BuildRequires:  plexus-compiler >= 2.13
-BuildRequires:  plexus-languages
-BuildRequires:  plexus-utils
-BuildRequires:  unzip
 BuildRequires:  xmvn-install
 BuildRequires:  xmvn-resolve
 BuildRequires:  mvn(org.apache.maven.plugins:maven-plugins:pom:)
@@ -89,45 +82,31 @@ API documentation for %{name}.
 cp %{SOURCE1} build.xml
 %patch -P 0 -p1
 %endif
+%patch -P 1 -p1
 
-%pom_remove_dep :::test
+mkdir -p .mvn
 
-# There is nothing to index and this creates a cycle
-%pom_remove_plugin org.eclipse.sisu:sisu-maven-plugin
+%pom_remove_dep :::test
 
 %pom_xpath_remove pom:project/pom:parent/pom:relativePath
 
-%pom_xpath_set pom:project/pom:properties/pom:mavenVersion 3
-
 %build
 %if %{with bootstrap}
 mkdir -p lib
 build-jar-repository -s lib \
-    maven/maven-artifact-3 \
-    maven/maven-core-3 \
-    maven/maven-model-3 \
-    maven/maven-plugin-api-3 \
-    maven-plugin-tools/maven-plugin-annotations \
-    maven-resolver/maven-resolver-api-1 \
-    maven-resolver/maven-resolver-util-1 \
-    maven-shared-incremental/maven-shared-incremental \
-    maven-shared-utils/maven-shared-utils \
-    objectweb-asm/asm-all \
-    plexus-compiler/plexus-compiler-api \
-    plexus-compiler/plexus-compiler-manager \
-    plexus-languages/plexus-java \
-    plexus/utils
-%{ant} -Dtest.skip=true jar
+    maven/maven-api-annotations \
+    maven/maven-api-core \
+    maven/maven-api-di \
+    maven/maven-api-model \
+    objectweb-asm/asm
+ant -Dtest.skip=true jar
 %else
 xmvn --batch-mode --offline \
     -Dmaven.test.skip=true \
-%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 9}%{!?pkg_vcmp:0}
-    -Dmaven.compiler.release=8 \
-%endif
     package org.apache.maven.plugins:maven-javadoc-plugin:aggregate
 %endif
 
-%{mvn_artifact} pom.xml target/%{base_name}-%{version}.jar
+%{mvn_artifact} pom.xml target/%{base_name}-%{file_version}.jar
 
 %install
 %mvn_install
openSUSE Build Service is sponsored by