maven插件详解,maven打包插件配置,Maven插件的安装及使用

maven插件详解,maven打包插件配置,Maven插件的安装及使用

本文主要介绍Maven插件的安装和使用,通过示例代码介绍的非常详细,对大家的学习或者工作有一定的参考价值。有需要的朋友下面和边肖一起学习。

Maven插件主要服务于maven生命周期中的各个阶段。maven只定义了三组生命周期,每组生命周期中有哪些阶段。每个阶段执行什么操作完全由插件来决定。

maven中的插件相当于一些工具,比如编译代码、运行测试用例、打包代码、上传代码到本地仓库、部署代码到远程仓库等工具。这些是maven中的插件。

插件可以通过mvn命令直接调用运行,也可以绑定到maven生命周期的阶段,然后mvn执行阶段的时候会自动执行这些阶段绑定的插件。

插件目标

maven中的插件以jar的形式存在于仓库中,与其他组件一样,通过坐标访问。每个插件都可能是代码可重用的,一个插件可能包含多个功能,比如编译代码的插件,可以编译源代码,也可以编译测试代码。一个插件中的每个功能被称为插件目标,每个插件可能包含一个或多个插件目标。

目标参数

插件是用来执行任务的,所以执行任务必须有参数。这些是目标的参数。每个插件目标对应java中的一个类,参数对应这个类中的属性。

列出插件所有目标

Mv插件goupId:插件artifactId[:插件版本]:帮助

Mv插件前缀:帮助

跳过上面插件的前缀,我们先来看第一个效果。

比如:

d:\ code \ idea projects \ maven-chat 06 mvn org . Apache . maven . plugins:maven-clean-plugin:help

[信息]扫描项目.

[信息]

[信息]-com . javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0-快照

[信息] - [罐子]

[信息]

[信息] - maven-clean-plugin:2.5:help(默认-cli) @ maven-chat06 -

[INFO]org . Apache . maven . plugins:maven-clean-plugin:2.5

Maven清理插件

Maven Clean插件是一个删除编译时生成的文件的插件

在项目的目录中。

这个插件有两个目标:

干净:干净

清理构建的目标。

这将尝试清除项目工作目录中

在构建时生成。默认情况下,它会发现并删除目录

在project.build.directory、project.build.outputDirectory、

project . build . testoutputdirectory和project . reporting . output directory。

通过配置,默认文件之外的文件也可能包括在删除中

文件集标记。

清洁:帮助

在maven-clean-plugin上显示帮助信息。

打电话

mvn clean:help-d detail=true-d goal=goal-name

显示参数详细信息。

上面列出了maven-clean-plugin插件的所有目标。有2个目标,即清洁:清洁和清洁:帮助。分号后面的部分是目标名,分号前面的部分是插件的前缀。每个目标的后面都有这个目标的详细说明,后面会详细介绍。

查看插件目标参数列表

Mv插件goupId:插件artifactId[:插件版本]:help -Dgoal=目标名称-Ddetail

Mv插件前缀:help -Dgoal=目标名称-Ddetail

上述命令中的-Ddetail用户输出目标的详细参数列表信息。没有这个,目标的参数表就不会输出。看效果。

比如:

d:\ code \ idea projects \ maven-chat 06 mvn org . Apache . maven . plugins:maven-clean-plugin:help-d goal=help-d detail

[信息]扫描项目.

[信息]

[信息]-com . javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0-快照

[信息] - [罐子]

[信息]

[信息] - maven-clean-plugin:2.5:帮助(默认-cli) @ maven-chat06 -

[信息]组织。阿帕奇。玛文。插件:maven清理插件:2.5

专家清理插件

Maven Clean插件是一个删除编译时生成的文件的插件

在项目的目录中。

清洁:帮助

在maven清理插件上显示帮助信息。

打电话

mvn clean:help-d detail=true-d goal=目标名称

显示参数详细信息。

可用参数:

详细信息(默认值:假)

如果为真,则显示每个目标的所有可设置属性。

表达式:${detail}

目标

要显示帮助的目标的名称。如果未指定,所有目标

将会显示。

表达式:${goal}

indentSize(默认值:2)

每个缩进级别的空格数应为正数。

表达式:${indentSize}

线路长度(默认值:80)

显示行的最大长度应为正数。

表达式:${lineLength}

上面列出了干净的插件的帮助目标的详细参数信息。

注意上面参数详细参数说明中有表达式:x x x这样的部分,这种表示给这个运行的目标传参,可以通过m v n D x x x这种方式传参,x x x为{xxx}这样的部分,这个xxx有时候和目标参数的名称不一致,所以这点需要注意,运行带参数的目标,看一下效果:

d:\ code \ idea project \ maven-chat 06 mvn org。阿帕奇。玛文。插件:maven-clean-plugin:help-d goal=help-d detail=false

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息] - maven-clean-plugin:2.5:帮助(默认-cli) @ maven-chat06 -

