首页
Maven教程
Linux
云原生
常用bat文件
mongodb
设计模式
Oracle常用知识梳理
更多……
申请加入课程
Maven简介以及课程内容介绍
Maven安装
Maven启用代理访问
Maven资源库:本地库、中央库、远程库讲解及其关系
Maven依赖机制
将本地jar放入maven本地仓库中
Maven创建Java项目和Web项目
Maven的build配置信息
Maven的pom文件详解
Maven 构建生命周期
Maven插件
Eclispe IDE集成Maven
使用Maven清理项目
一些瞎搞出来的问题记录
Maven项目聚合
Maven中pom文件编写规范
Maven snapshot快照库和release发布库
Maven插件
星辰
2018-05-23
0
0
934
人
0
人评论
0
人举报
[TOC] # 什么是 Maven 的插件? Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的。Maven 插件通常用于: * 创建 jar 文件 * 创建 war 文件 * 编译代码文件 * 进行代码单元测试 * 创建项目文档 * 创建项目报告 一个插件通常提供了一组目标,可使用以下语法来执行: `mvn [plugin-name]:[goal-name]` 例如,一个 Java 项目可以使用 Maven 编译器插件来编译目标,通过运行以下命令编译 `mvn compiler:compile` # maven的生命周期有哪些阶段? ``` [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy] ``` # 插件类型 Maven 提供以下两种类型插件: 类型|描述 --|-- 构建插件|在生成过程中执行,并在 pom.xml 中的`
` 元素进行配置 报告插件|在网站生成期间执行,在 pom.xml 中的 `
` 元素进行配置 以下是一些常见的插件列表: 插件|描述 --|-- clean|编译后的清理目标,删除目标目录 compiler|编译 Java 源文件 surefile|运行JUnit单元测试,创建测试报告 jar|从当前项目构建 JAR 文件 war|从当前项目构建 WAR 文件 javadoc|产生用于该项目的 Javadoc antrun|从构建所述的任何阶段运行一组 Ant 任务 # 例子 我们使用 maven-antrun-plugin 插件在例子中来在控制台打印数据。现在在 C:\MVN\project 文件夹 创建一个 pom.xml 文件,内容如下: ```
4.0.0
com.companyname.projectgroup
project
1.0
org.apache.maven.plugins
maven-antrun-plugin
1.1
id.clean
clean
run
clean phase
``` 接下来,打开命令控制台,并转到包含 pom.xml 的文件夹并执行以下命令 mvn 命令。 `C:\MVN\project>mvn clean` Maven 将开始处理并显示清洁周期/阶段,如下图中输出: ``` [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: < 1 second [INFO] Finished at: Sat Jul 07 13:38:59 IST 2012 [INFO] Final Memory: 4M/44M [INFO] ------------------------------------------------------------------ ``` 上面的例子说明了以下关键概念: * 插件可在 pom.xml 使用的 plugin 元素来指定; * 每个插件可以有多个目标; * 从插件应使用它的相位元素开始处理定义阶段。这里已经使用 clean 阶段; * 可以通过将它们绑定到插件的目标来执行配置任务。这里已经绑定 echo 任务到 maven-antrun-plugin 的运行目标; * 就这样,Maven将处理其余部分。如果没有可用的本地存储库,它会下载这个插件; # 常用插件介绍 ## 常用打包插件 | plugin | function | | ----------------------- | ---------------------------------------------- | | `maven-jar-plugin` | maven 默认打包插件,用来创建 project jar | | `maven-shade-plugin` | 用来打可执行包,executable(fat) jar | | `maven-assembly-plugin` | 支持定制化打包方式,例如 apache 项目的打包方式 | ### maven-jar-plugin 暂未测试,改天有空再测试下 打成jar时,设定manifest的参数,比如指定运行的Main class,还有依赖的jar包,加入classpath中 ```
org.apache.maven.plugins
maven-jar-plugin
2.4
true
/data/lib
com.zhang.spring.App
# maven插件把依赖的所有jar包找出来
org.apache.maven.plugins
maven-rar-plugin
2.4
``` ### maven-shade-plugin 暂未测试过 用于把多个jar包,打成1个jar包 一般Java项目都会依赖其他第三方jar包,最终打包时,希望把其他jar包包含在一个jar包里。 与assembly类似,使用assembly即可。以下详解assembly。 ### 推荐使用的打包插件 maven-assembly-plugin ```
org.apache.maven.plugins
maven-assembly-plugin
make-assembly
package
(1)
single
(2)
${project.name}
...
src/main/assembly/assembly.xml
``` **两个主要的参数设置(上述中的(1)(2))** * I)Assembly插件的goals single help 可以执行如下命令完成动作: `mvn assembly:single` 或者是,绑定到package生命周期阶段上(见上配置)触发。后续可以直接执行: `mvn package` 这也是最常见的Assembly插件配置方式。 * II)Assembly descriptor Assembly Descriptor可以使用内置的,或者定制的。 ##### (1) 使用内置的Assembly Descriptor 要使用maven-assembly-plugin,需要指定至少一个要使用的assembly descriptor 文件。默认情况下,maven-assembly-plugin内置了几个可以用的assembly descriptor: - bin : 类似于默认打包,会将bin目录下的文件打到包中; - jar-with-dependencies : 会将所有依赖都解压打包到生成物中; - src :只将源码目录下的文件打包; - project : 将整个project资源打包。 使用 descriptorRefs来引用(官方提供的定制化打包方式)【不建议使用】 ```
maven-assembly-plugin
jar-with-dependencies
``` 上述直接配置`jar-with-dependencies`打包方式。不需要引入额外文件。实际上,上述4中预定义的assembly descriptor有对应的xml。要查看它们的详细定义,可以到maven-assembly-plugin.jar里去看,例如对应 bin 的assembly descriptor 原始文件如下: ```
bin
tar.gz
tar.bz2
zip
${project.basedir}
/
README*
LICENSE*
NOTICE*
${project.build.directory}
/
*.jar
${project.build.directory}/site
docs
``` (2) 自定义Assembly Descriptor 一般来说,内置的assembly descriptor都不满足需求,这个时候就需要写自己的assembly descriptor的实现了。 使用 `descriptors`,指定打包文件 `src/assembly/assembly.xml`,即在配置文件内指定打包操作要使用这个自定义assembly descriptor(自定义的xml中配置),需要如下配置,即要引入描述文件: ```
demo
src/assembly/assembly.xml
output
``` 示例: `src/assembly/assembly.xml`: ```
demo
jar
false
${project.build.directory}/classes
/
``` 这个定义很简单: - format:指定打包类型; - includeBaseDirectory:指定是否包含打包层目录(比如finalName是output,当值为true,所有文件被放在output目录下,否则直接放在包的根目录下); - fileSets:指定要包含的文件集,可以定义多个fileSet; - directory:指定要包含的目录; - outputDirectory:指定当前要包含的目录的目的地。 回到pom的配置中,自定义的configuration配置后,将会生成一个`demo-demo.jar` 文件在目录 `output` 下,其中前一个`demo`来自`finalName`,后一个`demo`来自assembly descriptor中的`id`,其中的内容和默认的打包出来的jar类似。 如果只想有finalName,则增加配置: ```
false
``` 对于描述文件的元素,即assembly.xml中的配置节点的详细配置,在此稍作总结,见下。 **assembly.xml节点配置** 在配置assembly.xml之前,我们先看一下pom中引入插件的结构。 ```
[...]
[...]
------------(1)坐标-----------
maven-assembly-plugin
3.0.0
------------(2)入口-----------
true
com.***.startup.BootStrap
------------(3)描述-----------
src/assembly/assembly.xml
[...]
``` **archive说明** 上面的`mainClass`标签中的内容替换成自己的`main`函数所在的类,前面要包含`package`名字,也就是`package_name.MainClassName`。 assembly.xml文件的主要结构如下。 **id** ```
distribution
``` id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话,目标文件则是 `${artifactId}-${id}.tar.gz` **formats** maven-assembly-plugin 支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式 ```
dir
``` **dependencySets** 用来定制工程依赖 jar 包的打包方式,核心元素如下表所示。 | 元素 | 类型 | 作用 | | --------------- | ------------ | ------------------------------------ | | outputDirectory | String | 指定包依赖目录,该目录是相对于根目录 | | includes | List
| 包含依赖 | | excludes | List
| 排除依赖 | ```
/lib
${project.groupId}:${project.artifactId}
/
${project.groupId}:${project.artifactId}
``` **fileSets** 管理一组文件的存放位置,核心元素如下表所示。 | 元素 | 类型 | 作用 | | --------------- | ------------ | ------------------------------------------------------------ | | outputDirectory | String | 指定文件集合的输出目录,该目录是相对于根目录 | | includes | List
| 包含文件 | | excludes | List
| 排除文件 | | fileMode | String | 指定文件属性,使用八进制表达,分别为(User)(Group)(Other)所属属性,默认为 0644 | ```
shell
/shell
cluster_config
/cluster_config
``` **其他** 其他的,如files节点基本类似fileSets。不常用的暂不介绍。 至此,即可按打包成功。下边给出具体示例。 ## 编译插件 maven-compiler-plugin 编译Java源码,一般只需设置编译的jdk版本 ```
org.apache.maven.plugins
maven-compiler-plugin
3.6.0
1.8
1.8
UTF-8
``` 或者在properties设置jdk版本 ```
UTF-8
1.8
1.8
``` ## tomcat 运行插件 tomcat7-maven-plugin 部署Java Web项目 ``` # 远程部署,还需要测试下
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
http://59.110.162.178:8080/manager/text
itnoteshare
itnoteshare
# 本地部署
org.apache.tomcat.maven
tomcat7-maven-plugin
8080
/gld
UTF-8
src/main/resources/context.xml
``` ## Maven SCM Plugin http://maven.apache.org/scm/maven-scm-plugin/index.html ## flatten-maven-plugin : 处理版本占位符 https://blog.csdn.net/sayyy/article/details/103994302 https://my.oschina.net/liyuj/blog/874929 ## Maven 配置 Jacoco 插件,查看代码覆盖率 https://blog.csdn.net/oschina_41790905/article/details/82627728 ## 测试插件 maven-surefire-plugin ``` # 测试测试用例 mvn test 或 mvn surefire:test # 打包过程中会自动进行测试用例测试 mvn package # 运行单元测试并生成报告 mvn test surefire-report:report # 关闭测试用例测试方法 命令加参数发 -Dmaven.test.skip=true # 或 插件添加配置
true
# 添加属性法
true
或
true
``` 更详细信息 https://www.cnblogs.com/qyf404/archive/2004/01/13/5013694.html ## spring-boot-starter-test ## spring-boot-maven-plugin ```
org.springframework.boot
spring-boot-maven-plugin
mvn package spring-boot:repackage # 涉及到的属性配置 properties中配置,一般不用配置,配置了可能会导致一些问题
eurekademo.EurekaApplication
# 插件里面的配置
${start-class}
``` 更详细介绍 https://www.cnblogs.com/jpfss/p/11098740.html ## 其他插件 maven scm 、checkstyle、maven-gpg-plugin、maven-javadoc-plugin、maven-source-plugin、maven-checkstyle-plugin、 flatten-maven-plugin、maven-surefire-plugin、maven-eclipse-plugin、jacoco-maven-plugin https://www.cnblogs.com/qyf404/archive/2004/01/13/5013694.html Asciidoctor Maven插件使用 https://segmentfault.com/a/1190000015497599
所有评论列表
点我发表评论