编译器:编译

全名

org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile

说明

编译应用程序源

属性

  • 需要执行一个 Maven 项目。
  • 需要范围内工件的依赖解析:compile
  • 目标是线程安全的并支持并行构建。
  • 自版本:2.0
  • 默认绑定到生命周期阶段编译

可选参数

姓名 类型 自从 描述
<annotationProcessorPaths> 列表 3.5

作为注释处理器路径提供的类路径元素。如果指定,编译器将仅在那些类路径元素中检测注释处理器。如果省略,则使用默认类路径来检测注释处理器。检测本身取决于annotationProcessors的配置。

每个类路径元素都使用它们的 Maven 坐标(groupId、artifactId、版本、分类器、类型)来指定。传递依赖是自动添加的。例子:

<configuration>
  <annotationProcessorPaths>
    <path>
      <groupId>org.sample</groupId>
      <artifactId>sample-annotation-processor</artifactId>
      <version>1.2.3</version>
    </path>
    <!-- ... more ... -->
  </annotationProcessorPaths>
</configuration>

<annotationProcessors> 细绳[] 2.2

要运行的注释处理器的名称。仅适用于 JDK 1.6+ 如果未设置,则应用默认注释处理器发现过程。


<compilerArgs> 列表 3.1

设置要传递给编译器的参数。

请注意,只有在fork设置为true时才会传递 -J选项。

例子:
<compilerArgs>
  <arg>-Xmaxerrs</arg>
  <arg>1000</arg>
  <arg>-Xlint</arg>
  <arg>-J-Duser.language=en_us</arg>
</compilerArgs>

<compilerArgument> 细绳 2.0

设置要传递给编译器的未格式化的单个参数字符串。要传递多个参数,例如-Xmaxerrs 1000(实际上是两个参数),您必须使用 compilerArguments

这是因为传递给 Java 编译器的有效参数列表因编译器版本而异。

请注意,只有在fork设置为true时才会传递 -J选项。


<compilerArguments> 地图 2.0.1 已弃用。改用compilerArgs
<compilerId> 细绳 2.0 要使用的编译器的编译器 ID。有关更多信息,请参阅本指南
默认值为javac
用户属性是maven.compiler.compilerId
<编译器重用策略> 细绳 2.5 重用创建的 javacc 类的策略:
  • 重用创建(默认):将重用已创建但在多线程构建的情况下,每个线程将有自己的实例
  • reuseSame:即使是多线程构建,每次编译都将使用相同的 Javacc 类
  • alwaysNew:每次编译都会创建一个新的 Javacc 类
请注意,此参数值取决于您使用的 os/jdk,但默认值应该适用于大多数 env。
默认值为${reuseCreated}
用户属性是maven.compiler.compilerReuseStrategy
<编译器版本> 细绳 2.0 要使用的编译器版本,例如。“1.3”、“1.5”,如果 fork设置为true
用户属性是maven.compiler.compilerVersion
<createMissingPackageInfoClass> 布尔值 3.10 包信息源文件只包含 javadoc 而包上没有注解可能导致编译器不生成类文件。这会导致下一次编译时文件丢失并强制进行不必要的重新编译。默认值 true会导致生成一个空的类文件。可以通过将此参数设置为 false来更改此行为。
默认值为true
用户属性是maven.compiler.createMissingPackageInfoClass
<调试> 布尔值 2.0 设置为true以在编译的类文件中包含调试信息。
默认值为true
用户属性是maven.compiler.debug
<调试文件名> 细绳 3.10.0 当分叉和调试激活时,使用的命令行将转储到此文件中
默认值为javac
<调试级别> 细绳 2.1 要附加到-g命令行开关的关键字列表。合法值为 none 或以下关键字的逗号分隔列表:linesvarssource。如果未指定调试级别,默认情况下,不会将任何内容附加到-g。如果未打开调试,则该属性将被忽略。
用户属性是maven.compiler.debuglevel
<启用预览> 布尔值 3.10.1 设置为true以启用 java 编译器的预览语言功能
默认值为false
用户属性是maven.compiler.enablePreview
<编码> 细绳 2.1 Java 编译器的 -encoding 参数。
默认值为${project.build.sourceEncoding}
用户属性是编码
<不包括> 2.0 编译器的排除过滤器列表。
<可执行文件> 细绳 2.0 设置当forktrue时要使用的编译器的可执行文件。
用户属性是maven.compiler.executable
<失败错误> 布尔值 2.0.2 指示即使出现编译错误,构建是否会继续。
默认值为true
用户属性是maven.compiler.failOnError
<失败警告> 布尔值 3.6 指示即使有编译警告,构建是否会继续。
默认值为false
用户属性是maven.compiler.failOnWarning
<文件扩展名> 列表 3.1 用于检查增量构建时间戳的文件扩展名。默认只包含classjar
<forceJavacCompilerUse> 布尔值 3.0 编译器现在可以使用 javax.tools 如果在您当前的 jdk 中可用,您可以使用 -Dmaven.compiler.forceJavacCompilerUse=true 或在插件配置中禁用此功能
默认值为false
用户属性是maven.compiler.forceJavacCompilerUse
<叉子> 布尔值 2.0 允许在单独的进程中运行编译器。如果 为,则使用内置编译器,如果 为,则使用可执行文件。
默认值为false
用户属性是maven.compiler.fork
<生成的源目录> 文件 2.2