[信息]组织。阿帕奇。玛文。插件:maven清理插件:2.5

专家清理插件

Maven Clean插件是一个删除编译时生成的文件的插件

在项目的目录中。

清洁:帮助

在maven清理插件上显示帮助信息。

打电话

mvn clean:help-d detail=true-d goal=目标名称

显示参数详细信息。

[信息]

[信息]建立成功

[信息]

[信息]总时间:0.332秒

[信息]完成时间:2019-11-18T15:14:56 08:00

[信息]

上面传了一个细节=假,上面未输出目标的详细参数信息。

命令行运行插件

mvn插件goupId:插件artifactId[:插件版本]:插件目标[-D目标参数1] [-D目标参数2] [-D目标参数n]

mvn插件前缀:插件目标[-D目标参数1] [-D目标参数2] [-D目标参数n]

案例:

专家中运行测试用例使用到的插件坐标是:

属国

groupIdorg.apache.maven.plugins/groupId

artifact id maven-surefire-plugin/artifact id

版本2 .12 .4/版本

/依赖关系

我们看一下这个插件有哪些目标:

d:\ code \ idea project \ maven-chat 06 mvn org。阿帕奇。玛文。插件:maven-surefire-插件:帮助

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-maven-surefire-plugin:2。12 .4:帮助(默认-cli) @ maven-chat06 -

