Maven系列第7篇:聚合、继承、单继承问题详解,必备技能!

javacode2018-h5/pom.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

javacode2018-parent

com.javacode2018

1.0-SNAPSHOT

4.0.0

javacode2018-h5

javacode2018-api/pom.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

javacode2018-parent

com.javacode2018

1.0-SNAPSHOT

4.0.0

javacode2018-api

我们在父构件javacode2018-parent/pom.xml中加入下面配置:

pom

org.springframework

spring-web

5.2.1.RELEASE

org.mybatis

mybatis-spring

2.0.3

使用下面命令在javacode2018-parent/pom.xml所在目录看一下javacode2018-parent构件依赖情况:

D:\code\IdeaProjects\javacode2018-parent>mvn dependency:tree

[INFO] Scanning for projects…

[INFO]

[INFO] ----------------< com.javacode2018:javacode2018-parent >-----------------

[INFO] Building javacode2018-parent 1.0-SNAPSHOT

[INFO] --------------------------------[ pom ]---------------------------------

[INFO]

[INFO] — maven-dependency-plugin:2.8:tree (default-cli) @ javacode2018-parent —

[INFO] com.javacode2018:javacode2018-parent:pom:1.0-SNAPSHOT

[INFO] ± org.springframework:spring-web:jar:5.2.1.RELEASE:compile

[INFO] |  ± org.springframework:spring-beans:jar:5.2.1.RELEASE:compile

[INFO] |  - org.springframework:spring-core:jar:5.2.1.RELEASE:compile

[INFO] |     - org.springframework:spring-jcl:jar:5.2.1.RELEASE:compile

[INFO] - org.mybatis:mybatis-spring:jar:2.0.3:compile

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  2.544 s

[INFO] Finished at: 2019-11-19T14:58:21+08:00

[INFO] ------------------------------------------------------------------------

mvn dependency:tree 这个插件可以根据pom.xml的配置,列出构件的依赖树信息。

我们再来看看javacode2018-pc/pom.xml构件的依赖信息:

D:\code\IdeaProjects\javacode2018-parent>cd javacode2018-pc

D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc>mvn dependency:tree

[INFO] Scanning for projects…

[INFO]

[INFO] ------------------< com.javacode2018:javacode2018-pc >-------------------

[INFO] Building javacode2018-pc 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-dependency-plugin:2.8:tree (default-cli) @ javacode2018-pc —

[INFO] com.javacode2018:javacode2018-pc:jar:1.0-SNAPSHOT

[INFO] ± org.springframework:spring-web:jar:5.2.1.RELEASE:compile

[INFO] |  ± org.springframework:spring-beans:jar:5.2.1.RELEASE:compile

[INFO] |  - org.springframework:spring-core:jar:5.2.1.RELEASE:compile

[INFO] |     - org.springframework:spring-jcl:jar:5.2.1.RELEASE:compile

[INFO] - org.mybatis:mybatis-spring:jar:2.0.3:compile

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  2.093 s

[INFO] Finished at: 2019-11-19T14:59:34+08:00

[INFO] ------------------------------------------------------------------------

从上图中可以看到javacode2018-pc依赖的jar和父构件javacode2019-parent的一样,说明从父类继承了这些依赖。

其他2个子构件,大家也可以去看一下,依赖关系都从父构件继承过来了。

relativePath元素

上面演示的父构件和子构件的目录结构刚好符合父子关系,如果父构件和子构件的目录不是父子关系,比如都位于同等级别的目录或者位于更复杂的目录的时候,此时我们需要在子pom.xmlparent元素中使用relativePath元素来指定父pom.xml相对路径位置,这个值我们上面没有指定,默认是../pom.xml,表示父pom.xml位于子pom.xml的上一级目录,我们的模块刚好符合这种关系,所以这个值省略了。

正确的设置relativePath是非常重要的,这个需要注意,子模块中执行mvn命令的时候,会去找父pom.xml的配置,会先通过relativePath指定的路径去找,如果找不到,会尝试通过坐标在本地仓库进行查找,如果本地找不到,会去远程仓库找,如果远程仓库也没有,会报错。

可以通过继承的元素有以下这些

