Maven compiler 插件

此插件用于对当前项目的源码进行编译。从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>
    原文作者:JSON_NULL
    原文地址: https://www.jianshu.com/p/c624a1c9b58d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