指定放置由注释处理创建的生成源文件的位置。仅适用于 JDK 1.6+


默认值为${project.build.directory}/generated-sources/annotations
<包括> 2.0 编译器的包含过滤器列表。
<jdk工具链> 地图 3.6

指定此 jdk 工具链的要求,以使用与 Maven 使用的 JRE不同的javac 。这会否决maven-toolchain-plugin选择的工具链。

(有关更多信息, 请参阅工具链指南)
<configuration>
  <jdkToolchain>
    <version>11</version>
  </jdkToolchain>
  ...
</configuration>

<configuration>
  <jdkToolchain>
    <version>1.8</version>
    <vendor>zulu</vendor>
  </jdkToolchain>
  ...
</configuration>
注意:至少需要 Maven 3.3.1
<最大内存> 细绳 2.0.1 设置内存分配池的最大大小,以兆字节为单位,例如。"128", "128m" 如果fork设置为true
用户属性是maven.compiler.maxmem
<记忆> 细绳 2.0.1 内存分配池的初始大小(以 MB 为单位),例如。"64", "64m" 如果fork设置为true
用户属性是maven.compiler.meminitial
<multiReleaseOutput> 布尔值 3.7.1

当设置为true时,这些类将放在 META-INF/versions/${release}中,必须设置发布值,否则插件会失败。

注意:如果 META-INF/MANIFEST.MF包含Multi-Release: true ,则 jar 只是一个 multirelease jar 。您需要通过配置maven-jar-plugin来设置它。这意味着您不能使用 outputDirectory 测试多版本 jar。
<优化> 布尔值 2.0 已弃用。此属性在javac中是无操作的。
默认值为false
用户属性是maven.compiler.optimize
<输出文件名> 细绳 2.0 将一组源编译为单个文件时设置输出文件的名称。表达式="${project.build.finalName}"
<参数> 布尔值 3.6.2 设置为true以生成元数据以反映方法参数。
默认值为false
用户属性是maven.compiler.parameters
<进程> 细绳 2.2

设置是否执行注释处理。仅适用于 JDK 1.6+ 如果不设置,编译和注解处理同时进行。

允许的值为:

  • none - 不执行注释处理。
  • only - 只进行注解处理,不进行编译。

<发布> 细绳 3.6 Java 编译器的 -release 参数,从 Java9
用户属性开始支持:maven.compiler.release
<显示弃用> 布尔值 2.0 设置是否显示使用已弃用 API 的源位置。
默认值为false
用户属性是maven.compiler.showDeprecation
<显示警告> 布尔值 2.0 设置为true以显示编译警告。
默认值为false
用户属性是maven.compiler.showWarnings
<跳过主要> 布尔值 2.0 将此设置为“真”以绕过主要来源的编译。不推荐使用它,但有时很方便。
用户属性是maven.main.skip
<skipMultiThreadWarning> 布尔值 2.5 (无描述)
默认值为false
用户属性是maven.compiler.skipMultiThreadWarning
<来源> 细绳 2.0

Java 编译器的 -source 参数。

注意:自 3.8.0 起,默认值已从 1.5 更改为 1.6。自 3.9.0 起,默认值已从 1.6 更改为 1.7
默认值为1.7
用户属性是maven.compiler.source
<陈旧的米利斯> 整数 2.0 设置最后修改日期的粒度(以毫秒为单位),以测试源是否需要重新编译。
默认值为0
用户属性是lastModGranularityMs
<目标> 细绳 2.0