上面我们看到了groupId、version、dependency中的依赖在子pom.xml中都没有写,这些都是从父pom.xml中继承过来的,还有很多元素也可以被继承过来,下面我们列个清单:

  • groupId:项目组ID,项目坐标的核心元素

  • version:项目版本,项目坐标的核心元素

  • description:项目的描述信息

  • organization:项目的组织信息

  • inceptionYear:项目的创始年份

  • url:项目的url地址

  • developers:项目的开发者信息

  • contributors:项目的贡献者信息

  • distributionManagement:项目的部署配置信息

  • issueManagement:项目的缺陷跟踪系统信息

  • ciManagement:项目的持续集成系统信息

  • scm:项目的版本控制系统信息

  • mailingLists:项目的邮件列表信息

  • properties:自定义的maven属性配置信息

  • dependencyManagement:项目的依赖管理配置

  • repositories:项目的仓库配置

  • build:包括项目的源码目录配置、输出目录配置、插件管理配置等信息

  • reporting:包括项目的报告输出目录配置、报告插件配置等信息

依赖管理(dependencyManagement)

大家是否发现了,上面的继承存在的一个问题,如果我在新增一个子构件,都会默认从父构件中继承依赖的一批构建,父pom.xml中配置的这些依赖的构建可能是其他项目不需要的,可能某个子项目只是想使用其中一个构件,但是上面的继承关系却把所有的依赖都给传递到子构件中了,这种显然是不合适的。

maven中也考虑到了这种情况,可以使用dependencyManagement元素来解决这个问题。

maven提供的dependencyManagement元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性,在dependencyManagement元素下声明的依赖不会引入实际的依赖,他只是声明了这些依赖,不过它可以对dependencies中使用的依赖起到一些约束作用。

修改javacode2018-parent/pom.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

com.javacode2018

javacode2018-parent

1.0-SNAPSHOT

pom

org.springframework

spring-web

5.2.1.RELEASE

org.mybatis

mybatis-spring

2.0.3

可以看到我们将dependencies配置移到dependencyManagement下面了。

我们使用下面命令看一下项目的依赖情况:

D:\code\IdeaProjects\javacode2018-parent>mvn dependency:tree

[INFO] Scanning for projects…

[INFO]

[INFO] ----------------< com.javacode2018:javacode2018-parent >-----------------

[INFO] Building javacode2018-parent 1.0-SNAPSHOT

[INFO] --------------------------------[ pom ]---------------------------------

[INFO]

[INFO] — maven-dependency-plugin:2.8:tree (default-cli) @ javacode2018-parent —

[INFO] com.javacode2018:javacode2018-parent:pom:1.0-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  1.756 s

[INFO] Finished at: 2019-11-19T15:44:52+08:00

[INFO] ------------------------------------------------------------------------

D:\code\IdeaProjects\javacode2018-parent>cd javacode2018-pc

D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc>mvn dependency:tree

[INFO] Scanning for projects…

[INFO]

[INFO] ------------------< com.javacode2018:javacode2018-pc >-------------------

[INFO] Building javacode2018-pc 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-dependency-plugin:2.8:tree (default-cli) @ javacode2018-pc —

[INFO] com.javacode2018:javacode2018-pc:jar:1.0-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  1.676 s

[INFO] Finished at: 2019-11-19T15:45:08+08:00

[INFO] ------------------------------------------------------------------------

父子构件中都看不到依赖的jar包了,说明父pom.xml中dependencyManagement这些依赖的构建没有被子模块依赖进去。

子模块如果想用到这些配置,可以dependencies进行引用,引用之后,依赖才会真正的起效。

在在3个子模块的pom.xml中加入下面配置:

org.springframework

spring-web

org.mybatis

mybatis-spring

我们在运行一下上面的3个命令,看效果:

D:\code\IdeaProjects\javacode2018-parent>mvn dependency:tree

[INFO] Scanning for projects…

[INFO]

[INFO] ----------------< com.javacode2018:javacode2018-parent >-----------------

[INFO] Building javacode2018-parent 1.0-SNAPSHOT

[INFO] --------------------------------[ pom ]---------------------------------

[INFO]

[INFO] — maven-dependency-plugin:2.8:tree (default-cli) @ javacode2018-parent —

[INFO] com.javacode2018:javacode2018-parent:pom:1.0-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  1.759 s

[INFO] Finished at: 2019-11-19T15:48:28+08:00

[INFO] ------------------------------------------------------------------------

D:\code\IdeaProjects\javacode2018-parent>cd javacode2018-pc

D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc>mvn dependency:tree

[INFO] Scanning for projects…

[INFO]

[INFO] ------------------< com.javacode2018:javacode2018-pc >-------------------

[INFO] Building javacode2018-pc 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-dependency-plugin:2.8:tree (default-cli) @ javacode2018-pc —

[INFO] com.javacode2018:javacode2018-pc:jar:1.0-SNAPSHOT

[INFO] ± org.springframework:spring-web:jar:5.2.1.RELEASE:compile

[INFO] |  ± org.springframework:spring-beans:jar:5.2.1.RELEASE:compile

