File maven-compiler-plugin-bootstrap-resources.patch of Package maven-compiler-plugin
--- maven-compiler-plugin-3.14.0/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.0/src/main/filtered-resources/META-INF/maven/org.apache.maven.plugins/maven-compiler-plugin/plugin-help.xml 2025-02-19 12:26:37.944483922 +0100
@@ -0,0 +1,1185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Generated by maven-plugin-tools 3.15 (for help mojo with limited elements)-->
+
+<plugin>
+ <name>${project.name}</name>
+ <description>${project.description}</description>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>${project.artifactId}</artifactId>
+ <version>${project.version}</version>
+ <goalPrefix>compiler</goalPrefix>
+ <mojos>
+ <mojo>
+ <goal>compile</goal>
+ <description>Compiles application sources. By default uses the javac <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html> compiler of the JDK used to execute Maven. This can be overwritten through Toolchains <https://maven.apache.org/guides/mini/guide-using-toolchains.html> or parameter compilerId.
+See also: javac Command <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html></description>
+ <requiresDependencyResolution>compile</requiresDependencyResolution>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>true</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <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<org.apache.maven.plugin.compiler.DependencyCoordinate></type>
+ <since>3.5</since>
+ <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.
+
+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:
+<configuration> <annotationProcessorPaths> <path> <groupId>org.sample</groupId> <artifactId>sample-annotation-processor</artifactId> <version>1.2.3</version> <!-- Optional - taken from dependency management if not specified --> <!-- Optionally exclude transitive dependencies --> <exclusions> <exclusion> <groupId>org.sample</groupId> <artifactId>sample-dependency</artifactId> </exclusion> </exclusions> </path> <!-- ... more ... --> </annotationProcessorPaths> </configuration> Note: Exclusions are supported from version 3.11.0.
+See also: javac -processorpath <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor-path>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>annotationProcessorPathsUseDepMgmt</name>
+ <type>boolean</type>
+ <since>3.12.0</since>
+ <required>false</required>
+ <editable>true</editable>
+ <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>
+ </parameter>
+ <parameter>
+ <name>annotationProcessors</name>
+ <type>java.lang.String[]</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>compileSourceRoots</name>
+ <type>java.util.List<java.lang.String></type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The source directories containing the sources to be compiled.</description>
+ </parameter>
+ <parameter>
+ <name>compilerArgs</name>
+ <type>java.util.List<java.lang.String></type>
+ <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: <compilerArgs> <arg>-Xmaxerrs</arg> <arg>1000</arg> <arg>-Xlint</arg> <arg>-J-Duser.language=en_us</arg> </compilerArgs>
+See also: javac -J <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J></description>
+ </parameter>
+ <parameter>
+ <name>compilerArgument</name>
+ <type>java.lang.String</type>
+ <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.
+
+See also: javac -J <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J></description>
+ </parameter>
+ <parameter>
+ <name>compilerArguments</name>
+ <type>java.util.Map<java.lang.String, java.lang.String></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:
+<compilerArguments> <Xmaxerrs>1000</Xmaxerrs> <Xlint/> <Xlint:-path/> <Averbose>true</Averbose> </compilerArguments> </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>
+ </parameter>
+ <parameter>
+ <name>compilerReuseStrategy</name>
+ <type>java.lang.String</type>
+ <since>2.5</since>
+ <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>
+ </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>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Version of the compiler to use, ex. "1.3", "1.5", if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>createMissingPackageInfoClass</name>
+ <type>boolean</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>debug</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to include debugging information in the compiled class files.
+See also: javac -g <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g>, debuglevel</description>
+ </parameter>
+ <parameter>
+ <name>debugFileName</name>
+ <type>java.lang.String</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>debuglevel</name>
+ <type>java.lang.String</type>
+ <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] <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom></description>
+ </parameter>
+ <parameter>
+ <name>enablePreview</name>
+ <type>boolean</type>
+ <since>3.10.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to enable preview language features of the java compiler
+See also: javac --enable-preview <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-enable-preview></description>
+ </parameter>
+ <parameter>
+ <name>encoding</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The -encoding argument for the Java compiler.
+See also: javac -encoding <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-encoding></description>
+ </parameter>
+ <parameter>
+ <name>excludes</name>
+ <type>java.util.Set<java.lang.String></type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>A list 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>
+ </parameter>
+ <parameter>
+ <name>failOnError</name>
+ <type>boolean</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>failOnWarning</name>
+ <type>boolean</type>
+ <since>3.6</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Indicates whether the build will continue even if there are compilation warnings.</description>
+ </parameter>
+ <parameter>
+ <name>fileExtensions</name>
+ <type>java.util.Set<java.lang.String></type>
+ <since>3.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>File extensions to check timestamp for incremental build.</description>
+ </parameter>
+ <parameter>
+ <name>forceJavacCompilerUse</name>
+ <type>boolean</type>
+ <since>3.0</since>
+ <deprecated>Use forceLegacyJavacApi instead</deprecated>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Legacy parameter name of forceLegacyJavacApi. Only considered if forceLegacyJavacApi is not set or false.</description>
+ </parameter>
+ <parameter>
+ <name>forceLegacyJavacApi</name>
+ <type>boolean</type>
+ <since>3.13</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The underlying compiler now uses javax.tools API <https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html> if available in your current JDK. Set this to true to always use the legacy com.sun.tools.javac API <https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html> instead.
+This only has an effect for compilerId being javac and fork being false.
+</description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>generatedSourcesDirectory</name>
+ <type>java.io.File</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>
+ </parameter>
+ <parameter>
+ <name>implicit</name>
+ <type>java.lang.String</type>
+ <since>3.10.2</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Keyword to be appended to the -implicit: command-line switch.
+See also: javac -implicit <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-implicit></description>
+ </parameter>
+ <parameter>
+ <name>includes</name>
+ <type>java.util.Set<java.lang.String></type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>A list of inclusion filters for the compiler.</description>
+ </parameter>
+ <parameter>
+ <name>incrementalExcludes</name>
+ <type>java.util.Set<java.lang.String></type>
+ <since>3.11</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>A list of exclusion filters for the incremental calculation.</description>
+ </parameter>
+ <parameter>
+ <name>jdkToolchain</name>
+ <type>java.util.Map<java.lang.String, java.lang.String></type>
+ <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 <https://maven.apache.org/plugins/maven-toolchains-plugin/>.
+(see Guide to Toolchains <https://maven.apache.org/guides/mini/guide-using-toolchains.html> for more info) <configuration> <jdkToolchain> <version>11</version> </jdkToolchain> ... </configuration> <configuration> <jdkToolchain> <version>1.8</version> <vendor>zulu</vendor> </jdkToolchain> ... </configuration> note: requires at least Maven 3.3.1</description>
+ </parameter>
+ <parameter>
+ <name>maxmem</name>
+ <type>java.lang.String</type>
+ <since>2.0.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Sets the maximum size, in megabytes, of the memory allocation pool, ex. "128", "128m" if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>meminitial</name>
+ <type>java.lang.String</type>
+ <since>2.0.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Initial size, in megabytes, of the memory allocation pool, ex. "64", "64m" if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>moduleVersion</name>
+ <type>java.lang.String</type>
+ <since>3.14.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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-module-version></description>
+ </parameter>
+ <parameter>
+ <name>multiReleaseOutput</name>
+ <type>boolean</type>
+ <since>3.7.1</since>
+ <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 <https://maven.apache.org/plugins/maven-jar-plugin/examples/manifest-customization.html>. This implies that you cannot test a multirelease jar using the outputDirectory.</description>
+ </parameter>
+ <parameter>
+ <name>optimize</name>
+ <type>boolean</type>
+ <deprecated>This property is a no-op in javac.</deprecated>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to optimize the compiled code using the compiler'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 <release> property in conjunction with the ${multiReleaseOutput} parameter instead.
+</description>
+ </parameter>
+ <parameter>
+ <name>outputFileName</name>
+ <type>java.lang.String</type>
+ <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="${project.build.finalName}"</description>
+ </parameter>
+ <parameter>
+ <name>outputTimestamp</name>
+ <type>java.lang.String</type>
+ <since>3.12.0</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd'T'HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH <https://reproducible-builds.org/docs/source-date-epoch/>).</description>
+ </parameter>
+ <parameter>
+ <name>parameters</name>
+ <type>boolean</type>
+ <since>3.6.2</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to generate metadata for reflection on method parameters.
+See also: javac -parameters <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-parameters></description>
+ </parameter>
+ <parameter>
+ <name>proc</name>
+ <type>java.lang.String</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>release</name>
+ <type>java.lang.String</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release></description>
+ </parameter>
+ <parameter>
+ <name>showCompilationChanges</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description></description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>showWarnings</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to false to disable warnings during compilation.</description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>skipMultiThreadWarning</name>
+ <type>boolean</type>
+ <since>2.5</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description></description>
+ </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
+
+Since 3.11.0 the default value has changed from 1.7 to 1.8
+
+See also: javac -source <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source></description>
+ </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>
+ </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
+
+See also: javac -target <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target></description>
+ </parameter>
+ <parameter>
+ <name>useIncrementalCompilation</name>
+ <type>boolean</type>
+ <since>3.1</since>
+ <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>verbose</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to show messages about what the compiler is doing.
+See also: javac -verbose <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-verbose></description>
+ </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>
+ <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
+ </configuration>
+ </mojo>
+ <mojo>
+ <goal>help</goal>
+ <description>Display help information on maven-compiler-plugin.
+Call mvn compiler:help -Ddetail=true -Dgoal=<goal-name> to display parameter details.</description>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>false</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <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>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>If true, display all settable properties for each goal.</description>
+ </parameter>
+ <parameter>
+ <name>goal</name>
+ <type>java.lang.String</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>indentSize</name>
+ <type>int</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The number of spaces per indentation level, should be positive.</description>
+ </parameter>
+ <parameter>
+ <name>lineLength</name>
+ <type>int</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The maximum length of a display line, should be positive.</description>
+ </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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html> compiler of the JDK used to execute Maven. This can be overwritten through Toolchains <https://maven.apache.org/guides/mini/guide-using-toolchains.html> or parameter compilerId.
+See also: javac Command <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html></description>
+ <requiresDependencyResolution>test</requiresDependencyResolution>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>true</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <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<org.apache.maven.plugin.compiler.DependencyCoordinate></type>
+ <since>3.5</since>
+ <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.
+
+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:
+<configuration> <annotationProcessorPaths> <path> <groupId>org.sample</groupId> <artifactId>sample-annotation-processor</artifactId> <version>1.2.3</version> <!-- Optional - taken from dependency management if not specified --> <!-- Optionally exclude transitive dependencies --> <exclusions> <exclusion> <groupId>org.sample</groupId> <artifactId>sample-dependency</artifactId> </exclusion> </exclusions> </path> <!-- ... more ... --> </annotationProcessorPaths> </configuration> Note: Exclusions are supported from version 3.11.0.
+See also: javac -processorpath <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor-path>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>annotationProcessorPathsUseDepMgmt</name>
+ <type>boolean</type>
+ <since>3.12.0</since>
+ <required>false</required>
+ <editable>true</editable>
+ <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>
+ </parameter>
+ <parameter>
+ <name>annotationProcessors</name>
+ <type>java.lang.String[]</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>compileSourceRoots</name>
+ <type>java.util.List<java.lang.String></type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The source directories containing the test-source to be compiled.</description>
+ </parameter>
+ <parameter>
+ <name>compilerArgs</name>
+ <type>java.util.List<java.lang.String></type>
+ <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: <compilerArgs> <arg>-Xmaxerrs</arg> <arg>1000</arg> <arg>-Xlint</arg> <arg>-J-Duser.language=en_us</arg> </compilerArgs>
+See also: javac -J <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J></description>
+ </parameter>
+ <parameter>
+ <name>compilerArgument</name>
+ <type>java.lang.String</type>
+ <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.
+
+See also: javac -J <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J></description>
+ </parameter>
+ <parameter>
+ <name>compilerArguments</name>
+ <type>java.util.Map<java.lang.String, java.lang.String></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:
+<compilerArguments> <Xmaxerrs>1000</Xmaxerrs> <Xlint/> <Xlint:-path/> <Averbose>true</Averbose> </compilerArguments> </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>
+ </parameter>
+ <parameter>
+ <name>compilerReuseStrategy</name>
+ <type>java.lang.String</type>
+ <since>2.5</since>
+ <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>
+ </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>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Version of the compiler to use, ex. "1.3", "1.5", if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>createMissingPackageInfoClass</name>
+ <type>boolean</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>debug</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to include debugging information in the compiled class files.
+See also: javac -g <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g>, debuglevel</description>
+ </parameter>
+ <parameter>
+ <name>debugFileName</name>
+ <type>java.lang.String</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>debuglevel</name>
+ <type>java.lang.String</type>
+ <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] <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom></description>
+ </parameter>
+ <parameter>
+ <name>enablePreview</name>
+ <type>boolean</type>
+ <since>3.10.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to enable preview language features of the java compiler
+See also: javac --enable-preview <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-enable-preview></description>
+ </parameter>
+ <parameter>
+ <name>encoding</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The -encoding argument for the Java compiler.
+See also: javac -encoding <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-encoding></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>
+ </parameter>
+ <parameter>
+ <name>failOnError</name>
+ <type>boolean</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>failOnWarning</name>
+ <type>boolean</type>
+ <since>3.6</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Indicates whether the build will continue even if there are compilation warnings.</description>
+ </parameter>
+ <parameter>
+ <name>fileExtensions</name>
+ <type>java.util.Set<java.lang.String></type>
+ <since>3.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>File extensions to check timestamp for incremental build.</description>
+ </parameter>
+ <parameter>
+ <name>forceJavacCompilerUse</name>
+ <type>boolean</type>
+ <since>3.0</since>
+ <deprecated>Use forceLegacyJavacApi instead</deprecated>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Legacy parameter name of forceLegacyJavacApi. Only considered if forceLegacyJavacApi is not set or false.</description>
+ </parameter>
+ <parameter>
+ <name>forceLegacyJavacApi</name>
+ <type>boolean</type>
+ <since>3.13</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The underlying compiler now uses javax.tools API <https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html> if available in your current JDK. Set this to true to always use the legacy com.sun.tools.javac API <https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html> instead.
+This only has an effect for compilerId being javac and fork being false.
+</description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>generatedTestSourcesDirectory</name>
+ <type>java.io.File</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>
+ </parameter>
+ <parameter>
+ <name>implicit</name>
+ <type>java.lang.String</type>
+ <since>3.10.2</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Keyword to be appended to the -implicit: command-line switch.
+See also: javac -implicit <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-implicit></description>
+ </parameter>
+ <parameter>
+ <name>jdkToolchain</name>
+ <type>java.util.Map<java.lang.String, java.lang.String></type>
+ <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 <https://maven.apache.org/plugins/maven-toolchains-plugin/>.
+(see Guide to Toolchains <https://maven.apache.org/guides/mini/guide-using-toolchains.html> for more info) <configuration> <jdkToolchain> <version>11</version> </jdkToolchain> ... </configuration> <configuration> <jdkToolchain> <version>1.8</version> <vendor>zulu</vendor> </jdkToolchain> ... </configuration> note: requires at least Maven 3.3.1</description>
+ </parameter>
+ <parameter>
+ <name>maxmem</name>
+ <type>java.lang.String</type>
+ <since>2.0.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Sets the maximum size, in megabytes, of the memory allocation pool, ex. "128", "128m" if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>meminitial</name>
+ <type>java.lang.String</type>
+ <since>2.0.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Initial size, in megabytes, of the memory allocation pool, ex. "64", "64m" if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>optimize</name>
+ <type>boolean</type>
+ <deprecated>This property is a no-op in javac.</deprecated>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to optimize the compiled code using the compiler's optimization methods.</description>
+ </parameter>
+ <parameter>
+ <name>outputDirectory</name>
+ <type>java.io.File</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>
+ </parameter>
+ <parameter>
+ <name>outputFileName</name>
+ <type>java.lang.String</type>
+ <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="${project.build.finalName}"</description>
+ </parameter>
+ <parameter>
+ <name>outputTimestamp</name>
+ <type>java.lang.String</type>
+ <since>3.12.0</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd'T'HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH <https://reproducible-builds.org/docs/source-date-epoch/>).</description>
+ </parameter>
+ <parameter>
+ <name>parameters</name>
+ <type>boolean</type>
+ <since>3.6.2</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to generate metadata for reflection on method parameters.
+See also: javac -parameters <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-parameters></description>
+ </parameter>
+ <parameter>
+ <name>proc</name>
+ <type>java.lang.String</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>release</name>
+ <type>java.lang.String</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release></description>
+ </parameter>
+ <parameter>
+ <name>showCompilationChanges</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description></description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>showWarnings</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to false to disable warnings during compilation.</description>
+ </parameter>
+ <parameter>
+ <name>skip</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set this to 'true' to bypass compilation of test sources. Its use is NOT RECOMMENDED, but quite convenient on occasion.</description>
+ </parameter>
+ <parameter>
+ <name>skipMultiThreadWarning</name>
+ <type>boolean</type>
+ <since>2.5</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description></description>
+ </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
+
+Since 3.11.0 the default value has changed from 1.7 to 1.8
+
+See also: javac -source <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source></description>
+ </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>
+ </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
+
+See also: javac -target <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target></description>
+ </parameter>
+ <parameter>
+ <name>testCompilerArgument</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <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>
+ </parameter>
+ <parameter>
+ <name>testCompilerArguments</name>
+ <type>java.util.Map<java.lang.String, java.lang.String></type>
+ <since>2.1</since>
+ <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>
+ </parameter>
+ <parameter>
+ <name>testExcludes</name>
+ <type>java.util.Set<java.lang.String></type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>A list of exclusion filters for the compiler.</description>
+ </parameter>
+ <parameter>
+ <name>testIncludes</name>
+ <type>java.util.Set<java.lang.String></type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>A list of inclusion filters for the compiler.</description>
+ </parameter>
+ <parameter>
+ <name>testIncrementalExcludes</name>
+ <type>java.util.Set<java.lang.String></type>
+ <since>3.11</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>A list of exclusion filters for the incremental calculation.</description>
+ </parameter>
+ <parameter>
+ <name>testRelease</name>
+ <type>java.lang.String</type>
+ <since>3.6</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>the -release argument for the test Java compiler</description>
+ </parameter>
+ <parameter>
+ <name>testSource</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The -source argument for the test Java compiler.</description>
+ </parameter>
+ <parameter>
+ <name>testTarget</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The -target argument for the test Java compiler.</description>
+ </parameter>
+ <parameter>
+ <name>useIncrementalCompilation</name>
+ <type>boolean</type>
+ <since>3.1</since>
+ <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>useModulePath</name>
+ <type>boolean</type>
+ <since>3.11</since>
+ <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>
+ </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.
+See also: javac -verbose <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-verbose></description>
+ </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.0/src/main/filtered-resources/META-INF/maven/plugin.xml 1970-01-01 01:00:00.000000000 +0100
+++ maven-compiler-plugin-3.14.0/src/main/filtered-resources/META-INF/maven/plugin.xml 2025-02-19 12:26:17.918766484 +0100
@@ -0,0 +1,1405 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Generated by maven-plugin-tools 3.15-->
+
+<plugin>
+ <name>${project.name}</name>
+ <description>${project.description}</description>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>${project.artifactId}</artifactId>
+ <version>${project.version}</version>
+ <goalPrefix>compiler</goalPrefix>
+ <isolatedRealm>false</isolatedRealm>
+ <inheritedByDefault>true</inheritedByDefault>
+ <requiredJavaVersion>1.8</requiredJavaVersion>
+ <requiredMavenVersion>3.6.3</requiredMavenVersion>
+ <mojos>
+ <mojo>
+ <goal>compile</goal>
+ <description>Compiles application sources. By default uses the javac <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html> compiler of the JDK used to execute Maven. This can be overwritten through Toolchains <https://maven.apache.org/guides/mini/guide-using-toolchains.html> or parameter compilerId.
+See also: javac Command <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html></description>
+ <requiresDependencyResolution>compile</requiresDependencyResolution>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>true</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <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>
+ <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.
+
+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:
+<configuration> <annotationProcessorPaths> <path> <groupId>org.sample</groupId> <artifactId>sample-annotation-processor</artifactId> <version>1.2.3</version> <!-- Optional - taken from dependency management if not specified --> <!-- Optionally exclude transitive dependencies --> <exclusions> <exclusion> <groupId>org.sample</groupId> <artifactId>sample-dependency</artifactId> </exclusion> </exclusions> </path> <!-- ... more ... --> </annotationProcessorPaths> </configuration> Note: Exclusions are supported from version 3.11.0.
+See also: javac -processorpath <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor-path>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>annotationProcessorPathsUseDepMgmt</name>
+ <type>boolean</type>
+ <since>3.12.0</since>
+ <required>false</required>
+ <editable>true</editable>
+ <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>
+ </parameter>
+ <parameter>
+ <name>annotationProcessors</name>
+ <type>java.lang.String[]</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>basedir</name>
+ <type>java.io.File</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>
+ </parameter>
+ <parameter>
+ <name>compileSourceRoots</name>
+ <type>java.util.List</type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The source directories containing the sources to be compiled.</description>
+ </parameter>
+ <parameter>
+ <name>compilerArgs</name>
+ <type>java.util.List</type>
+ <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: <compilerArgs> <arg>-Xmaxerrs</arg> <arg>1000</arg> <arg>-Xlint</arg> <arg>-J-Duser.language=en_us</arg> </compilerArgs>
+See also: javac -J <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J></description>
+ </parameter>
+ <parameter>
+ <name>compilerArgument</name>
+ <type>java.lang.String</type>
+ <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.
+
+See also: javac -J <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J></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:
+<compilerArguments> <Xmaxerrs>1000</Xmaxerrs> <Xlint/> <Xlint:-path/> <Averbose>true</Averbose> </compilerArguments> </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>
+ </parameter>
+ <parameter>
+ <name>compilerReuseStrategy</name>
+ <type>java.lang.String</type>
+ <since>2.5</since>
+ <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>
+ </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>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Version of the compiler to use, ex. "1.3", "1.5", if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>createMissingPackageInfoClass</name>
+ <type>boolean</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>debug</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to include debugging information in the compiled class files.
+See also: javac -g <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g>, debuglevel</description>
+ </parameter>
+ <parameter>
+ <name>debugFileName</name>
+ <type>java.lang.String</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>debuglevel</name>
+ <type>java.lang.String</type>
+ <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] <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom></description>
+ </parameter>
+ <parameter>
+ <name>enablePreview</name>
+ <type>boolean</type>
+ <since>3.10.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to enable preview language features of the java compiler
+See also: javac --enable-preview <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-enable-preview></description>
+ </parameter>
+ <parameter>
+ <name>encoding</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The -encoding argument for the Java compiler.
+See also: javac -encoding <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-encoding></description>
+ </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>
+ </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>
+ </parameter>
+ <parameter>
+ <name>failOnError</name>
+ <type>boolean</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>failOnWarning</name>
+ <type>boolean</type>
+ <since>3.6</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Indicates whether the build will continue even if there are compilation warnings.</description>
+ </parameter>
+ <parameter>
+ <name>fileExtensions</name>
+ <type>java.util.Set</type>
+ <since>3.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>File extensions to check timestamp for incremental build.</description>
+ </parameter>
+ <parameter>
+ <name>forceJavacCompilerUse</name>
+ <type>boolean</type>
+ <since>3.0</since>
+ <deprecated>Use forceLegacyJavacApi instead</deprecated>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Legacy parameter name of forceLegacyJavacApi. Only considered if forceLegacyJavacApi is not set or false.</description>
+ </parameter>
+ <parameter>
+ <name>forceLegacyJavacApi</name>
+ <type>boolean</type>
+ <since>3.13</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The underlying compiler now uses javax.tools API <https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html> if available in your current JDK. Set this to true to always use the legacy com.sun.tools.javac API <https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html> instead.
+This only has an effect for compilerId being javac and fork being false.
+</description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>generatedSourcesDirectory</name>
+ <type>java.io.File</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>
+ </parameter>
+ <parameter>
+ <name>implicit</name>
+ <type>java.lang.String</type>
+ <since>3.10.2</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Keyword to be appended to the -implicit: command-line switch.
+See also: javac -implicit <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-implicit></description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>incrementalExcludes</name>
+ <type>java.util.Set</type>
+ <since>3.11</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>A list of exclusion filters for the incremental calculation.</description>
+ </parameter>
+ <parameter>
+ <name>jdkToolchain</name>
+ <type>java.util.Map</type>
+ <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 <https://maven.apache.org/plugins/maven-toolchains-plugin/>.
+(see Guide to Toolchains <https://maven.apache.org/guides/mini/guide-using-toolchains.html> for more info) <configuration> <jdkToolchain> <version>11</version> </jdkToolchain> ... </configuration> <configuration> <jdkToolchain> <version>1.8</version> <vendor>zulu</vendor> </jdkToolchain> ... </configuration> note: requires at least Maven 3.3.1</description>
+ </parameter>
+ <parameter>
+ <name>maxmem</name>
+ <type>java.lang.String</type>
+ <since>2.0.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Sets the maximum size, in megabytes, of the memory allocation pool, ex. "128", "128m" if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>meminitial</name>
+ <type>java.lang.String</type>
+ <since>2.0.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Initial size, in megabytes, of the memory allocation pool, ex. "64", "64m" if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>moduleVersion</name>
+ <type>java.lang.String</type>
+ <since>3.14.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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-module-version></description>
+ </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>
+ <required>true</required>
+ <editable>false</editable>
+ <description></description>
+ </parameter>
+ <parameter>
+ <name>multiReleaseOutput</name>
+ <type>boolean</type>
+ <since>3.7.1</since>
+ <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 <https://maven.apache.org/plugins/maven-jar-plugin/examples/manifest-customization.html>. This implies that you cannot test a multirelease jar using the outputDirectory.</description>
+ </parameter>
+ <parameter>
+ <name>optimize</name>
+ <type>boolean</type>
+ <deprecated>This property is a no-op in javac.</deprecated>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to optimize the compiled code using the compiler'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 <release> property in conjunction with the ${multiReleaseOutput} parameter instead.
+</description>
+ </parameter>
+ <parameter>
+ <name>outputFileName</name>
+ <type>java.lang.String</type>
+ <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="${project.build.finalName}"</description>
+ </parameter>
+ <parameter>
+ <name>outputTimestamp</name>
+ <type>java.lang.String</type>
+ <since>3.12.0</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd'T'HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH <https://reproducible-builds.org/docs/source-date-epoch/>).</description>
+ </parameter>
+ <parameter>
+ <name>parameters</name>
+ <type>boolean</type>
+ <since>3.6.2</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to generate metadata for reflection on method parameters.
+See also: javac -parameters <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-parameters></description>
+ </parameter>
+ <parameter>
+ <name>proc</name>
+ <type>java.lang.String</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></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>
+ </parameter>
+ <parameter>
+ <name>projectArtifact</name>
+ <type>org.apache.maven.artifact.Artifact</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description>Projects main artifact.</description>
+ </parameter>
+ <parameter>
+ <name>release</name>
+ <type>java.lang.String</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release></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>
+ </parameter>
+ <parameter>
+ <name>showCompilationChanges</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description></description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>showWarnings</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to false to disable warnings during compilation.</description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>skipMultiThreadWarning</name>
+ <type>boolean</type>
+ <since>2.5</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description></description>
+ </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
+
+Since 3.11.0 the default value has changed from 1.7 to 1.8
+
+See also: javac -source <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source></description>
+ </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>
+ </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
+
+See also: javac -target <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target></description>
+ </parameter>
+ <parameter>
+ <name>useIncrementalCompilation</name>
+ <type>boolean</type>
+ <since>3.1</since>
+ <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>verbose</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to show messages about what the compiler is doing.
+See also: javac -verbose <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-verbose></description>
+ </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>
+ <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.
+Call mvn compiler:help -Ddetail=true -Dgoal=<goal-name> to display parameter details.</description>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>false</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <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>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>If true, display all settable properties for each goal.</description>
+ </parameter>
+ <parameter>
+ <name>goal</name>
+ <type>java.lang.String</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>indentSize</name>
+ <type>int</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The number of spaces per indentation level, should be positive.</description>
+ </parameter>
+ <parameter>
+ <name>lineLength</name>
+ <type>int</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The maximum length of a display line, should be positive.</description>
+ </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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html> compiler of the JDK used to execute Maven. This can be overwritten through Toolchains <https://maven.apache.org/guides/mini/guide-using-toolchains.html> or parameter compilerId.
+See also: javac Command <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html></description>
+ <requiresDependencyResolution>test</requiresDependencyResolution>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>true</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <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>
+ <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.
+
+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:
+<configuration> <annotationProcessorPaths> <path> <groupId>org.sample</groupId> <artifactId>sample-annotation-processor</artifactId> <version>1.2.3</version> <!-- Optional - taken from dependency management if not specified --> <!-- Optionally exclude transitive dependencies --> <exclusions> <exclusion> <groupId>org.sample</groupId> <artifactId>sample-dependency</artifactId> </exclusion> </exclusions> </path> <!-- ... more ... --> </annotationProcessorPaths> </configuration> Note: Exclusions are supported from version 3.11.0.
+See also: javac -processorpath <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor-path>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>annotationProcessorPathsUseDepMgmt</name>
+ <type>boolean</type>
+ <since>3.12.0</since>
+ <required>false</required>
+ <editable>true</editable>
+ <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>
+ </parameter>
+ <parameter>
+ <name>annotationProcessors</name>
+ <type>java.lang.String[]</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-processor>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></description>
+ </parameter>
+ <parameter>
+ <name>basedir</name>
+ <type>java.io.File</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>compileSourceRoots</name>
+ <type>java.util.List</type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The source directories containing the test-source to be compiled.</description>
+ </parameter>
+ <parameter>
+ <name>compilerArgs</name>
+ <type>java.util.List</type>
+ <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: <compilerArgs> <arg>-Xmaxerrs</arg> <arg>1000</arg> <arg>-Xlint</arg> <arg>-J-Duser.language=en_us</arg> </compilerArgs>
+See also: javac -J <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J></description>
+ </parameter>
+ <parameter>
+ <name>compilerArgument</name>
+ <type>java.lang.String</type>
+ <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.
+
+See also: javac -J <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-J></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:
+<compilerArguments> <Xmaxerrs>1000</Xmaxerrs> <Xlint/> <Xlint:-path/> <Averbose>true</Averbose> </compilerArguments> </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>
+ </parameter>
+ <parameter>
+ <name>compilerReuseStrategy</name>
+ <type>java.lang.String</type>
+ <since>2.5</since>
+ <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>
+ </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>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Version of the compiler to use, ex. "1.3", "1.5", if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>createMissingPackageInfoClass</name>
+ <type>boolean</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>debug</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to include debugging information in the compiled class files.
+See also: javac -g <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g>, debuglevel</description>
+ </parameter>
+ <parameter>
+ <name>debugFileName</name>
+ <type>java.lang.String</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>debuglevel</name>
+ <type>java.lang.String</type>
+ <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] <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-g-custom></description>
+ </parameter>
+ <parameter>
+ <name>enablePreview</name>
+ <type>boolean</type>
+ <since>3.10.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to enable preview language features of the java compiler
+See also: javac --enable-preview <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-enable-preview></description>
+ </parameter>
+ <parameter>
+ <name>encoding</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The -encoding argument for the Java compiler.
+See also: javac -encoding <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-encoding></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>
+ </parameter>
+ <parameter>
+ <name>failOnError</name>
+ <type>boolean</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>failOnWarning</name>
+ <type>boolean</type>
+ <since>3.6</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Indicates whether the build will continue even if there are compilation warnings.</description>
+ </parameter>
+ <parameter>
+ <name>fileExtensions</name>
+ <type>java.util.Set</type>
+ <since>3.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>File extensions to check timestamp for incremental build.</description>
+ </parameter>
+ <parameter>
+ <name>forceJavacCompilerUse</name>
+ <type>boolean</type>
+ <since>3.0</since>
+ <deprecated>Use forceLegacyJavacApi instead</deprecated>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Legacy parameter name of forceLegacyJavacApi. Only considered if forceLegacyJavacApi is not set or false.</description>
+ </parameter>
+ <parameter>
+ <name>forceLegacyJavacApi</name>
+ <type>boolean</type>
+ <since>3.13</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The underlying compiler now uses javax.tools API <https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/package-summary.html> if available in your current JDK. Set this to true to always use the legacy com.sun.tools.javac API <https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/package-summary.html> instead.
+This only has an effect for compilerId being javac and fork being false.
+</description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>generatedTestSourcesDirectory</name>
+ <type>java.io.File</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>
+ </parameter>
+ <parameter>
+ <name>implicit</name>
+ <type>java.lang.String</type>
+ <since>3.10.2</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Keyword to be appended to the -implicit: command-line switch.
+See also: javac -implicit <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-implicit></description>
+ </parameter>
+ <parameter>
+ <name>jdkToolchain</name>
+ <type>java.util.Map</type>
+ <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 <https://maven.apache.org/plugins/maven-toolchains-plugin/>.
+(see Guide to Toolchains <https://maven.apache.org/guides/mini/guide-using-toolchains.html> for more info) <configuration> <jdkToolchain> <version>11</version> </jdkToolchain> ... </configuration> <configuration> <jdkToolchain> <version>1.8</version> <vendor>zulu</vendor> </jdkToolchain> ... </configuration> note: requires at least Maven 3.3.1</description>
+ </parameter>
+ <parameter>
+ <name>maxmem</name>
+ <type>java.lang.String</type>
+ <since>2.0.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Sets the maximum size, in megabytes, of the memory allocation pool, ex. "128", "128m" if fork is set to true.</description>
+ </parameter>
+ <parameter>
+ <name>meminitial</name>
+ <type>java.lang.String</type>
+ <since>2.0.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Initial size, in megabytes, of the memory allocation pool, ex. "64", "64m" if fork is set to true.</description>
+ </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>
+ <required>true</required>
+ <editable>false</editable>
+ <description></description>
+ </parameter>
+ <parameter>
+ <name>optimize</name>
+ <type>boolean</type>
+ <deprecated>This property is a no-op in javac.</deprecated>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to optimize the compiled code using the compiler's optimization methods.</description>
+ </parameter>
+ <parameter>
+ <name>outputDirectory</name>
+ <type>java.io.File</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>
+ </parameter>
+ <parameter>
+ <name>outputFileName</name>
+ <type>java.lang.String</type>
+ <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="${project.build.finalName}"</description>
+ </parameter>
+ <parameter>
+ <name>outputTimestamp</name>
+ <type>java.lang.String</type>
+ <since>3.12.0</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Timestamp for reproducible output archive entries, either formatted as ISO 8601 yyyy-MM-dd'T'HH:mm:ssXXX or as an int representing seconds since the epoch (like SOURCE_DATE_EPOCH <https://reproducible-builds.org/docs/source-date-epoch/>).</description>
+ </parameter>
+ <parameter>
+ <name>parameters</name>
+ <type>boolean</type>
+ <since>3.6.2</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to true to generate metadata for reflection on method parameters.
+See also: javac -parameters <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-parameters></description>
+ </parameter>
+ <parameter>
+ <name>proc</name>
+ <type>java.lang.String</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-proc>, javac Annotation Processing <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#annotation-processing></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>
+ </parameter>
+ <parameter>
+ <name>release</name>
+ <type>java.lang.String</type>
+ <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 <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-release></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>
+ </parameter>
+ <parameter>
+ <name>showCompilationChanges</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description></description>
+ </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>
+ </parameter>
+ <parameter>
+ <name>showWarnings</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set to false to disable warnings during compilation.</description>
+ </parameter>
+ <parameter>
+ <name>skip</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>Set this to 'true' to bypass compilation of test sources. Its use is NOT RECOMMENDED, but quite convenient on occasion.</description>
+ </parameter>
+ <parameter>
+ <name>skipMultiThreadWarning</name>
+ <type>boolean</type>
+ <since>2.5</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description></description>
+ </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
+
+Since 3.11.0 the default value has changed from 1.7 to 1.8
+
+See also: javac -source <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-source></description>
+ </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>
+ </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
+
+See also: javac -target <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-target></description>
+ </parameter>
+ <parameter>
+ <name>testCompilerArgument</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <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>
+ </parameter>
+ <parameter>
+ <name>testCompilerArguments</name>
+ <type>java.util.Map</type>
+ <since>2.1</since>
+ <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>
+ </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>
+ </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>
+ </parameter>
+ <parameter>
+ <name>testIncrementalExcludes</name>
+ <type>java.util.Set</type>
+ <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>
+ </parameter>
+ <parameter>
+ <name>testRelease</name>
+ <type>java.lang.String</type>
+ <since>3.6</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>the -release argument for the test Java compiler</description>
+ </parameter>
+ <parameter>
+ <name>testSource</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The -source argument for the test Java compiler.</description>
+ </parameter>
+ <parameter>
+ <name>testTarget</name>
+ <type>java.lang.String</type>
+ <since>2.1</since>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The -target argument for the test Java compiler.</description>
+ </parameter>
+ <parameter>
+ <name>useIncrementalCompilation</name>
+ <type>boolean</type>
+ <since>3.1</since>
+ <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>useModulePath</name>
+ <type>boolean</type>
+ <since>3.11</since>
+ <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>
+ </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.
+See also: javac -verbose <https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html#option-verbose></description>
+ </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.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.4.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm</artifactId>
+ <type>jar</type>
+ <version>9.6</version>
+ </dependency>
+ <dependency>
+ <groupId>com.thoughtworks.qdox</groupId>
+ <artifactId>qdox</artifactId>
+ <type>jar</type>
+ <version>2.0.3</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.0/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.0/src/main/java/org/apache/maven/plugins/maven_compiler_plugin/HelpMojo.java 2025-02-19 12:24:14.585522420 +0100
@@ -0,0 +1,448 @@
+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.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Display help information on maven-compiler-plugin.<br>
+ * Call <code>mvn compiler:help -Ddetail=true -Dgoal=<goal-name></code> to display parameter details.
+ * @author maven-plugin-tools
+ */
+@Mojo( name = "help", requiresProject = false, threadSafe = true )
+public class HelpMojo
+ extends AbstractMojo
+{
+ /**
+ * 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;
+
+ // /META-INF/maven/<groupId>/<artifactId>/plugin-help.xml
+ private static final String PLUGIN_HELP_PATH =
+ "/META-INF/maven/org.apache.maven.plugins/maven-compiler-plugin/plugin-help.xml";
+
+ private static final int DEFAULT_LINE_LENGTH = 80;
+
+ private Document build()
+ throws MojoExecutionException
+ {
+ getLog().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 );
+ }
+ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+ return dBuilder.parse( is );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ catch ( ParserConfigurationException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ catch ( SAXException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void execute()
+ throws MojoExecutionException
+ {
+ if ( lineLength <= 0 )
+ {
+ getLog().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." );
+ indentSize = 2;
+ }
+
+ Document doc = build();
+
+ StringBuilder sb = new StringBuilder();
+ Node plugin = getSingleChild( doc, "plugin" );
+
+
+ String name = getValue( plugin, "name" );
+ String version = getValue( plugin, "version" );
+ String id = getValue( plugin, "groupId" ) + ":" + getValue( plugin, "artifactId" ) + ":" + version;
+ if ( isNotEmpty( name ) && !name.contains( id ) )
+ {
+ append( sb, name + " " + version, 0 );
+ }
+ else
+ {
+ if ( isNotEmpty( name ) )
+ {
+ append( sb, name, 0 );
+ }
+ else
+ {
+ append( sb, id, 0 );
+ }
+ }
+ append( sb, getValue( plugin, "description" ), 1 );
+ append( sb, "", 0 );
+
+ //<goalPrefix>plugin</goalPrefix>
+ String goalPrefix = getValue( plugin, "goalPrefix" );
+
+ Node mojos1 = getSingleChild( plugin, "mojos" );
+
+ List<Node> mojos = findNamedChild( mojos1, "mojo" );
+
+ if ( goal == null || goal.length() <= 0 )
+ {
+ append( sb, "This plugin has " + mojos.size() + ( mojos.size() > 1 ? " goals:" : " goal:" ), 0 );
+ append( sb, "", 0 );
+ }
+
+ for ( Node mojo : mojos )
+ {
+ writeGoal( sb, goalPrefix, (Element) mojo );
+ }
+
+ if ( getLog().isInfoEnabled() )
+ {
+ getLog().info( sb.toString() );
+ }
+ }
+
+
+ private static boolean isNotEmpty( String string )
+ {
+ return string != null && string.length() > 0;
+ }
+
+ private static String getValue( Node node, String elementName )
+ throws MojoExecutionException
+ {
+ return getSingleChild( node, elementName ).getTextContent();
+ }
+
+ private static Node getSingleChild( Node node, String elementName )
+ throws MojoExecutionException
+ {
+ List<Node> namedChild = findNamedChild( node, elementName );
+ if ( namedChild.isEmpty() )
+ {
+ throw new MojoExecutionException( "Could not find " + elementName + " in plugin-help.xml" );
+ }
+ if ( namedChild.size() > 1 )
+ {
+ throw new MojoExecutionException( "Multiple " + elementName + " in plugin-help.xml" );
+ }
+ return namedChild.get( 0 );
+ }
+
+ private static List<Node> findNamedChild( Node node, String elementName )
+ {
+ List<Node> result = new ArrayList<Node>();
+ NodeList childNodes = node.getChildNodes();
+ for ( int i = 0; i < childNodes.getLength(); i++ )
+ {
+ Node item = childNodes.item( i );
+ if ( elementName.equals( item.getNodeName() ) )
+ {
+ result.add( item );
+ }
+ }
+ return result;
+ }
+
+ private static Node findSingleChild( Node node, String elementName )
+ throws MojoExecutionException
+ {
+ List<Node> elementsByTagName = findNamedChild( node, elementName );
+ if ( elementsByTagName.isEmpty() )
+ {
+ return null;
+ }
+ if ( elementsByTagName.size() > 1 )
+ {
+ throw new MojoExecutionException( "Multiple " + elementName + "in plugin-help.xml" );
+ }
+ return elementsByTagName.get( 0 );
+ }
+
+ private void writeGoal( StringBuilder sb, String goalPrefix, Element mojo )
+ throws MojoExecutionException
+ {
+ String mojoGoal = getValue( mojo, "goal" );
+ Node configurationElement = findSingleChild( mojo, "configuration" );
+ Node description = findSingleChild( mojo, "description" );
+ if ( goal == null || goal.length() <= 0 || mojoGoal.equals( goal ) )
+ {
+ append( sb, goalPrefix + ":" + mojoGoal, 0 );
+ Node deprecated = findSingleChild( mojo, "deprecated" );
+ if ( ( deprecated != null ) && isNotEmpty( deprecated.getTextContent() ) )
+ {
+ append( sb, "Deprecated. " + deprecated.getTextContent(), 1 );
+ if ( detail && description != null )
+ {
+ append( sb, "", 0 );
+ append( sb, description.getTextContent(), 1 );
+ }
+ }
+ else if ( description != null )
+ {
+ append( sb, description.getTextContent(), 1 );
+ }
+ append( sb, "", 0 );
+
+ if ( detail )
+ {
+ Node parametersNode = getSingleChild( mojo, "parameters" );
+ List<Node> parameters = findNamedChild( parametersNode, "parameter" );
+ append( sb, "Available parameters:", 1 );
+ append( sb, "", 0 );
+
+ for ( Node parameter : parameters )
+ {
+ writeParameter( sb, parameter, configurationElement );
+ }
+ }
+ }
+ }
+
+ private void writeParameter( StringBuilder sb, Node parameter, Node configurationElement )
+ throws MojoExecutionException
+ {
+ String parameterName = getValue( parameter, "name" );
+ String parameterDescription = getValue( parameter, "description" );
+
+ Element fieldConfigurationElement = null;
+ if ( configurationElement != null )
+ {
+ fieldConfigurationElement = (Element) findSingleChild( configurationElement, parameterName );
+ }
+
+ String parameterDefaultValue = "";
+ if ( fieldConfigurationElement != null && fieldConfigurationElement.hasAttribute( "default-value" ) )
+ {
+ parameterDefaultValue = " (Default: " + fieldConfigurationElement.getAttribute( "default-value" ) + ")";
+ }
+ append( sb, parameterName + parameterDefaultValue, 2 );
+ Node deprecated = findSingleChild( parameter, "deprecated" );
+ if ( ( deprecated != null ) && isNotEmpty( deprecated.getTextContent() ) )
+ {
+ append( sb, "Deprecated. " + deprecated.getTextContent(), 3 );
+ append( sb, "", 0 );
+ }
+ if ( isNotEmpty( parameterDescription ) ) {
+ append( sb, parameterDescription, 3 );
+ }
+ if ( "true".equals( getValue( parameter, "required" ) ) )
+ {
+ append( sb, "Required: Yes", 3 );
+ }
+ if ( ( fieldConfigurationElement != null ) && isNotEmpty( fieldConfigurationElement.getTextContent() ) )
+ {
+ String property = getPropertyFromExpression( fieldConfigurationElement.getTextContent() );
+ append( sb, "User property: " + property, 3 );
+ }
+
+ append( sb, "", 0 );
+ }
+
+ /**
+ * <p>Repeat a String <code>n</code> times to form a new string.</p>
+ *
+ * @param str String to repeat
+ * @param repeat number of times to repeat str
+ * @return String with repeated String
+ * @throws NegativeArraySizeException if <code>repeat < 0</code>
+ * @throws NullPointerException if str is <code>null</code>
+ */
+ private static String repeat( String str, int repeat )
+ {
+ StringBuilder buffer = new StringBuilder( repeat * str.length() );
+
+ for ( int i = 0; i < repeat; i++ )
+ {
+ buffer.append( str );
+ }
+
+ return buffer.toString();
+ }
+
+ /**
+ * Append a description to the buffer by respecting the indentSize and lineLength parameters.
+ * <b>Note</b>: The last character is always a new line.
+ *
+ * @param sb The buffer to append the description, not <code>null</code>.
+ * @param description The description, not <code>null</code>.
+ * @param indent The base indentation level of each line, must not be negative.
+ */
+ private void append( StringBuilder sb, String description, int indent )
+ {
+ for ( String line : toLines( description, indent, indentSize, lineLength ) )
+ {
+ sb.append( line ).append( '\n' );
+ }
+ }
+
+ /**
+ * Splits the specified text into lines of convenient display length.
+ *
+ * @param text The text to split into lines, must not be <code>null</code>.
+ * @param indent The base indentation level of each line, must not be negative.
+ * @param indentSize The size of each indentation, must not be negative.
+ * @param lineLength The length of the line, must not be negative.
+ * @return The sequence of display lines, never <code>null</code>.
+ * @throws NegativeArraySizeException if <code>indent < 0</code>
+ */
+ private static List<String> toLines( String text, int indent, int indentSize, int lineLength )
+ {
+ List<String> lines = new ArrayList<String>();
+
+ String ind = repeat( "\t", indent );
+
+ String[] plainLines = text.split( "(\r\n)|(\r)|(\n)" );
+
+ for ( String plainLine : plainLines )
+ {
+ toLines( lines, ind + plainLine, indentSize, lineLength );
+ }
+
+ return lines;
+ }
+
+ /**
+ * Adds the specified line to the output sequence, performing line wrapping if necessary.
+ *
+ * @param lines The sequence of display lines, must not be <code>null</code>.
+ * @param line The line to add, must not be <code>null</code>.
+ * @param indentSize The size of each indentation, must not be negative.
+ * @param lineLength The length of the line, must not be negative.
+ */
+ private static void toLines( List<String> lines, String line, int indentSize, int lineLength )
+ {
+ int lineIndent = getIndentLevel( line );
+ StringBuilder buf = new StringBuilder( 256 );
+
+ String[] tokens = line.split( " +" );
+
+ for ( String token : tokens )
+ {
+ if ( buf.length() > 0 )
+ {
+ if ( buf.length() + token.length() >= lineLength )
+ {
+ lines.add( buf.toString() );
+ buf.setLength( 0 );
+ buf.append( repeat( " ", lineIndent * indentSize ) );
+ }
+ else
+ {
+ buf.append( ' ' );
+ }
+ }
+
+ for ( int j = 0; j < token.length(); j++ )
+ {
+ char c = token.charAt( j );
+ if ( c == '\t' )
+ {
+ buf.append( repeat( " ", indentSize - buf.length() % indentSize ) );
+ }
+ else if ( c == '\u00A0' )
+ {
+ buf.append( ' ' );
+ }
+ else
+ {
+ buf.append( c );
+ }
+ }
+ }
+ lines.add( buf.toString() );
+ }
+
+ /**
+ * Gets the indentation level of the specified line.
+ *
+ * @param line The line whose indentation level should be retrieved, must not be <code>null</code>.
+ * @return The indentation level of the line.
+ */
+ private static int getIndentLevel( String line )
+ {
+ int level = 0;
+ for ( int i = 0; i < line.length() && line.charAt( i ) == '\t'; i++ )
+ {
+ level++;
+ }
+ for ( int i = level + 1; i <= level + 4 && i < line.length(); i++ )
+ {
+ if ( line.charAt( i ) == '\t' )
+ {
+ level++;
+ break;
+ }
+ }
+ return level;
+ }
+
+ private static String getPropertyFromExpression( String expression )
+ {
+ if ( expression != null && expression.startsWith( "${" ) && expression.endsWith( "}" )
+ && !expression.substring( 2 ).contains( "${" ) )
+ {
+ // expression="${xxx}" -> property="xxx"
+ return expression.substring( 2, expression.length() - 1 );
+ }
+ // no property can be extracted
+ return null;
+ }
+}