此插件用于对当前项目的源码进行编译。从3.0开台,默认编译器是javax.tools.JavaCompiler(如果你的java为1.6及以上版本)。如果想要强制使用javac,则必须配置插件选项forceJavacCompilerUse。另外要注意的是,目前默认的 source 为1.5,并且默认的target也为1.5,这与Maven时所依赖的jdk无关。如果要更改这些默认值,则需要去设置java编译器的 -source 和 -target 选项。
compile
用于对项目中的源码文件进行编译。这个goal 默认被绑定到了 compile phase 可以在Maven对项目构建的生命周期中自动执行。
testCompile
用于对项目中的测试代码文件进行编译。这个goal默认已经被绑定到 testCompile phase,可以在Maven对项目构建的生命周期中自动执行。
设置java编译器的 -source 和 -target 参数
有时候可能需要将某个项目编译为与当前使用版本不同的版本。javac 命令可以接受 -source 和 -target 参数用于对源代码和生成的目标字节源所运行的java环境进行说明,此插件也有类似的配置。
例如,如果使用的是java8语法编写的源码(-source 1.8),并且希望编译的类与 JVM1.8(-target 1.8)兼容,则可以添加发下两个属性,它们是插件默认参数的名称。
<project>
[...]
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
[...]
</project>
或者像下面这样直接对此插件进行配置
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>
注意:仅仅设置 target 选项,并不能保证你的代码在指定版本的jre上运行。设置source 选项也不能保证你的代码在指定的jdk上编译。要用特定的与用于启动Maven的版本不同的JKD版本编译代码,可以参阅下面小节的内容。
使用其他JDK编译
要使用不同的JDK对项目进行构建,最佳方式是使用工具链机制(toolchains插件)。在构建项目的过程中,每个步骤都需要JDK中的一个工具来执行,如编译源码,生成javadoc,运行单元测试或生成jar。工具链就是用于指定JDK路径,以集中配置的方式把指定的JDK应用于所有插件。详细内容可以参阅Maven 中 toolchains插件的帮助文档。
除了使用toolchains插件外,还可以使用compilerVersion参数指定compiler插件所使用的编译器版本。只是必须把fork参数设置为true,它才能正常工作。
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable><!-- path-to-javac --></executable>
<compilerVersion>1.3</compilerVersion>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>
为了避免硬编译文件系统路径,可以使用属性。
<executable> $ {JAVA_1_4_HOME} / bin / javac </ executable>
然后每个开发人员在settings.xml中定义该属性,或设置一个环境变量,以便pom.xml保持可移植性。
<settings>
[...]
<profiles>
[...]
<profile>
<id>compiler</id>
<properties>
<JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
</properties>
</profile>
</profiles>
[...]
<activeProfiles>
<activeProfile>compiler</activeProfile>
</activeProfiles>
</settings>