[INFO] |  - org.springframework:spring-core:jar:5.2.1.RELEASE:compile

[INFO] |     - org.springframework:spring-jcl:jar:5.2.1.RELEASE:compile

[INFO] - org.mybatis:mybatis-spring:jar:2.0.3:compile

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  1.875 s

[INFO] Finished at: 2019-11-19T15:48:38+08:00

[INFO] ------------------------------------------------------------------------

javacode2018-parent构件中没有列出依赖信息,而javacode2018-pc列出了依赖信息。

大家看一下下面的截图:

640?wx_fmt=png

注意上面的红框中依赖的构建没有version,左边2个红圈中的2个向上的箭头,表示这个是从父pom.xml中传递过来的,所以version可以省略。

再看一下父pom.xml截图效果:

640?wx_fmt=png

dependencyManagement中定义了依赖的构建,2个向下的箭头表示被子模块有继承。

dependencyManagement不会引入实际的依赖,只有在子类中使用dependency来引入父dependencyManagement声明的依赖之后,依赖的构建才会被真正的引入。

使用dependencyManagement来解决继承的问题,子pom.xml中只用写groupId,artifactId就可以了,其他信息都会从父dependencyManagement中声明的依赖关系中传递过来,通常我们使用这种方式将所有依赖的构建在父pom.xml中定义好,子构件中只需要通过groupId,artifactId就可以引入依赖的构建,而不需要写version,可以很好的确保多个子项目中依赖构件的版本的一致性,对应依赖构件版本的升级也非常方便,只需要在父pom.xml中修改一下就可以了。

单继承问题

存在的问题及解决方案

上面讲解了dependencyManagement的使用,但是有个问题,只有使用继承的时候,dependencyManagement中声明的依赖才可能被子pom.xml用到,如果我的项目本来就有父pom.xml了,但是我现在想使用另外一个项目dependencyManagement中声明的依赖,此时我们怎么办?这就是单继承的问题,这种情况在spring-boot、spring-cloud中会遇到,所以大家需要注意,这块一定需要玩转。

当我们想在项目中使用另外一个构件中dependencyManagement声明的依赖,而又不想继承这个项目的时候,可以在我们的项目中使用加入下面配置:

com.javacode2018

javacode2018-parent

1.0-SNAPSHOT

pom

import

构件2

构件3

构件n

上面这个配置会将javacode2018-parent构件中dependencyManagement元素中声明的所有依赖导入到当前pom.xml的dependencyManagement中,相当于把下面部分的内容:

com.javacode2018

javacode2018-parent

1.0-SNAPSHOT

pom

import

替换成了javacode2018-parent/pom.xml中dependencyManagement元素内容,替换之后变成:

org.springframework

spring-web

5.2.1.RELEASE

org.mybatis

mybatis-spring

2.0.3

构件2

构件3

构件n

实操案例

创建项目javacode2018-pom-import,具体过程不演示了,坐标信息:

com.javacode2018

javacode2018-pom-import

1.0-SNAPSHOT

创建完毕之后,如下图:

640?wx_fmt=png

修改javacode2018-pom-import/pom.xml内容,如下:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

com.javacode2018

javacode2018-pom-import

1.0-SNAPSHOT

com.alibaba

fastjson

1.2.62

junit

junit

4.12

test

上面我们在dependencyManagement中声明了2个依赖:fastjson和junit。

javacode2018-pom-import/pom.xml中执行mvn install将其安装到本地仓库

D:\code\IdeaProjects\javacode2018-pom-import>mvn install

[INFO] Scanning for projects…

[INFO]

[INFO] --------------< com.javacode2018:javacode2018-pom-import >--------------

[INFO] Building javacode2018-pom-import 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ javacode2018-pom-import —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ javacode2018-pom-import —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ javacode2018-pom-import —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode2018-pom-import\src\test\resources

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javacode2018-pom-import —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ javacode2018-pom-import —

[INFO] No tests to run.

[INFO]