Java 编译器的 -target 参数。

注意:自 3.8.0 起,默认值已从 1.5 更改为 1.6。自 3.9.0 起,默认值已从 1.6 更改为 1.7
默认值为1.7
用户属性是maven.compiler.target
<使用增量编译> 布尔值 3.1

启用/禁用增量编译功能。

这会导致两种不同的模式,具体取决于底层编译器。默认的 javac 编译器执行以下操作:

  • true (默认)在此模式下,编译器插件确定当前模块所依赖的任何 JAR 文件在当前构建运行中是否已更改;或自上次编译以来添加、删除或更改的任何源文件。如果是这种情况,编译器插件会重新编译所有源代码。
  • false (不推荐)这只编译比其相应类文件更新的源文件,即自上次编译以来已更改的源文件。这不会重新编译使用更改后的类的其他类,可能会使它们引用不再存在的方法,从而导致运行时出错。

默认值为true
用户属性是maven.compiler.useIncrementalCompilation
<详细> 布尔值 2.0 设置为true以显示有关编译器正在做什么的消息。
默认值为false
用户属性是maven.compiler.verbose

参数详情

<annotationProcessorPaths>

作为注释处理器路径提供的类路径元素。如果指定,编译器将仅在那些类路径元素中检测注释处理器。如果省略,则使用默认类路径来检测注释处理器。检测本身取决于annotationProcessors的配置。

每个类路径元素都使用它们的 Maven 坐标(groupId、artifactId、版本、分类器、类型)来指定。传递依赖是自动添加的。例子:

<configuration>
  <annotationProcessorPaths>
    <path>
      <groupId>org.sample</groupId>
      <artifactId>sample-annotation-processor</artifactId>
      <version>1.2.3</version>
    </path>
    <!-- ... more ... -->
  </annotationProcessorPaths>
</configuration>
  • 类型java.util.List
  • : 3.5
  • 要求

<annotationProcessors>

要运行的注释处理器的名称。仅适用于 JDK 1.6+ 如果未设置,则应用默认注释处理器发现过程。

  • 类型java.lang.String[]
  • : 2.2
  • 要求

<compilerArgs>

设置要传递给编译器的参数。

请注意,只有在fork设置为true时才会传递 -J选项。

例子:
<compilerArgs>
  <arg>-Xmaxerrs</arg>
  <arg>1000</arg>
  <arg>-Xlint</arg>
  <arg>-J-Duser.language=en_us</arg>
</compilerArgs>
  • 类型java.util.List
  • : 3.1
  • 要求

<compilerArgument>

设置要传递给编译器的未格式化的单个参数字符串。要传递多个参数,例如-Xmaxerrs 1000(实际上是两个参数),您必须使用 compilerArguments

这是因为传递给 Java 编译器的有效参数列表因编译器版本而异。

请注意,只有在fork设置为true时才会传递 -J选项。

  • 类型java.lang.String
  • : 2.0
  • 要求

<compilerArguments>

已弃用。改用compilerArgs

设置要传递给编译器的参数(前置破折号)。

这是因为传递给 Java 编译器的有效参数列表因编译器版本而异。

请注意,只有在fork设置为true时才会传递 -J选项。

要通过-Xmaxerrs 1000 -Xlint -Xlint:-path -Averbose=true你应该包括以下内容:

<compilerArguments>
  <Xmaxerrs>1000</Xmaxerrs>
  <Xlint/>
  <Xlint:-path/>
  <Averbose>true</Averbose>
</compilerArguments>
  • 类型java.util.Map
  • 2.0.1
  • 要求

<compilerId>

要使用的编译器的编译器 ID。有关更多信息,请参阅本指南
  • 类型java.lang.String
  • : 2.0
  • 要求
  • 用户属性maven.compiler.compilerId
  • 默认值javac

<编译器重用策略>

重用创建的 javacc 类的策略:
  • 重用创建(默认):将重用已创建但在多线程构建的情况下,每个线程将有自己的实例
  • reuseSame:即使是多线程构建,每次编译都将使用相同的 Javacc 类
  • alwaysNew:每次编译都会创建一个新的 Javacc 类
请注意,此参数值取决于您使用的 os/jdk,但默认值应该适用于大多数 env。
  • 类型java.lang.String
  • : 2.5
  • 要求
  • 用户属性maven.compiler.compilerReuseStrategy
  • 默认值${reuseCreated}

<编译器版本>

