Apache Maven项目提供的Compiler插件详解

来源:互联网 发布:几何网络是什么意思 编辑:程序博客网 时间:2024/06/13 15:57

Compiler插件用于编译Maven项目的Java源代码,最新版本是2016.2发布的3.5.1(刚刚看到,最新版本已经更新为3.6.0,2016.10.26更新)。

Compiler插件提供了如下2个goal,默认都已经绑定到Maven的生命周期阶段,无需单独指出。

  • compiler:compile,绑定到compile 阶段,用以编译main/路径下的源代码
  • compiler:testCompile绑定到test-compile阶段,用以编译test/路径下的源代码


1. Compiler插件的基本配置信息

[html] view plain copy
print?
  1. <groupId>org.apache.maven.plugins</groupId>  
  2. <artifactId>maven-compiler-plugin</artifactId>  
  3. <version>3.5.1</version>  
<groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version>



2.Compiler插件使用的Java编译器

编译Java源代码就离不开Java编译器。在Compiler插件3.0之前,默认的Java编译器就的JDK自带的javac。但是从Compiler插件3.0开始(需要JDK 1.6),默认的Java编译器是javax.tools.JavaCompiler

如果仍然希望使用JDK自带的javac编译源代码,就需要为mvn命令配置forceJavacCompilerUse启动参数如下:

[html] view plain copy
print?
  1. -Dmaven.compiler.forceJavacCompilerUse=true  
-Dmaven.compiler.forceJavacCompilerUse=true


3.Compiler插件设置Java编译器的执行参数

[html] view plain copy
print?
  1. <plugin>  
  2.   <groupId>org.apache.maven.plugins</groupId>  
  3.   <artifactId>maven-compiler-plugin</artifactId>  
  4.   <version>3.5.1</version>  
  5.   <configuration>  
  6.     <compilerArgs>  
  7.       <arg>-verbose</arg>  
  8.       <arg>-Xlint:all,-options,-path</arg>  
  9.     </compilerArgs>  
  10.   </configuration>  
  11. </plugin>  
<plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <version>3.5.1</version>  <configuration>    <compilerArgs>      <arg>-verbose</arg>      <arg>-Xlint:all,-options,-path</arg>    </compilerArgs>  </configuration></plugin>


4.Compiler插件设置使用其他JDK的编译器

命令mvn的运行需要依赖JDK,Compiler插件默认使用当前运行mvn命令的JDK去编译Java源代码。如果想使用其他版本的JDK编译Java源代码,则需要设置如下:

[html] view plain copy
print?
  1. <plugin>  
  2.   <groupId>org.apache.maven.plugins</groupId>  
  3.   <artifactId>maven-compiler-plugin</artifactId>  
  4.   <version>3.5.1</version>  
  5.   <configuration>  
  6.     <verbose>true</verbose>  
  7.     <fork>true</fork>  
  8.     <executable>${JAVA_1_8_HOME}/bin/javac</executable>  
  9.     <compilerVersion>1.6</compilerVersion>  
  10.   </configuration>  
  11. </plugin>  
<plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <version>3.5.1</version>  <configuration>    <verbose>true</verbose>    <fork>true</fork>    <executable>${JAVA_1_8_HOME}/bin/javac</executable>    <compilerVersion>1.6</compilerVersion>  </configuration></plugin>
注意:上述配置中,用以编译Java源代码的是JDK 1.8,运行mvn命令的是JDK 1.6


5.Compiler插件设置要编译的Java源代码兼容的JVM版本和编译后的类库拟运行的JVM版本

通过设置Java源代码兼容的JVM版本,标明Java源代码开发过程中使用的Java版本。

通过设置编译后的类库拟运行的JVM版本,给出编译后的类库将要运行的Java环境。

默认,这两个版本都是1.5,即Java源代码开发使用JDK 1.5,编译后的类的运行环境也是JRE 1.5

[html] view plain copy
print?
  1. <plugin>  
  2.   <groupId>org.apache.maven.plugins</groupId>  
  3.   <artifactId>maven-compiler-plugin</artifactId>  
  4.   <version>3.5.1</version>  
  5.   <configuration>  
  6.     <source>1.4</source>  
  7.     <target>1.4</target>  
  8.   </configuration>  
  9. </plugin>  
<plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <version>3.5.1</version>  <configuration>    <source>1.4</source>    <target>1.4</target>  </configuration></plugin>


6.Compiler插件设置可用的运行内存空间

Compiler插件的运行本身也需要一定的内存空间,设置如下:

[html] view plain copy
print?
  1. <plugin>  
  2.   <groupId>org.apache.maven.plugins</groupId>  
  3.   <artifactId>maven-compiler-plugin</artifactId>  
  4.   <version>3.5.1</version>  
  5.   <configuration>  
  6.     <fork>true</fork>  
  7.     <meminitial>128m</meminitial>  
  8.     <maxmem>512m</maxmem>  
  9.   </configuration>  
  10. </plugin>  
<plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <version>3.5.1</version>  <configuration>    <fork>true</fork>    <meminitial>128m</meminitial>    <maxmem>512m</maxmem>  </configuration></plugin>


参考文献:

http://maven.apache.org/plugins/maven-compiler-plugin/