A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


1. Maven Plugins插件

1.1 概述
1.1.1 介绍
Maven是一个靠执行插件来实现具体功能的框架,或者说插件是maven的功能的组成,所有的工作都是由插件完成的,比如编译、打包、测试等。
插件属于构件的一种,存放在仓库中。如果本地仓库没有,则会自动到远程仓库下载。
官方插件的首页:https://maven.apache.org/plugins/index.html

1.1.2 基本用法

1. 插件的运行是使用mvn执行特定的目标(goal)命令来执行的。
2. 插件本身有一些默认值,大多数情况下直接使用,但有些插件需要修改其默认值,修改方法就是通过自定义的配置来覆盖默认值。
3. 注意,更改pom.xml中的插件、项目信息等配置后,要让配置生效,需要进行更新项目(即,让项目根据配置来重新构建), 操作如下:


1.2 Compiler Plugin编译插件的配置

1.2.1 介绍
编译器插件用于编译项目的Java源代码。从Maven3.0开始,默认的编译器使用javax.tools.JavaCompiler(JDK1.6以上提供)。
插件的名字:maven-compiler-plugin
编译器插件有两个目标(goal)命令。
compile:绑定到编译阶段,用于编译主源文件。
testCompile:绑定到测试编译阶段,并用于编译测试源文件。

1.2.2 用法

1. 编译主源代码
    mvn compile

1. 编译测试源代码
    mvn test-compile

1. 配置插件
    <project>
      ...
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.7.0</version>
              <configuration>
                <!-- 将你的配置写在这里 -->
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
      ...
    </project>

提示:如果不配置插件,则插件使用默认参数值。

关于编译器版本和JDK版本最佳匹配说明:

  插件版本               JDK版本          说明        
  3.7.0              jdk7+          当前最新的版本   
  3.5.1、3.6.2        jdk1.6+        3.6.x最高版本
  3.1                jdk1.5+        Maven默认使用的


1.2.3 常用配置

1.2.3.1 设置编译版本
需要注意的是,当前Maven的source和target编译默认都是1.5,独立于您运行Maven的JDK,即和运行Maven的JDK版本不一定一致。
如果要改变该默认值,例如想要使用Java 8的新特性、JDK8 来编译、JVM8来运行,则可以选择下面两种方式的其中之一进行设置,来覆盖默认值。
方法1,直接配置插件的属性:
    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <!-- since 2.0 -->
            <version>3.7.0</version>
            <configuration>
              <!-- use the Java 8 language features -->
              <source>1.8</source>
              <!-- want the compiled classes to be compatible with JVM 1.8 -->
              <target>1.8</target>
            </configuration>
          </plugin>
        </plugins>
        [...]
      </build>
      [...]
    </project>
说明:<source>和<target>标签是插件参数的默认属性名称.该配置只在当前项目中有效。


方法2,添加pom.xml中的自定义属性:
    <project>
      [...]
      <properties>
        <!-- use the Java 8 language features -->
        <maven.compiler.source>1.8</maven.compiler.source>
        <!-- want the compiled classes to be compatible with JVM 1.8 -->
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
      [...]
    </project>

说明:maven.compiler.source和maven.compiler.target是插件参数的默认属性名称:,可直接在全局定义使用。该配置只在当前项目中有效。
一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中需要没有使用低版本jdk中不支持的语法),会存在target不同于source的情况 。


1.2.3.2 设置字符编码
插件默认使用平台字符编码来读取源代码进行编译,但在使用过程中发现控制台有警告:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
该警告的意思是说没有指定读取源代码的编码,会使用平台的默认编码UTF-8来读取,使用何种编码依赖于平台环境。在Eclipse中,平台的编码就是工作空间的编码。
通常,我们要指定该字符编码,一方面,可以去掉警告,另一方面,如果平台编码指定的有问题,比如用ISO8859-1的,源代码中有一些中文,则可能编译不通过。
解决方法就是手动指定字符编码,有以下两种方式:
方法1,直接配置插件的属性:
    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <!-- since 2.0 -->
            <version>3.7.0</version>
            <configuration>
                 <!-- The -encoding argument for the Java compiler plugin read Java sources. -->
                            <encoding>UTF8</encoding>
            </configuration>
          </plugin>
        </plugins>
        [...]
      </build>
      [...]
    </project>