要使用的编译器版本,例如。“1.3”、“1.5”,如果 fork设置为true
  • 类型java.lang.String
  • : 2.0
  • 要求
  • 用户属性maven.compiler.compilerVersion

<createMissingPackageInfoClass>

包信息源文件只包含 javadoc 而包上没有注解可能导致编译器不生成类文件。这会导致下一次编译时文件丢失并强制进行不必要的重新编译。默认值 true会导致生成一个空的类文件。可以通过将此参数设置为 false来更改此行为。
  • 类型布尔值
  • : 3.10
  • 要求
  • 用户属性maven.compiler.createMissingPackageInfoClass
  • 默认值

<调试>

设置为true以在编译的类文件中包含调试信息。
  • 类型布尔值
  • : 2.0
  • 要求
  • 用户属性maven.compiler.debug
  • 默认值

<调试文件名>

激活分叉和调试时,使用的命令行将转储到此文件中
  • 类型java.lang.String
  • 3.10.0
  • 要求
  • 默认值javac

<调试级别>

要附加到-g命令行开关的关键字列表。合法值为 none 或以下关键字的逗号分隔列表:linesvarssource。如果未指定调试级别,默认情况下,不会将任何内容附加到-g。如果未打开调试,则该属性将被忽略。
  • 类型java.lang.String
  • : 2.1
  • 要求
  • 用户属性maven.compiler.debuglevel

<启用预览>

设置为true以启用 java 编译器的预览语言功能
  • 类型布尔值
  • 3.10.1
  • 要求
  • 用户属性maven.compiler.enablePreview
  • 默认值

<编码>

Java 编译器的 -encoding 参数。
  • 类型java.lang.String
  • : 2.1
  • 要求
  • 用户属性编码
  • 默认值${project.build.sourceEncoding}

<不包括>

编译器的排除过滤器列表。
  • 类型java.util.Set
  • : 2.0
  • 要求

<可执行文件>

设置当forktrue时要使用的编译器的可执行文件。
  • 类型java.lang.String
  • : 2.0
  • 要求
  • 用户属性maven.compiler.executable

<失败错误>

指示即使出现编译错误,构建是否会继续。
  • 类型布尔值
  • 2.0.2
  • 要求
  • 用户属性maven.compiler.failOnError
  • 默认值

<失败警告>

指示即使有编译警告,构建是否会继续。
  • 类型布尔值
  • : 3.6
  • 要求
  • 用户属性maven.compiler.failOnWarning
  • 默认值

<文件扩展名>

用于检查增量构建时间戳的文件扩展名。默认只包含classjar
  • 类型java.util.List
  • : 3.1
  • 要求

<forceJavacCompilerUse>

编译器现在可以使用 javax.tools 如果在您当前的 jdk 中可用,您可以使用 -Dmaven.compiler.forceJavacCompilerUse=true 或在插件配置中禁用此功能
  • 类型布尔值
  • : 3.0
  • 要求
  • 用户属性maven.compiler.forceJavacCompilerUse
  • 默认值

<叉子>

允许在单独的进程中运行编译器。如果 为,则使用内置编译器,如果 为,则使用可执行文件。
  • 类型布尔值
  • : 2.0
  • 要求
  • 用户属性maven.compiler.fork
  • 默认值

<生成的源目录>

指定放置由注释处理创建的生成源文件的位置。仅适用于 JDK 1.6+

  • 类型java.io.File
  • : 2.2
  • 要求
  • 默认值${project.build.directory}/generated-sources/annotations

<包括>

编译器的包含过滤器列表。
  • 类型java.util.Set
  • : 2.0
  • 要求

<jdk工具链>

指定此 jdk 工具链的要求,以使用与 Maven 使用的 JRE不同的javac 。这会否决maven-toolchain-plugin选择的工具链。

(有关更多信息, 请参阅工具链指南)
<configuration>
  <jdkToolchain>
    <version>11</version>
  </jdkToolchain>
  ...
</configuration>

<configuration>
  <jdkToolchain>
    <version>1.8</version>
    <vendor>zulu</vendor>
  </jdkToolchain>
  ...
</configuration>
注意:至少需要 Maven 3.3.1
  • 类型java.util.Map
  • : 3.6
  • 要求

<最大内存>

设置内存分配池的最大大小,以兆字节为单位,例如。"128", "128m" 如果fork设置为true
  • 类型java.lang.String
  • 2.0.1
  • 要求
  • 用户属性maven.compiler.maxmem