[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ javacode2018-pom-import —

[INFO] Building jar: D:\code\IdeaProjects\javacode2018-pom-import\target\javacode2018-pom-import-1.0-SNAPSHOT.jar

[INFO]

[INFO] — maven-install-plugin:2.4:install (default-install) @ javacode2018-pom-import —

[INFO] Installing D:\code\IdeaProjects\javacode2018-pom-import\target\javacode2018-pom-import-1.0-SNAPSHOT.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pom-import\1.0-SNAPSHOT\javacode2018-pom-import-1.0-SNAPSHOT.jar

[INFO] Installing D:\code\IdeaProjects\javacode2018-pom-import\pom.xml to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pom-import\1.0-SNAPSHOT\javacode2018-pom-import-1.0-SNAPSHOT.pom

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  2.692 s

[INFO] Finished at: 2019-11-19T17:23:16+08:00

[INFO] ------------------------------------------------------------------------

现在我们想在javacode2018-pc/pom.xml中使用javacode2018-pom-import/pom.xmldependencyManagement元素中定义的fastjson和junit的依赖,而我们的javacode2019-pc已经继承了javacode-parent了,maven中只能单继承,所以没法通过继承的方式来实现了,那么我们可以在javacode2019-pc/pom.xml中加入下面配置:

com.javacode2018

javacode2018-pom-import

1.0-SNAPSHOT

pom

import

此时可以使用fastjson的依赖了,javacode2018-pc/pom.xmlproject->dependencies元素中加入下面配置:

com.alibaba

fastjson

看一下效果:

640?wx_fmt=png

上面的fastjson没有指定版本号,直接可以使用,说明从javacode2018-pom-import传递过来了。

可以点击一下上面红圈中的箭头,会跳到本地仓库的javacode2018-pom-import-1.0-SNAPSHOT.pom文件,如下:

640?wx_fmt=png

插件管理(pluginManagement)

maven中提供了dependencyManagement来解决继承的问题,同样也提供了解决插件继承问题的pluginManagement元素,在父pom中可以在这个元素中声明插件的配置信息,但是子pom.xml中不会引入此插件的配置信息,只有在子pom.xml中使用plugins->plugin元素正在引入这些声明的插件的时候,插件才会起效,子插件中只需要写groupId、artifactId,其他信息都可以从父构件中传递过来。

实操案例

javacode2018-parent/pom.xml中加入下面配置:

org.apache.maven.plugins

maven-source-plugin

3.2.0

attach-source

verify

jar-no-fork

maven-source-plugin这个插件在上一章有介绍过,源码打包的。

上面是将插件maven-source-pluginjar-no-fork目标绑定在default生命周期的verify阶段,verify阶段会在default生命周期的install周期前面执行。

下面我们看效果。

在javacode2018-pc/pom.xml所在目录运行下面命令

D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc>mvn clean install

[INFO] Scanning for projects…

[INFO]

[INFO] ------------------< com.javacode2018:javacode2018-pc >-------------------

[INFO] Building javacode2018-pc 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ javacode2018-pc —

[INFO] Deleting D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ javacode2018-pc —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ javacode2018-pc —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ javacode2018-pc —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\src\test\resources

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javacode2018-pc —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ javacode2018-pc —

[INFO] No tests to run.

[INFO]

[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ javacode2018-pc —

[INFO] Building jar: D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT.jar

[INFO]

[INFO] — maven-install-plugin:2.4:install (default-install) @ javacode2018-pc —

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT.jar

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\pom.xml to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT.pom

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  2.254 s

[INFO] Finished at: 2019-11-19T16:24:39+08:00

[INFO] ------------------------------------------------------------------------

mvn clean install 会清理代码,然后将打包构件,将构建安装到本地仓库,从输入中可以看到javacode2018-pc-1.0-SNAPSHOT.jar被安装到本地仓库了。

但是没有看到打包源码的插件的运行,说明了javacode2018-pc没有从父pom.xml中继承插件的配置信息,所以插件配置没有起效,现在我们要让插件起效,继续看:

在javacode2018-pc/pom.xml中加入下面配置:

org.apache.maven.plugins

maven-source-plugin

截图看效果:

640?wx_fmt=png

又一个线上的箭头,说明这个是从父pom.xml中传递过来了,大家仔细看一下上面的配置,插件只写了groupId、artifactId,其他信息都没有写,其他信息都可以从父pom.xml中传递过来,下面我们看一下插件是否起效了,运行下面命令,见证奇迹:

D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc>mvn clean install

[INFO] Scanning for projects…

[INFO]

[INFO] ------------------< com.javacode2018:javacode2018-pc >-------------------

[INFO] Building javacode2018-pc 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ javacode2018-pc —

[INFO] Deleting D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ javacode2018-pc —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ javacode2018-pc —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ javacode2018-pc —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\src\test\resources

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javacode2018-pc —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ javacode2018-pc —

[INFO] No tests to run.

[INFO]

[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ javacode2018-pc —

[INFO] Building jar: D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT.jar

[INFO]

[INFO] — maven-source-plugin:3.2.0:jar-no-fork (attach-source) @ javacode2018-pc —

[INFO] Building jar: D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT-sources.jar

[INFO]

[INFO] — maven-install-plugin:2.4:install (default-install) @ javacode2018-pc —

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT.jar

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\pom.xml to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT.pom

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT-sources.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT-sources.jar

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  2.477 s

[INFO] Finished at: 2019-11-19T16:28:18+08:00

[INFO] ------------------------------------------------------------------------

注意上面的输出中有attach-source,这个就是上面我们插件任务的id,输出中还有javacode2018-pc-1.0-SNAPSHOT-sources.jar信息,说明源码也是打包成功了,最后也是上传到了本地仓库了。

上面演示了只用在子pom.xml中写上插件的groupId、artifactId就可以了,其他信息会从父pom.xml中插件的定义中传递过来,而子pom.xml中也可以自定义插件的这些配置,修改javacode2018-pc/pom.xml配置,如下:

org.apache.maven.plugins

maven-source-plugin

attach-source

help

再看一下效果:

D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc>mvn clean install

[INFO] Scanning for projects…

[INFO]

[INFO] ------------------< com.javacode2018:javacode2018-pc >-------------------

[INFO] Building javacode2018-pc 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ javacode2018-pc —

[INFO] Deleting D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ javacode2018-pc —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ javacode2018-pc —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ javacode2018-pc —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\src\test\resources

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javacode2018-pc —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ javacode2018-pc —

[INFO] No tests to run.

[INFO]

[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ javacode2018-pc —

[INFO] Building jar: D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT.jar

[INFO]

[INFO] — maven-source-plugin:3.2.0:help (attach-source) @ javacode2018-pc —

[INFO] Apache Maven Source Plugin 3.2.0

The Maven Source Plugin creates a JAR archive of the source files of the

current project.

This plugin has 7 goals:

source:aggregate

Aggregate sources for all modules in an aggregator project.

source:generated-test-jar

This plugin bundles all the test sources into a jar archive.

source:help

Display help information on maven-source-plugin.

Call mvn source:help -Ddetail=true -Dgoal= to display parameter

details.

source:jar

This plugin bundles all the sources into a jar archive.

source:jar-no-fork

This goal bundles all the sources into a jar archive. This goal functions the

same as the jar goal but does not fork the build and is suitable for attaching

to the build lifecycle.

source:test-jar

This plugin bundles all the test sources into a jar archive.

source:test-jar-no-fork

This goal bundles all the test sources into a jar archive. This goal functions

the same as the test-jar goal but does not fork the build, and is suitable for

attaching to the build lifecycle.

[INFO]

[INFO] — maven-source-plugin:3.2.0:jar-no-fork (attach-source) @ javacode2018-pc —

[INFO] Building jar: D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT-sources.jar

[INFO]

[INFO] — maven-install-plugin:2.4:install (default-install) @ javacode2018-pc —

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT.jar

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\pom.xml to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT.pom

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT-sources.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT-sources.jar

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  2.752 s

[INFO] Finished at: 2019-11-19T16:41:21+08:00

[INFO] ------------------------------------------------------------------------

输出中有下面2行:

[INFO] — maven-source-plugin:3.2.0:help (attach-source) @ javacode2018-pc —

[INFO] — maven-source-plugin:3.2.0:jar-no-fork (attach-source) @ javacode2018-pc —

说明maven-source-plugin插件执行了2个目标:helpjar-no-fork。此时父子pom.xml中插件配置信息合并了,所以出现了2个目标。具体最终javacode2018-pc/pom.xml中的内容是什么样的,可以通过下面这个命令看到:

mvn help:effective-pom

上面这个命令大家最好去看一下效果,当pom.xml中存在复杂的关系的时候,可以通过这个命令解析得到这个构件最终pom.xml的内容。

聚合与继承的关系

前面已经详解了聚合和继承,想必大家对这块也有了自己的理解。

聚合主要是为了方便多模块快速构建。

而继承主要是为了重用相同的配置。

对于聚合来说,聚合模块是知道被聚合模块的存在的,而被聚合模块是感知不到聚合模块的存在。

对于继承来说,父构件是感知不到子构件的存在,而子构件需要使用parent来引用父构件。

两者的共同点是,聚合模块和继承中的父模块的package属性都必须是pom类型的,同时,聚合模块和父模块中的除了pom.xml,一般都是没有什么内容的。

实际使用是,我们经常将聚合和继承一起使用,能同时使用到两者的优点。

下面我们在javacode2018-parent中加入聚合的配置:

javacode2018-pc

javacode2018-h5

javacode2018-api

javacode20180-parent/pom.xml目录运行一下mvn install,看看效果:

D:\code\IdeaProjects\javacode2018-parent>mvn install

[INFO] Scanning for projects…

[INFO] ------------------------------------------------------------------------

[INFO] Reactor Build Order:

[INFO]

[INFO] javacode2018-parent                                                [pom]

[INFO] javacode2018-pc                                                    [jar]

[INFO] javacode2018-h5                                                    [jar]

[INFO] javacode2018-api                                                   [jar]

[INFO]

[INFO] ----------------< com.javacode2018:javacode2018-parent >----------------

[INFO] Building javacode2018-parent 1.0-SNAPSHOT                          [1/4]

[INFO] --------------------------------[ pom ]---------------------------------

[INFO]

[INFO] — maven-install-plugin:2.4:install (default-install) @ javacode2018-parent —

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\pom.xml to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-parent\1.0-SNAPSHOT\javacode2018-parent-1.0-SNAPSHOT.pom

[INFO]

[INFO] ------------------< com.javacode2018:javacode2018-pc >------------------

[INFO] Building javacode2018-pc 1.0-SNAPSHOT                              [2/4]

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ javacode2018-pc —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ javacode2018-pc —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ javacode2018-pc —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\src\test\resources

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javacode2018-pc —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ javacode2018-pc —

[INFO] No tests to run.

[INFO]

[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ javacode2018-pc —

[INFO]

[INFO] — maven-source-plugin:3.2.0:help (attach-source) @ javacode2018-pc —

[INFO] Apache Maven Source Plugin 3.2.0

The Maven Source Plugin creates a JAR archive of the source files of the

current project.

This plugin has 7 goals:

source:aggregate

Aggregate sources for all modules in an aggregator project.

source:generated-test-jar

This plugin bundles all the test sources into a jar archive.

source:help

Display help information on maven-source-plugin.

Call mvn source:help -Ddetail=true -Dgoal= to display parameter

details.

source:jar

This plugin bundles all the sources into a jar archive.

source:jar-no-fork

This goal bundles all the sources into a jar archive. This goal functions the

same as the jar goal but does not fork the build and is suitable for attaching

to the build lifecycle.

source:test-jar

This plugin bundles all the test sources into a jar archive.

source:test-jar-no-fork

This goal bundles all the test sources into a jar archive. This goal functions

the same as the test-jar goal but does not fork the build, and is suitable for

attaching to the build lifecycle.

[INFO]

[INFO] — maven-source-plugin:3.2.0:jar-no-fork (attach-source) @ javacode2018-pc —

[INFO]

[INFO] — maven-install-plugin:2.4:install (default-install) @ javacode2018-pc —

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT.jar

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\pom.xml to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT.pom

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT-sources.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-pc\1.0-SNAPSHOT\javacode2018-pc-1.0-SNAPSHOT-sources.jar

[INFO]

[INFO] ------------------< com.javacode2018:javacode2018-h5 >------------------

[INFO] Building javacode2018-h5 1.0-SNAPSHOT                              [3/4]

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ javacode2018-h5 —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ javacode2018-h5 —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ javacode2018-h5 —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode2018-parent\javacode2018-h5\src\test\resources

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javacode2018-h5 —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ javacode2018-h5 —

[INFO] No tests to run.

[INFO]

[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ javacode2018-h5 —

[INFO] Building jar: D:\code\IdeaProjects\javacode2018-parent\javacode2018-h5\target\javacode2018-h5-1.0-SNAPSHOT.jar

[INFO]

[INFO] — maven-install-plugin:2.4:install (default-install) @ javacode2018-h5 —

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-h5\target\javacode2018-h5-1.0-SNAPSHOT.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-h5\1.0-SNAPSHOT\javacode2018-h5-1.0-SNAPSHOT.jar

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-h5\pom.xml to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-h5\1.0-SNAPSHOT\javacode2018-h5-1.0-SNAPSHOT.pom

[INFO]

[INFO] -----------------< com.javacode2018:javacode2018-api >------------------

[INFO] Building javacode2018-api 1.0-SNAPSHOT                             [4/4]

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ javacode2018-api —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ javacode2018-api —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ javacode2018-api —

[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode2018-parent\javacode2018-api\src\test\resources

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javacode2018-api —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ javacode2018-api —

[INFO] No tests to run.

[INFO]

[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ javacode2018-api —

[INFO] Building jar: D:\code\IdeaProjects\javacode2018-parent\javacode2018-api\target\javacode2018-api-1.0-SNAPSHOT.jar

[INFO]

[INFO] — maven-install-plugin:2.4:install (default-install) @ javacode2018-api —

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-api\target\javacode2018-api-1.0-SNAPSHOT.jar to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-api\1.0-SNAPSHOT\javacode2018-api-1.0-SNAPSHOT.jar

[INFO] Installing D:\code\IdeaProjects\javacode2018-parent\javacode2018-api\pom.xml to C:\Users\Think.m2\repository\com\javacode2018\javacode2018-api\1.0-SNAPSHOT\javacode2018-api-1.0-SNAPSHOT.pom

[INFO] ------------------------------------------------------------------------

[INFO] Reactor Summary for javacode2018-parent 1.0-SNAPSHOT:

[INFO]

[INFO] javacode2018-parent … SUCCESS [  0.416 s]

[INFO] javacode2018-pc … SUCCESS [  2.654 s]

[INFO] javacode2018-h5 … SUCCESS [  0.262 s]

[INFO] javacode2018-api … SUCCESS [  0.225 s]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  3.827 s

[INFO] Finished at: 2019-11-19T17:51:42+08:00

[INFO] ------------------------------------------------------------------------

上篇文章中留下的2个问题

问题1

下面这个配置是干什么的?给哪个插件使用的?

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

编译代码的时候,涉及到资源文件和测试资源文件的拷贝,拷贝文件的时候涉及到文件的编码,这个是设置文件的编码为UTF-8格式的。

我们在上篇文章的maven-chat06项目的目录中执行mvn compile命令,效果如下:

D:\code\IdeaProjects\maven-chat06>mvn compile

[INFO] Scanning for projects…

[INFO]

[INFO] -------------------< com.javacode2018:maven-chat06 >--------------------

[INFO] Building maven-chat06 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ maven-chat06 —

[INFO] Using ‘UTF-8’ encoding to copy filtered resources.

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ maven-chat06 —

[INFO] Nothing to compile - all classes are up to date

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  1.179 s

[INFO] Finished at: 2019-11-19T17:57:27+08:00

[INFO] ------------------------------------------------------------------------

可以看到上面有这样的输出:

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ maven-chat06 —

[INFO] Using ‘UTF-8’ encoding to copy filtered resources.

从上面可以看出maven-resources-plugin插件的resources目标中会使用这个编码的配置,我们来看一下这个目标具体参数配置,我们截取了部分输出,如下:

D:\code\IdeaProjects\maven-chat06>mvn help:describe -Dplugin=resources -Dgoal=resources  -Ddetail

[INFO] Scanning for projects…

[INFO]

[INFO] -------------------< com.javacode2018:maven-chat06 >--------------------

[INFO] Building maven-chat06 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-help-plugin:3.2.0:describe (default-cli) @ maven-chat06 —

[INFO] Mojo: ‘resources:resources’

resources:resources

Description: Copy resources for the main source code to the main output

directory. Always uses the project.build.resources element to specify the

resources to copy.

Implementation: org.apache.maven.plugin.resources.ResourcesMojo

Language: java

Bound to phase: process-resources

Available parameters:

delimiters

Set of delimiters for expressions to filter within the resources. These

delimiters are specified in the form ‘beginTokenendToken’. If no '’ is

given, the delimiter is assumed to be the same for start and end.

So, the default filtering delimiters might be specified as:

${*}

@

Since the ‘@’ delimiter is the same on both ends, we don’t need to

specify ‘@*@’ (though we can).

encoding (Default: ${project.build.sourceEncoding})

User property: encoding

The character encoding scheme to be applied when filtering resources.

注意上面输出中最后的一部分,如下:

encoding (Default: ${project.build.sourceEncoding})

User property: encoding

The character encoding scheme to be applied when filtering resources.

encoding这个参数用来指定编码的,默认值是${project.build.sourceEncoding},也可以通过encoding用户属性来设置。

所以这个设置编码的还有下面3种写法,共四种:

pom.xml中2种:

UTF-8

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

mvn命令中2种:

mvn compile -Dencoding=UTF-8

mvn compile -Dproject.build.sourceEncoding=UTF-8

问题2

mvn test运行测试用例的时候,测试用例类名的写法默认是有规则的,这些规则有人知道么?从哪里可以看到这些规则?如何自定义?

我们在上一篇中的maven-chat06项目中执行mvn test,看看效果:

D:\code\IdeaProjects\maven-chat06>mvn test

[INFO] Scanning for projects…

[INFO]

[INFO] -------------------< com.javacode2018:maven-chat06 >--------------------

[INFO] Building maven-chat06 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ maven-chat06 —

[INFO] Using ‘UTF-8’ encoding to copy filtered resources.

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ maven-chat06 —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ maven-chat06 —

[INFO] Using ‘UTF-8’ encoding to copy filtered resources.

[INFO] Copying 0 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven-chat06 —

[INFO] Nothing to compile - all classes are up to date

[INFO]

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ maven-chat06 —

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  1.411 s

[INFO] Finished at: 2019-11-19T18:07:52+08:00

[INFO] ------------------------------------------------------------------------

可以看到下面这行:

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ maven-chat06 —

表示运行测试使用的是插件maven-surefire-plugintest目标。

我们看看这个目标详细参数,只列出部分信息,如下:

D:\code\IdeaProjects\maven-chat06>mvn help:describe -Dplugin=surefire -Dgoal=test -Ddetail

[INFO] Scanning for projects…

[INFO]

[INFO] -------------------< com.javacode2018:maven-chat06 >--------------------

[INFO] Building maven-chat06 1.0-SNAPSHOT

[INFO] --------------------------------[ jar ]---------------------------------

[INFO]

[INFO] — maven-help-plugin:3.2.0:describe (default-cli) @ maven-chat06 —

[INFO] Mojo: ‘surefire:test’

surefire:test

Description: Run tests using Surefire.

Implementation: org.apache.maven.plugin.surefire.SurefirePlugin

Language: java

Bound to phase: test

Available parameters:

includes

A list of  elements specifying the tests (by pattern) that

should be included in testing. When not specified and when the test

parameter is not specified, the default includes will be

**/IT*.java

**/*IT.java

**/*ITCase.java

Each include item may also contain a comma-separated sublist of items,

which will be treated as multiple   entries.

This parameter is ignored if the TestNG suiteXmlFiles parameter is

specified.

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  4.458 s

[INFO] Finished at: 2019-11-19T18:10:09+08:00

[INFO] ------------------------------------------------------------------------

可以看到上面有个includes参数,可以用来配置需要运行的测试用例,可以配置通配符的方式。

上面还有一段信息:

Implementation: org.apache.maven.plugin.surefire.SurefirePlugin

上面这部分列出了这个目标的具体实现类是SurefirePlugin

那么我们可以到本地仓库中看一下这个构件的源码,构件的坐标是:

org.apache.maven.plugins

maven-surefire-plugin

2.12.4

打开org.apache.maven.plugin.surefire.SurefirePlugin的源码,会找到下面代码:

protected String[] getDefaultIncludes()

{

return new String[]{ “/Test*.java", "/*Test.java”, “**/*TestCase.java” };

}

这部分代码就是我们测试用例默认需要满足的格式,你创建的测试用例默认情况下必须满足上面这3种格式,否则,测试用例不会被mvn test执行。

总结

  1. 需要掌握聚合的使用

  2. 掌握继承的使用

  3. 掌握单继承问题解决方案

  4. 掌握依赖管理和插件管理的使用

还是那句话,建议大家下去了多练练,都操作一遍,加深理解!

Maven系列目录

更多好文章

感谢大家的阅读,也欢迎您把这篇文章分享给更多的朋友一起阅读!谢谢!

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
 to phase: test

Available parameters:

includes

A list of  elements specifying the tests (by pattern) that

should be included in testing. When not specified and when the test

parameter is not specified, the default includes will be

**/IT*.java

**/*IT.java

**/*ITCase.java

Each include item may also contain a comma-separated sublist of items,

which will be treated as multiple   entries.

This parameter is ignored if the TestNG suiteXmlFiles parameter is

specified.

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time:  4.458 s

[INFO] Finished at: 2019-11-19T18:10:09+08:00

[INFO] ------------------------------------------------------------------------

可以看到上面有个includes参数,可以用来配置需要运行的测试用例,可以配置通配符的方式。

上面还有一段信息:

Implementation: org.apache.maven.plugin.surefire.SurefirePlugin

上面这部分列出了这个目标的具体实现类是SurefirePlugin

那么我们可以到本地仓库中看一下这个构件的源码,构件的坐标是:

org.apache.maven.plugins

maven-surefire-plugin

2.12.4

打开org.apache.maven.plugin.surefire.SurefirePlugin的源码,会找到下面代码:

protected String[] getDefaultIncludes()

{

return new String[]{ “/Test*.java", "/*Test.java”, “**/*TestCase.java” };

}

这部分代码就是我们测试用例默认需要满足的格式,你创建的测试用例默认情况下必须满足上面这3种格式,否则,测试用例不会被mvn test执行。

总结

  1. 需要掌握聚合的使用

  2. 掌握继承的使用

  3. 掌握单继承问题解决方案

  4. 掌握依赖管理和插件管理的使用

还是那句话,建议大家下去了多练练,都操作一遍,加深理解!

Maven系列目录

更多好文章

感谢大家的阅读,也欢迎您把这篇文章分享给更多的朋友一起阅读!谢谢!

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-xlajaaPn-1715828517617)]

[外链图片转存中…(img-mbKddkBh-1715828517617)]

[外链图片转存中…(img-Q2xjrpic-1715828517618)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值