说明:编码写UTF8或UTF-8均可,不区分大小写

方法2,添加pom.xml中的自定义属性:
    <project>
      [...]
      <properties>
                        <!--The -encoding argument for Maven read Java sources.-->
                            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      [...]
    </project>


1.2.4 更多配置-参考
    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <!-- since 2.0 -->
            <version>3.7.0</version>
            <configuration>
                                            <!-- 必选配置项 -->
                                            <!-- use the Java 8 language features -->
                                            <source>1.8</source>
                                            <!-- want the compiled classes to be compatible with JVM 1.8 -->
                                            <target>1.8</target>
                                            <!-- The -encoding argument for the Java compiler. -->
                                            <encoding>UTF8</encoding>
                                            <!-- 可选配置项 -->
                                            <!-- 设置为true以显示关于编译器正在做什么的消息,比如编译了哪些类文件等。默认是false -->
                                            <verbose>true</verbose>
                                            <!-- 编译时使用的内存的初始值 -->
                                            <meminitial>128m</meminitial>
                                            <!-- 编译时使用的内存的最大值,如果编译时出现内存溢出,可以尝试修改该选项,平时默认即可 -->
                                    <maxmem>512m</maxmem>
                                            <!-- 遇到编译出错的时候,是否继续编译剩下的代码,如无特殊需求,不建议配置该选项。默认是false,遇到出错就终止编译,推荐 -->
                                            <failOnError>true</failOnError>
                                            <!-- fork is enable,用于明确表示编译版本配置的可用,允许在单独的进程中运行编译器,默认false -->
                                            <!-- <fork>true</fork> -->
                                            <!-- 设置具体javac的路径,可以指定特定的jdk编译。默认是平台环境下的jdk -->
                                    <!-- <executable>C:/11_SR/Java/jdk1.8.0_151_x64/bin/javac</executable> -->
                                    </configuration>
          </plugin>
        </plugins>
        [...]
      </build>
      [...]
    </project>


1.2.5 扩展说明
编译的参数source和target的说明:
source:指定用哪个版本的编译器对java源码进行编译,即源代码使用的开发版本 。
target:指定生成的class文件将保证和哪个版本的虚拟机进行兼容,即需要生成的目标class文件的编译版本。如我们可以通过-target 1.8来保证生成的class文件能在1.8虚拟机上进行运行,但是1.7的虚拟机就不能保证了。 例如:

javac命令参考如下:
    javac -source 1.8 -target 1.8 -encoding "UTF-8" Test.java

Maven命令参考如下:
    mvn -Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8 -Dmaven.compiler.encoding="UTF-8"


1.2 Surefire Plugin测试插件

1.2.1 介绍
在一个独立的类加载器中运行JUnit单元测试。  

1.2.2 用法
运行一个应用程序的所有的单元测试
    mvn test
编写junit测试用例-参考
执行命令进行测试

注意:默认情况下,它会测试所有的Junit用例。


1.2.3 常用配置
1.2.3.1 设置字符编码
如果控制台日志中有中文,默认情况下会有乱码产生,如下图:

解决方法,加入如下配置:

    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.21.0</version>
              <configuration>
                  <!-- 控制台中文编码问题 -->
                  <argLine>-Dfile.encoding=UTF-8</argLine>
              </configuration>
           </plugin>
        </plugins>
        [...]
      </build>
      [...]
    </project>

1.2.3.2 设置跳过测试
在生命周期中永远(完全)跳过(绕过)单元测试 ,即废掉Maven的测试功能,但仍然可以使用Junit本身的单元测试。配置如下:

    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.21.0</version>
              <configuration>
                 <!-- 在生命周期中永远(完全)跳过(绕过)单元测试 -->
                            <skip>true</skip>
              </configuration>
           </plugin>
        </plugins>
        [...]
      </build>
      [...]
    </project>

提示:官方不建议关闭该测试功能,建议在执行命令(如package等)不想使用测试的时候,使用maven.test.skip这个参数来临时跳过测试。命令参考如下:
    mvn install -Dmaven.test.skip=true
对于一般开发人员来说,建议直接关闭测试功能。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马