<记忆>

内存分配池的初始大小(以 MB 为单位),例如。"64", "64m" 如果fork设置为true
  • 类型java.lang.String
  • 2.0.1
  • 要求
  • 用户属性maven.compiler.meminitial

<multiReleaseOutput>

当设置为true时,这些类将放在 META-INF/versions/${release}中,必须设置发布值,否则插件会失败。

注意:如果 META-INF/MANIFEST.MF包含Multi-Release: true ,则 jar 只是一个 multirelease jar 。您需要通过配置maven-jar-plugin来设置它。这意味着您不能使用 outputDirectory 测试多版本 jar。
  • 类型布尔值
  • 3.7.1
  • 要求

<优化>

已弃用。此属性在javac中是无操作的。
设置为true以使用编译器的优化方法优化编译的代码。
  • 类型布尔值
  • : 2.0
  • 要求
  • 用户属性maven.compiler.optimize
  • 默认值

<输出文件名>

将一组源编译为单个文件时设置输出文件的名称。表达式="${project.build.finalName}"
  • 类型java.lang.String
  • : 2.0
  • 要求

<参数>

设置为true以生成元数据以反映方法参数。
  • 类型布尔值
  • 3.6.2
  • 要求
  • 用户属性maven.compiler.parameters
  • 默认值

<进程>

设置是否执行注释处理。仅适用于 JDK 1.6+ 如果不设置,编译和注解处理同时进行。

允许的值为:

  • none - 不执行注释处理。
  • only - 只进行注解处理,不进行编译。
  • 类型java.lang.String
  • : 2.2
  • 要求

<发布>

Java 编译器的 -release 参数,从 Java9 开始支持
  • 类型java.lang.String
  • : 3.6
  • 要求
  • 用户属性maven.compiler.release

<显示弃用>

设置是否显示使用已弃用 API 的源位置。
  • 类型布尔值
  • : 2.0
  • 要求
  • 用户属性maven.compiler.showDeprecation
  • 默认值

<显示警告>

设置为true以显示编译警告。
  • 类型布尔值
  • : 2.0
  • 要求
  • 用户属性maven.compiler.showWarnings
  • 默认值

<跳过主要>

将此设置为“真”以绕过主要来源的编译。不推荐使用它,但有时很方便。
  • 类型布尔值
  • : 2.0
  • 要求
  • 用户属性maven.main.skip

<skipMultiThreadWarning>

(没有说明)
  • 类型布尔值
  • : 2.5
  • 要求
  • 用户属性maven.compiler.skipMultiThreadWarning
  • 默认值

<来源>

Java 编译器的 -source 参数。

注意:自 3.8.0 起,默认值已从 1.5 更改为 1.6。自 3.9.0 起,默认值已从 1.6 更改为 1.7
  • 类型java.lang.String
  • : 2.0
  • 要求
  • 用户属性maven.compiler.source
  • 默认值1.7

<陈旧的米利斯>

设置最后修改日期的粒度(以毫秒为单位),以测试源是否需要重新编译。
  • 类型整数
  • : 2.0
  • 要求
  • 用户属性lastModGranularityMs
  • 默认值0

<目标>

Java 编译器的 -target 参数。

注意:自 3.8.0 起,默认值已从 1.5 更改为 1.6。自 3.9.0 起,默认值已从 1.6 更改为 1.7
  • 类型java.lang.String
  • : 2.0
  • 要求
  • 用户属性maven.compiler.target
  • 默认值1.7

<使用增量编译>

启用/禁用增量编译功能。

这会导致两种不同的模式,具体取决于底层编译器。默认的 javac 编译器执行以下操作:

  • true (默认)在此模式下,编译器插件确定当前模块所依赖的任何 JAR 文件在当前构建运行中是否已更改;或自上次编译以来添加、删除或更改的任何源文件。如果是这种情况,编译器插件会重新编译所有源代码。
  • false (不推荐)这只编译比其相应类文件更新的源文件,即自上次编译以来已更改的源文件。这不会重新编译使用更改后的类的其他类,可能会使它们引用不再存在的方法,从而导致运行时出错。
  • 类型布尔值
  • : 3.1
  • 要求
  • 用户属性maven.compiler.useIncrementalCompilation
  • 默认值

<详细>

设置为true以显示有关编译器正在做什么的消息。
  • 类型布尔值
  • : 2.0
  • 要求
  • 用户属性maven.compiler.verbose
  • 默认值