[信息[英语背诵文选插件

准不会有错的是一个测试框架项目。

这个插件有两个目标:

万全之策:救命

在maven-surefire-插件上显示帮助信息。

调用mvn surefire:help-d detail=true-d goal=goal-name来显示参数

细节。

万全之策:测试

使用准不会有错的运行测试。

[信息]

[信息]构建成功

[信息]

[信息]总时间:0.662秒

[信息]完成时间:2019-11-18T15:26:26 08:00

[信息]

maven-surefire-插件插件有2个目标帮助和测试,描述中可以看出试验目标是用来运行测试用例的。

我们看一下试验目标对应的参数列表:

试验目标对应的参数太多,我们只列出了部分参数,如下:

d:\ code \ idea project \ maven-chat 06 mvn org。阿帕奇。玛文。插件:maven-surefire-插件:帮助

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-maven-surefire-plugin:2。12 .4:帮助(默认-cli) @ maven-chat06 -

[信息[英语背诵文选插件

准不会有错的是一个测试框架项目。

这个插件有两个目标:

万全之策:救命

在maven-surefire-插件上显示帮助信息。

调用mvn surefire:help-d detail=true-d goal=goal-name来显示参数

细节。

万全之策:测试

使用准不会有错的运行测试。

[信息]

[信息]构建成功

[信息]

[信息]总时间:0.662秒

[信息]完成时间:2019-11-18T15:26:26 08:00

[信息]

大家认真看一下跳跃这个参数说明,这个参数默认是假的,如果设置为真实的的时候,项目将跳过测试代码的编译和测试用例的执行,可以maven.test。跳过这个属性来进行命令行传参,将其传递给试验目标的跳跃属性,这个通过-D传递的参数名称就和目标参数名称不一样了,所以需要注意-D后面并不一定是参数名称。

我们来运行一下试验目标看看效果。

先看一下不加参数的效果:

d:\ code \ idea project \ maven-chat 06 mvn org。阿帕奇。玛文。插件:maven-surefire-插件:测试

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-maven-surefire-plugin:2。12 .4:测试(默认-cli) @ maven-chat06 -

[信息]

[信息]构建成功

[信息]

[信息]总时间:0.640秒

[信息]完成时间:2019-11-18T15:33:48 08:00

[信息]

加maven.skip.test=true的效果如下:

d:\ code \ idea project \ maven-chat 06 mvn org。阿帕奇。玛文。插件:maven-surefire-plugin:test-dmaven。测试。跳过=真

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-maven-surefire-plugin:2。12 .4:测试(默认-cli) @ maven-chat06 -

[信息]测试被跳过。

[信息]

[信息]构建成功

[信息]

[信息]总时间:0.652秒

[信息]完成时间:2019-11-18T15:34:45 08:00

[信息]

对比一下上面2个输出,下面的多了一行如下:

[信息]测试被跳过。

说明跳过了测试的执行。

插件传参的2种方式

刚才上面讲了一种通过-D后面跟用户属性的方式给用户传参,还有一种方式,在pom.xml中性能的用户自定义属性中进行配置,如下:

修改项目maven-chat06的pom.xml,属性中加入:

maven.test.skiptrue/maven.test.skip

煤矿管理局中运行:

mvn组织。阿帕奇。玛文。插件:maven-surefire-插件:测试

效果如下:

d:\ code \ idea project \ maven-chat 06 mvn org。阿帕奇。玛文。插件:maven-surefire-插件:测试

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-maven-surefire-plugin:2。12 .4:测试(默认-cli) @ maven-chat06 -

[信息]测试被跳过。

[信息]

[信息]构建成功

[信息]

[信息]总时间:0.638秒

[信息]完成时间:2019-11-18T15:46:04 08:00

[信息]

输出中也有测试被跳过。说明也跳过了测试,和-Dmaven.test.skip=true效果一样。

上面说的都是插件目标的东西,那么插件目标是如何和生命周期关联起来的呢?继续向下看。

获取插件目标详细描述信息的另外一种方式

mvn帮助:describe -Dplugin=插件goupId:插件artifactId[:插件版本] -Dgoal=目标名称-详细信息

mvn帮助:describe -Dplugin=插件前缀-Dgoal=目标名称-详细信息

上面这个命令调用的是帮助插件的形容这个目标,这个目标可以列出其他指定插件目标的详细信息,看效果:

d:\ code \ idea projects \ maven-chat 06 mvn help:describe-Dplugin=org。阿帕奇。玛文。插件:maven-surefire-plugin-d目标=测试-d细节

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-maven-help-plugin:3。2 .0:describe(default-CLI)@ maven-chat 06-

[信息]魔咒:"万全之火:测试"

万全之策:测试

描述:使用准不会有错的运行测试。

实现:org。阿帕奇。玛文。插件。万无一失。surefire插件

语言:java

绑定到阶段:测试

可用参数:

additionalClasspathElements

要追加到类路径中的附加元素。

argLine

用户属性:argLine

在命令行上设置任意虚拟机(Java Virtual Machine的缩写)选项。

跳过(默认值:假)

用户属性:maven.test.skip

将此项设置为“真实”可完全绕过单元测试。它的用途不是

建议使用,尤其是当您使用" maven.test.skip "来启用它时

属性,因为maven.test .跳过禁用运行测试和

编译测试。请考虑改用跳跃测试参数。

可以拿这种和上面获取插件目标参数详情列表对比一下,上面这个更详细一些,参数说明中多了一行用户属性:属性名称,这个属性名称可以通过两种方式传递:

mvn命令-D属性名称的方式传递

pom.xml中性能中定义的方式指定。

现在可以大家估计可以知道我们一直用的-Dmaven.test.skip为什么可以跳过测试代码的编译和单元测试的执行了吧。

插件前缀

运行插件的时候,可以通过指定插件坐标的方式运行,但是插件的坐标信息过于复杂,也不方便写和记忆,所以专家中给插件定义了一些简捷的插件前缀,可以通过插件前缀来运行指定的插件。

可以通过下面命令查看到插件的前缀:

mvn帮助:describe -Dplugin=插件goupId:插件artifactId[:插件版本]

示例效果:

d:\ code \ idea projects \ maven-chat 06 mvn help:describe-Dplugin=org。阿帕奇。玛文。插件:maven-surefire-插件

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-maven-help-plugin:3。2 .0:describe(default-CLI)@ maven-chat 06-

[信息]组织。阿帕奇。玛文。插件:maven-surefire插件:2。12 .四

名称:Maven Surefire插件

描述:万全之策是一个测试框架项目。

群组id:org . Apache . maven plugins

工件Id: maven-surefire-plugin

版本:2.12.4

目标前缀:万全之策

目标前缀:输出的一部分对应于插件的前缀。上面这个插件的前缀是surefire。

让我们用前缀运行插件,感受一下效果:

d:\ code \ idea projects \ maven-chat 06 mvn surefire:test

[信息]扫描项目.

[信息]

[信息]-com . javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0-快照

[信息] - [罐子]

[信息]

[信息]-maven-surefire-plugin:2 . 12 . 4:test(默认-cli) @ maven-chat06 -

[信息]测试被跳过。

[信息]

[信息]建立成功

[信息]

[信息]总时间:0.934秒

[信息]完成时间:2019-11-18T16:18:42 08:00

[信息]

用别名运行插件maven-surefire-plugin的测试目标是不是简单很多?

上面用了很多mvn帮助:这个命令,调用maven-help-plugin的函数。help是插件的前缀,它的坐标是:

属国

groupIdorg.apache.maven.plugins/groupId

artifactId maven-help-plugin/artifactId

版本3 . 2 . 0/版本

/依赖关系

插件和生命周期阶段绑定

Maven只定义了生命周期中的阶段,没有定义每个阶段的具体实现。这些实现都是由插件目标完成的,所以需要将阶段与插件目标绑定,这样插件目标才能帮助生命周期中的阶段做具体的工作。生命周期中的每个阶段都支持绑定多个插件的多个目标。

当我们将生命周期中的阶段和插件的目标进行绑定的时候,执行mvn 阶段就可以执行和这些阶段绑定的插件目标。

maven内置插件以及绑定

Maven帮助我们在没有任何配置的情况下构建一些项目。比如运行mvn clean可以帮助我们清理代码,运行mvn install可以将组件安装到本地仓库,所以maven为我们做了一些事情。maven内部已经提供了很多默认插件,有些阶段默认绑定了这些插件阶段。因此我们可以执行清理代码、编译代码、测试、打包、安装到本地仓库、上传到远程仓库等操作。没有任何配置。是因为maven在默认情况下已经将插件目标绑定到了这些阶段,所以可以直接运行,不需要任何进一步的配置。这些都是maven内置绑定帮助我们做的事情。我们来看看maven内置绑定都有哪些。

maven内置绑定

CleanLifecycle阶段清理插件绑定关系

生命周期阶段

插件:目标

预清洗

干净的

清理插件:清理

后清洗

默认情况下,只有清理周期中的清理阶段与maven-clean-plugin插件的清理目标绑定。maven-clean-plugin插件的清理目标是删除项目的输出目录。

default生命周期阶段与插件绑定关系

违约的生命周期有23个阶段。我只列出那些有默认绑定的,其他没有列出的都没有绑定任何插件,所以没有实际行为。

生命周期阶段

插件:目标

执行任务

流程-资源

maven-资源-插件:资源

将主资源文件复制到主输出目录。

编制

maven-编译器-插件:编译

将主代码编译到主输出目录中。

流程-测试-资源

maven-resources-插件:testResources

将测试资源文件复制到测试输出目录。

测试编译

maven-编译器-插件:testCompile

将测试代码编译到测试输出目录中。

试验

maven-surefile-plugin:测试

执行测试用例

包裹

插件:jar

创建一个项目jar包

安装

maven安装插件:安装

将输出组件安装到本地仓库。

部署

maven-部署-插件:部署

将导出的工件部署到远程仓库。

site生命周期阶段与插件绑定关系

生命周期阶段

插件:目标

预制场地

位置

玛文-站点-插件:站点

后期网站

现场部署

玛文-站点-插件:部署

来几个案例解说一下。

mvn clean

该命令是调用干净的生命周期的干净的阶段,实际执行的阶段为干净的生命周期中的预清洗和干净的阶段,从上面内置绑定表格中找一下,可以看到只有干净的阶段绑定了专家清理插件插件的干净的目标,所以运行mvn清洁的时候,实际上会调用专家清理插件插件的干净的目标来清理代码。

运行一下看一下效果:

d:\ code \ idea project \ maven-chat 06 mvn clean

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息] - maven-clean-plugin:2.5:clean(默认-干净)@ maven-chat06 -

[信息]删除d:\ code \ idea project \ maven-chat 06 \ target

[信息]

[信息]构建成功

[信息]

[信息]总时间:0.408秒

[信息]完成时间:2019-11-18T16:34:14 08:00

[信息]

上面有一行输出如下:

[信息] - maven-clean-plugin:2.5:clean(默认-干净)@ maven-chat06 -

这个表示调用的插件是:maven-clean-plugin,版本是:2.5,插件的目标是:清洁

该命令调用系统默认值生命周期的试验阶段,实际上会从系统默认值生命周期的第一个阶段(验证)开始执行一直到试验阶段结束。这里面包含了代码的编译,运行测试用例。还是和上面的分析过程一样,对照上面表格中的绑定关系,可以得到mvn试验会调用下面一些插件的目标:

玛文-资源-插件:资源

玛文-编译器-插件:编译

maven-资源插件:测试资源

玛文-编译器-插件:测试编译

maven-surefile-plugin:测试

我们来验证一下,看看是不是和我们分析的一样:

d:\ code \ idea projects \ maven-chat 06 mvn测试

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-maven-resources-plugin:2.6:资源(默认-资源)@ maven-chat06 -

[信息]使用“UTF八号”编码来复制筛选的资源。

[信息]正在复制0资源

[信息]

[信息]-maven-编译器-插件:3.1:编译(默认-编译)@ maven-chat06 -

[信息]检测到更改-正在重新编译模块!

[信息]将一个源文件编译到d:\ code \ idea project \ maven-chat 06 \ target \ classes

[信息]

[信息]-maven-resources-plugin:2.6:测试资源(默认-testResources) @ maven-chat06 -

[信息]使用“UTF八号”编码来复制筛选的资源。

[信息]正在复制0资源

[信息]

[信息]-maven-compiler-plugin:3.1:测试编译(默认-测试编译)@ maven-chat 06-

[信息]检测到更改-正在重新编译模块!

[信息]将一个源文件编译到d:\ code \ idea projects \ maven-chat 06 \ target \ test-class

[信息]

[信息]-maven-surefire-plugin:2。12 .4:测试(默认-测试)@ maven-chat06 -

[信息]测试被跳过。

[信息]

[信息]构建成功

[信息]

[信息]总时间:1.880秒

[信息]完成时间:2019-11-18T16:36:55 08:00

[信息]

从上面输出中可以看到调用了5个插件的目标,和分析的一样。

再来看一个跳过测试的例子,如下:

d:\ code \ idea projects \ maven-chat 06 mvn test-dmaven。跳过。测试=真

[信息]扫描项目.

[信息]

[信息]-com。javacode 2018:maven-chat 06-

[信息]构建maven-chat 06 1.0快照

[信息] - [罐子]

[信息]

[信息]-玛芬-资源-插件:2.6:资源

(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] Tests are skipped. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.384 s [INFO] Finished at: 2019-11-18T16:38:52+08:00 [INFO] ------------------------------------------------------------------------

上面这个是不是很熟悉,经常用到的跳过测试,为什么这么写,我想大家都知道了吧。

其他几个mvn compile、mvn install、mvn deploy建议大家也自己去玩玩,加深理解。

自定义绑定

除了默认绑定的一些操作,我们自己也可以将一些阶段绑定到指定的插件目标上来完成一些操作,这种自定义绑定让maven项目在构件的过程中可以执行更多更丰富的操作。

常见的一个案例是:创建项目的源码jar包,将其安装到仓库中,内置插件绑定关系中没有涉及到这一步的任务,所以需要用户自己配置。

插件maven-source-plugin的jar-no-fork可以帮助我们完成该任务,我们将这个目标绑定在default生命周期的verify阶段上面,这个阶段没有任何默认绑定,verify是在测试完成之后并将构件安装到本地仓库之前执行的阶段,在这个阶段我们生成源码,配置如下:

在maven-chat06中的pom.xml加入如下配置:

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.2.0</version> <executions> <!-- 使用插件需要执行的任务 --> <execution> <!-- 任务id --> <id>attach-source</id> <!-- 任务中插件的目标,可以指定多个 --> <goals> <goal>jar-no-fork</goal> </goals> <!-- 绑定的阶段 --> <phase>verify</phase> </execution> </executions> </plugin> </plugins> </build>

注意上面配置的attach-source,后面输出中会有。

id:任务的id,需唯一,如果不指定,默认为default。

每个插件的配置在pom.xml的plugins元素中只能写一次,否则会有警告。

最终pom.xml如下:

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.2.0</version> <executions> <!-- 使用插件需要执行的任务 --> <execution> <!-- 任务id --> <id>attach-source</id> <!-- 任务中插件的目标,可以指定多个 --> <goals> <goal>jar-no-fork</goal> </goals> <!-- 绑定的阶段 --> <phase>verify</phase> </execution> </executions> </plugin> </plugins> </build>

运行下面命令:

mvn install

效果:

D:\code\IdeaProjects\maven-chat06>mvn install [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] --- maven-jar-plugin:2.4:jar (default-jar) @ maven-chat06 --- [INFO] [INFO] --- maven-source-plugin:3.2.0:jar-no-fork (attach-source) @ maven-chat06 --- [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ maven-chat06 --- [INFO] Installing D:\code\IdeaProjects\maven-chat06\target\maven-chat06-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT.jar [INFO] Installing D:\code\IdeaProjects\maven-chat06\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT.pom [INFO] Installing D:\code\IdeaProjects\maven-chat06\target\maven-chat06-1.0-SNAPSHOT-sources.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat06\1.0-SNAPSHOT\maven-chat06-1.0-SNAPSHOT-sources.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.268 s [INFO] Finished at: 2019-11-18T16:59:12+08:00 [INFO] ------------------------------------------------------------------------

上面有个输出如下:

maven-source-plugin:3.2.0:jar-no-fork (attach-source) @ maven-chat06 ---

可以看出调用了我们配置的插件生成源码jar,上面的括号中的attach-source就是pom.xml中配置的任务id。

最后有个输出:

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

可以看到将源码安装到本地仓库了。

有些插件的目标默认会绑定到一些生命周期的阶段中,那么如果刚好插件默认绑定的阶段和上面配置的一致,那么上面phase元素可以不写了,那么怎么查看插件的默认绑定呢?

mvn help:describe -Dplugin=插件goupId:插件artifactId[:插件version] -Dgoal=目标名称 -Ddetail mvn help:describe -Dplugin=插件前缀 -Dgoal=目标名称 -Ddetail

我们看一下插件source的jar-no-fork目标默认的绑定:

D:\code\IdeaProjects\maven-chat06>mvn help:describe -Dplugin=source -Dgoal=jar-no-fork -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: 'source:jar-no-fork' source:jar-no-fork Description: 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. Implementation: org.apache.maven.plugins.source.SourceJarNoForkMojo Language: java Bound to phase: package

上面输出中有个Bound to phase: package,表示默认绑定在了package阶段上。

我们知道3套生命周期的运行时没有依赖的,但是每套中的阶段是有先后顺序的,运行某个阶段的时候,会先执行他前面所有的阶段。清理代码使用的是clean周期中的clean阶段,编译代码用的是default周期中的compile阶段,当直接运行mvn compile编译代码的时候并不会去清理代码,编译代码的时候若发现文件没有变动,会跳过没有变化的文件进行编译。如果我们想每次编译之前强制先清理代码,我们经常这么写:

mvn clean compile

上面的写法是不是很熟悉,运行一下看看效果:

D:\code\IdeaProjects\maven-chat06>mvn clean compile [INFO] Scanning for projects... [INFO] [INFO] -------------------< com.javacode2018:maven-chat06 >-------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [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] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.666 s [INFO] Finished at: 2019-11-18T17:16:53+08:00 [INFO] ------------------------------------------------------------------------

还有其他方式么?

我们刚才学了自定义绑定,我们可以在default生命周期的第一个阶段validate绑定清理代码的插件,那我们来通过自定义绑定来实现一下,project->build->plugins元素中加入下面配置:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <executions> <!-- 使用插件需要执行的任务 --> <execution> <!-- 任务中插件的目标,可以指定多个 --> <id>clean-target</id> <goals> <goal>clean</goal> </goals> <!-- 绑定的阶段 --> <phase>validate</phase> </execution> </executions> </plugin>

运行下面命令看效果:

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-clean-plugin:2.5:clean (clean-target) @ maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [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] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.630 s [INFO] Finished at: 2019-11-18T17:22:37+08:00 [INFO] ------------------------------------------------------------------------

输出中有:

[INFO] --- maven-clean-plugin:2.5:clean (clean-target) @ maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target

这个表示运行了代码清理的功能,进行了代码清理,是不是感觉很爽,不用每次都写clean了。

POM.xml插件配置详解

插件目标共享参数配置

build->plugins->plugin中配置:

<!-- 插件参数配置,对插件中所有的目标起效 --> <configuration> <目标参数名>参数值</目标参数名> </configuration>

configuration节点下配置目标参数的值,节点名称为目标的参数名称,上面这种配置对当前插件的所有目标起效,也就是说这个插件中所有的目标共享此参数配置。

案例: 将案例中的pom.xml中的build元素修改成下面这样。

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <!-- 插件参数配置,对插件中所有的目标起效 --> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build>

运行下面命令,看效果:

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] Tests are skipped. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.328 s [INFO] Finished at: 2019-11-18T17:30:58+08:00 [INFO] ------------------------------------------------------------------------

可以看到Test are skipped,说明跳过了测试,到此为止,跳过测试已经讲了3种了:

1. mvn -Dmaven.test.skip=tue 2. properties中配置<maven.test.skip>true</maven.test.skip> 3. build中配置插件参数的方式

上面这个配置参数方式对当前插件的所有目标有效,如果想对指定的目标进行配置呢,用下面的方式。

插件目标参数配置

project->build->plugins->plugin->executions->execution元素中进行配置,如下:

<!-- 这个地方配置只对当前任务有效 --> <configuration> <目标参数名>参数值</目标参数名> </configuration>

上面这种配置常用于自定义插件绑定,只对当前任务有效。

感受一下效果,将pom.xml中的build元素改为下面内容:

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <executions> <execution> <goals> <goal>test</goal> <goal>help</goal> </goals> <phase>pre-clean</phase> <!-- 这个地方配置只对当前任务有效 --> <configuration> <skip>true</skip> </configuration> </execution> </executions> </plugin> </plugins> </build>

上面自定义了一个绑定,在clean周期的pre-clean阶段绑定了插件maven-surefire-plugin的两个目标test和help,execution元素没有指定id,所以默认id是default。

运行下面命令,见效果:

D:\code\IdeaProjects\maven-chat06>mvn pre-clean [INFO] Scanning for projects... [INFO] [INFO] -------------------< com.javacode2018:maven-chat06 >-------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default) @ maven-chat06 --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-surefire-plugin:2.12.4:help (default) @ maven-chat06 --- [INFO] Maven Surefire Plugin 2.12.4 Surefire is a test framework project. This plugin has 2 goals: surefire:help Display help information on maven-surefire-plugin. Call mvn surefire:help -Ddetail=true -Dgoal=<goal-name> to display parameter details. surefire:test Run tests using Surefire. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.738 s [INFO] Finished at: 2019-11-18T17:41:08+08:00 [INFO] ------------------------------------------------------------------------

可以看到上面输出中运行了插件的两个目标,和预期结果一致。

获取maven插件信息

上面我们介绍了,可以通过下面命令获取插件详细介绍信息

mvn help:describe -Dplugin=插件goupId:插件artifactId[:插件version] -Dgoal=目标名称 -Ddetail mvn help:describe -Dplugin=插件前缀 -Dgoal=目标名称 -Ddetail

更多maven插件的帮助文档可以参考maven的官方网站,上面有详细的介绍,建议大家去看看,地址:http://maven.apache.org/plugins/

插件解析机制

为了方便用户使用和配置插件,maven不需要用户提供完整的插件坐标信息,就可以解析到正确的插件,不过我建议使用插件配置的时候最好还是配置完整的坐标信息,不然不利于新人的理解和问题的排查。

插件仓库

与其他maven构件一样,插件构件也是基于坐标存储在maven仓库中,有需要的时候,maven会从本地查找插件,如果不存在,则到远程仓库查找,找到了以后下载到本地仓库,然后使用。

大家回忆一下,上一章讲过的,pom.xml中可以配置依赖的构件的仓库地址,如下:

<repositories> <repository> <id>maven-nexus</id> <url>http://localhost:8081/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>

但是插件仓库的配置和这个有一点不一样,插件的是在pluginRepositories->pluginRepository元素中配置的,如下:

<pluginRepositories> <pluginRepository> <id>myplugin-repository</id> <url>http://repo1.maven.org/maven2/</url> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories>

看一下上面2段配置,repository中的配置和pluginRepository中的子元素是一样的,这个主意下就可以了。

插件的默认groupId

在pom.xml中配置插件的时候,如果是官方的插件,可以省略groupId。

案例:

修改本篇示例中的pom.xml,如下:

<pluginRepositories> <pluginRepository> <id>myplugin-repository</id> <url>http://repo1.maven.org/maven2/</url> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories>

上面用到了maven-compiler-plugin,这个插件是编译代码的,是maven官方提供的插件,我们省略了groupId。

上面这个插件用于编译代码的,编译代码的时候需要指定编译器的版本,源码的版本,目标代码的版本,都是用的是1.8。

大家回头去看一下,文章最开始的时候,在properties中有几个属性值是1.8的配置,这几个值默认会被maven-compiler-plugin这个插件的上面3个参数获取,具体可以去看一下这个插件compile目标的参数说明。

运行下面命令:

D:\code\IdeaProjects\maven-chat06>mvn clean compile [INFO] Scanning for projects... [INFO] [INFO] -------------------< com.javacode2018:maven-chat06 >-------------------- [INFO] Building maven-chat06 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-chat06 --- [INFO] Deleting D:\code\IdeaProjects\maven-chat06\target [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] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat06\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.692 s [INFO] Finished at: 2019-11-18T18:11:34+08:00 [INFO] ------------------------------------------------------------------------

可以看到可以正常运行。

上面pom.xml省略了插件的groupId配置,如下:

<groupId>org.apache.maven.plugins</groupId>

maven在解析该插件的时候,会自动给这个插件补上默认的官方的groupId,所以可以正常运行,但是不建议大家这么使用,容易让新手比较懵逼。

插件前缀的解析

前面说过了使用mvn命令调用插件的时候,可以使用插件的前缀来代替繁琐的插件坐标的方式,那么maven是如何根据插件的前缀找到对应的插件的呢?

插件前缀与插件groupId:artifactId是一一对应的关系,这个关系的配置存储在仓库的元数据中,元数据位于下面2个xml中:

~/.m2/repository/org/apache/maven/plugins/maven-metadata-central.xml ~/.m2/repository/org/codehaus/mojo/maven-metadata-central.xml

接几个图,大家感受一下:

也可以通过在settings.xml中配置,让maven检查其他grouId上的插件元数据中前缀和插件关系的配置,如下:

<settings> <pluginGroups> <pluginGroup>com.your.plugins</pluginGroup> </pluginGroups> </settings>

pluginGroups中有多个pluginGroup,可以配置你自己插件的元数据所在的groupId,然后可以通过前缀来访问你自己的插件元数据目录,此处先不细说,这个后面文章中讲自定义插件的时候会再次说明。

查看项目最终pom.xml文件

我们的pom.xml默认会继承maven顶级的一个父类pom.xml,顶级的pom.xml中指定了很多默认的配置,如生命周期中的阶段和很多插件的绑定,这些如果我们想看到,到哪里看呢?

mvn命令在项目中执行的时候,我们的pom.xml和父类的pom.xml最终会进行合并,当我们的pom.xml写的比较复杂的时候,最终合并之后是什么效果呢,我们可以通过下面这个命令查看:

mvn help:effective-pom

效果:

D:\code\IdeaProjects\maven-chat06>mvn help:effective-pom > 1.xml

上面我们将命令产生的结果输出到项目的1.xml文件中了,我们看一下项目的1.xml的内容:

<?xml version="1.0" encoding="GBK"?> <!-- ====================================================================== --> <!-- --> <!-- Generated by Maven Help Plugin on 2019-11-18T18:41:40+08:00 --> <!-- See: http://maven.apache.org/plugins/maven-help-plugin/ --> <!-- --> <!-- ====================================================================== --> <!-- ====================================================================== --> <!-- --> <!-- Effective POM for project --> <!-- 'com.javacode2018:maven-chat06:jar:1.0-SNAPSHOT' --> <!-- --> <!-- ====================================================================== --> <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"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacode2018</groupId> <artifactId>maven-chat06</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> </pluginRepository> </pluginRepositories> <build> <sourceDirectory>D:\code\IdeaProjects\maven-chat06\src\main\java</sourceDirectory> <scriptSourceDirectory>D:\code\IdeaProjects\maven-chat06\src\main\scripts</scriptSourceDirectory> <testSourceDirectory>D:\code\IdeaProjects\maven-chat06\src\test\java</testSourceDirectory> <outputDirectory>D:\code\IdeaProjects\maven-chat06\target\classes</outputDirectory> <testOutputDirectory>D:\code\IdeaProjects\maven-chat06\target\test-classes</testOutputDirectory> <resources> <resource> <directory>D:\code\IdeaProjects\maven-chat06\src\main\resources</directory> </resource> </resources> <testResources> <testResource> <directory>D:\code\IdeaProjects\maven-chat06\src\test\resources</directory> </testResource> </testResources> <directory>D:\code\IdeaProjects\maven-chat06\target</directory> <finalName>maven-chat06-1.0-SNAPSHOT</finalName> <pluginManagement> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.3</version> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2-beta-5</version> </plugin> <plugin> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> </plugin> <plugin> <artifactId>maven-release-plugin</artifactId> <version>2.5.3</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <executions> <execution> <id>default-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> <configuration> <compilerVersion>1.8</compilerVersion> <source>1.8</source> <target>1.8</target> </configuration> </execution> <execution> <id>default-testCompile</id> <phase>test-compile</phase> <goals> <goal>testCompile</goal> </goals> <configuration> <compilerVersion>1.8</compilerVersion> <source>1.8</source> <target>1.8</target> </configuration> </execution> </executions> <configuration> <compilerVersion>1.8</compilerVersion> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <executions> <execution> <id>default-clean</id> <phase>clean</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>default-testResources</id> <phase>process-test-resources</phase> <goals> <goal>testResources</goal> </goals> </execution> <execution> <id>default-resources</id> <phase>process-resources</phase> <goals> <goal>resources</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>default-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <executions> <execution> <id>default-test</id> <phase>test</phase> <goals> <goal>test</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>default-install</id> <phase>install</phase> <goals> <goal>install</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.7</version> <executions> <execution> <id>default-deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.3</version> <executions> <execution> <id>default-site</id> <phase>site</phase> <goals> <goal>site</goal> </goals> <configuration> <outputDirectory>D:\code\IdeaProjects\maven-chat06\target\site</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </execution> <execution> <id>default-deploy</id> <phase>site-deploy</phase> <goals> <goal>deploy</goal> </goals> <configuration> <outputDirectory>D:\code\IdeaProjects\maven-chat06\target\site</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </execution> </executions> <configuration> <outputDirectory>D:\code\IdeaProjects\maven-chat06\target\site</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </plugin> </plugins> </build> <reporting> <outputDirectory>D:\code\IdeaProjects\maven-chat06\target\site</outputDirectory> </reporting> </project>

上面这个文件,大家一定要认真多看几遍,理解一下,里面包含太多东西,再重复一下,上面的文件多看几遍!多看几遍!多看几遍!要理解!

到此这篇关于Maven插件的安装及使用的文章就介绍到这了,更多相关Maven插件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • maven环境变量怎么配,maven的环境配置
  • maven默认仓库地址,maven默认仓库地址
  • maven默认仓库,maven项目设置本地仓库,maven配置阿里仓库的方法步骤
  • maven的安装和配置,maven下载安装教程
  • maven的安装和配置,maven下载安装教程,Maven安装过程图文详解
  • maven环境变量配置教程,maven 环境变量设置
  • maven环境变量配置教程,maven 环境变量设置,maven 环境变量的配置详解
  • maven环境变量怎么配,maven的环境配置,maven环境变量配置讲解
  • maven插件详解,maven打包插件配置
  • Maven常用命令,maven各种命令是做什么用的
  • Maven常用命令,maven各种命令是做什么用的,一篇文章带你了解常用的Maven命令
  • maven安装及配置,maven安装与配置注意事项
  • maven安装及配置,maven安装与配置注意事项,Maven安装与配置图文教程
  • maven仓库怎么配置,maven默认仓库
  • idea maven清除缓存,idea清理class文件
  • 留言与评论(共有 条评论)
       
    验证码: