pom文件构成(主要)
根元素和必要配置父项目和parent元素项目依赖相关信息项目构建需要的信息
路径管理资源管理插件管理lifeCycle生命周期和插件的关系?
**1. maven项目生命周期和阶段****2. 阶段被绑定了默认的执行插件及目标**3. 修改构建阶段默认执行的插件及目标 总结 Assembly.xml maven 定制化打包
plugin 标签的配置项Assemly.xml文件的内容
pom文件定义了一个maven项目的maven配置,一般pom文件的放在项目或者模块的根目录下。
父项目和parent元素工程师 4.0.0 com.companyname.project-group project1.0 jar
com.companyname.project-group
base-project
1.0.1-RELEASE
../pom.xml
项目依赖相关信息
dependencyManagement来声明依赖,通过dependencies元素来管理依赖。
1、依赖坐标 2、依赖类型 3、依赖传递 4、依赖范围
项目构建需要的信息build标签定义了构建项目需要的信息
路径管理sourceDirectory:项目源码目录,构建系统会编译目录里的源码, 定义的是相对于pom文件的相对路径; testSourceDirectory:项目单元测试源码目录,定义的也是是相对于pom文件的相对路径; outputDirectory:被编译过的应用程序class文件存放的目录,也是是相对于pom文件的相对路径; testOutoutDIrectory:被编译过的测试class文件存放的目录,也是是相对于pom文件的相对路径; scriptSourceDirectory:项目脚本源码目录,也是是相对于pom文件的相对路径。由于脚本是解释性的语言,所以该目录下的内容,会直接被拷贝到输出目录,而不需要编译。
maven 特点1: (在遵循约定大于配置原则下,不需要配置)
资源管理插件管理描述了项目相关 测试相关的所有资源路径,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。 targetPath:描述了资源的目标输出路径,该路径是相对于target/classes的路径; 如果是想要把资源直接放在target/classes下,不需要配置该元素 directory:描述打包前的资源的存放路径,这个路径是相对于pom文件所在目录的相对路径; includes:包含的模式列表,例如***.xml,符合的资源文件不会在打包的时候会被过滤掉。
作用: 编译代码,创建jar文件,创建war文件,创建项目文档等。
1. 插件管理相关的元素有两个,包括pluginManagement和plugins。
怎么理解插件
maven 特点2 :Maven本质上是一个空空的插件框架,不具备执行具体任务的能力,所有这些任务都交给插件来完成。 进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标。
像编译是通过maven-compile-plugin实现的、测试是通过maven-surefire-plugin实现的,maven也内置了很多插件,所以我们在项目进行编译、测试、打包的过程是没有感觉到。
一个插件通常提供了一组目标,可使用以下语法来执行:
mvn [plugin-name]:[goal-name] 该命令的意思是:执行“plugin-name”插件的“goal-name”目标(或者称为动作)
例如:一个 Java 项目可以使用 Maven 编译器插件来编译目标,通过运行以下命令编译
`mvn compiler:compile' 编译位于src/main/java/目录下的主源码 `mvn compiler:testCompile' 编译位于src/test/java/目录下的测试源码
- maven 插件列表
https://maven.apache.org/plugins/index.html 最成熟的插件http://mojo.codehaus.org/plugins.html。
http://maven.apache.org/ref/3.5.0/maven-core/lifecycles.html
Maven 把构建项目的过程,总体分为三个生命周期(lifecycle):
1、默认构建:default
2、项目清理:clean
3、项目建站:site每个生命周期又由许多阶段(phase)组成。 **每个阶段,都可以指定默认执行的目标(goal),去具体执行某项工作。**
举例说明:
1、默认构建:default,分为以下阶段:
1)validate
2)compile
3)test
4)package
5)verify
6)install
7)deploy
这些阶段是有顺序的,构建时按序逐一执行。
在命令行中 使用阶段 来执行构建。只需输入阶段名称即可。
Maven会按顺序执行该阶段之前的所有阶段。
例如:
mvn install
mvn clean package
问题: 前面说maven本身是不执行任何具体任务的,都是通过插件执行, 通过 阶段 构建时,是怎么指定 调用那个插件的呢?
2. 阶段被绑定了默认的执行插件及目标https://maven.apache.org/ref/3.5.0/maven-core/default-bindings.html
构建阶段的默认执行插件及目标是通过 packaging 的类型指定的。
package 类型 jar war pom 等 . packaging 的类型中定义了一系列的阶段,及每个阶段要执行哪个插件的哪个目标。
拿 jar 举例(jar 是 maven 默认的 packaging 类型,packaging 未指定时就是 jar 类型),
如果 packaging 类型是 jar,则其相应的 maven 各个阶段所对应的插件的默认执行的目标如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jFjSnKGa-1643511228386)(D:Typora笔记2分享3_补充maven.assetsimage-20220126163541139.png)]
所以当指定了 packaging 的类型时,可以直接调用阶段的名称来执行 Maven 构建。
3. 修改构建阶段默认执行的插件及目标拿 compiler 核心插件举例。该插件有两个目标:compile,testCompile
前者编译 main 目录下的源码
后者编译 test 目录下的源码
packaging 为 jar 时,它在 compile 阶段只绑定了 compiler 插件的 compile 目标。
即:compile 阶段不执行 testCompile 目标。
我们可以在 compile 阶段,把 testCompile 目标也添加进来:
总结test org.apache.maven.plugins maven-compiler-plugin3.6.1 1.7 1.7 compile testCompile
maven特点 3:
Maven 是基于插件的项目 maven构建过程是基于阶段的构建的
构建阶段和插件是相互独立的构建阶段的默认执行插件及目标是通过 packaging 的类型指定的。
Assembly.xml maven 定制化打包 plugin 标签的配置项
......
Assemly.xml文件的内容
format:指定打包类型; includebaseDirectory:指定是否包含打包层目录(比如finalName是output,当值为true,所有文件被放在output目录下,否则直接放在包的根目录下); fileSets:指定要包含的文件集,可以定义多个fileSet; directory:指定要包含的目录; outputDirectory:指定当前要包含的目录的目的地。



