diff --git a/.DS_Store b/.DS_Store
index 32ee8755..a3f2d40c 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/.vscode/settings.json b/.vscode/settings.json
index c7e5d9b0..ceeb6b6f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -197,4 +197,5 @@
"Java源代码/Lesson05",
"Java源代码/Lesson06"
],
+ "java.configuration.updateBuildConfiguration": "disabled",
}
\ No newline at end of file
diff --git a/maven/maven教程/01 maven概述.md b/maven/01 maven概述.md
similarity index 61%
rename from maven/maven教程/01 maven概述.md
rename to maven/01 maven概述.md
index a87ce81c..9b7fd7c3 100644
--- a/maven/maven教程/01 maven概述.md
+++ b/maven/01 maven概述.md
@@ -1,4 +1,5 @@
## 1 概述
+> 参考文档 http://heavy_code_industry.gitee.io/code_heavy_industry/pro002-maven/chapter10/verse02.html
### 应用场景

@@ -10,7 +11,8 @@

-nexus私服,企业可以创建内部的公用仓库
+### nexus私服
+企业可以创建内部的公用仓库
* nexus是一个强大的maven仓库管理器,它极大的简化了本地内部仓库的维护和外部仓库的访问.
* nexus是一套开箱即用的系统不需要数据库,它使用文件系统加Lucene来组织数据
@@ -26,6 +28,10 @@ Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖

+* 项目对象模型POM:,xml文件,项目基本信息,描述项目构建过程,声明项目依赖。
+* 构件:任何一个依赖、插件或者项目构建输出,都可以称之为构件。
+* 插件Plugin:maven是依赖插件完成任务的,项目管理工具。
+* 仓库Repository:maven仓库能够帮我们管理构件
### 基本作用
@@ -34,7 +40,11 @@ Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖
1. 打java包或者war包
3. **统一开发结构**。提供标准的、统一的项目结构。
-## 1 maven相关概念
+### 基本原理
+
+
+
+## 2 maven相关概念
### POM项目对象模型
项目对象模型(Project Object Management,POM)是一种模型化思想。与DOM、BOM等文档对象模型、浏览器对象模型类似。POM将工程抽象为一个模型,用程序中的对象来描述这个模型,实现项目的管理。
@@ -139,9 +149,48 @@ mvn archetype:generate -DgroupId=com.demo -DartifactId=webproject -DarchetypeArt
1. 需要自己指定源代码、测试代码、源代码资源文件和测试资源文件。
2. 可以在idea中自动创建启动参数。edit configuration
3. 使用原型创建Maven模块。选择不同的Maven原型文件。
+4. 直接在web中添加tomcat插件,即可在本地展示网站。
+
+## maven简介
+
+> 纯java开源项目。**项目管理工具**,对java项目进行构建、依赖管理。也可以用于构建和管理其他项目(c#,Ruby,Scala)
+
+> 在上一次做handoop mapreduce的时候,发现了pom文件,然后配置了maven,作为maven工程打开过。但是具体的过程,为啥忘得一干二净,只记得自己曾经对maven的setting文件进行修改,那个时候应该还创建了本地库。但是完全记不清了。
+
+## 4 maven主要功能
+
+* 项目构建
+* 依赖管理
+* 项目管理
+ * 文档生成
+ * 报告
+ * SCMs
+ * 发布
+ * 分发
+ * 邮件列表
-### idea创建web项目
+### maven项目目录结构
+| 目录| 目的|
+|-|-|
+| ${basedir} |存放pom.xml和所有的子目录|
+| ${basedir}/src/main/java |项目的java源代码|
+| ${basedir}/src/main/resources |项目的资源,比如说property文件,springmvc.xml|
+| ${basedir}/src/test/java |项目的测试类,比如说Junit代码|
+| ${basedir}/src/test/resources |测试用的资源|
+| ${basedir}/src/main/webapp/WEB-INF |web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面|
+| ${basedir}/target |打包输出目录|
+| ${basedir}/target/classes |编译输出目录|
+| ${basedir}/target/test-classes |测试编译输出目录|
+| Test.java |Maven只会自动运行符合该命名规则的测试类|
+| ~/.m2/repository |Maven默认的本地仓库目录位置|
-1. 直接在web中添加tomcat插件,即可在本地展示网站。
+### maven项目的优势
+* 基于模型的构建 − Maven能够将任意数量的项目构建到预定义的输出类型中,如 JAR,WAR 或基于项目元数据的分发,而不需要在大多数情况下执行任何脚本。
+* 项目信息的一致性站点 − 使用与构建过程相同的元数据,Maven 能够生成一个网站或PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中。
+* 发布管理和发布单独的输出 − Maven 将不需要额外的配置,就可以与源代码管理系统(如 Subversion 或 Git)集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven 能够发布单独的输出,如 JAR,包含其他依赖和文档的归档,或者作为源代码发布。
+* 向后兼容性 − 您可以很轻松的从旧版本 Maven 的多个模块移植到 Maven 3 中。
+* 子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号
+* 并行构建 − 编译的速度能普遍提高20 - 50 %。
+* 更好的错误报告 − Maven 改进了错误报告,它为您提供了 Maven wiki 页面的链接,您可以点击链接查看错误的完整描述。
diff --git a/maven/2maven POM.md b/maven/02 mavenPOM.md
similarity index 82%
rename from maven/2maven POM.md
rename to maven/02 mavenPOM.md
index 51bf3455..95e4ab67 100644
--- a/maven/2maven POM.md
+++ b/maven/02 mavenPOM.md
@@ -1,19 +1,234 @@
## 1 简介
+### POM概念
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
pom.xml 项目模型对象文件。POM 中可以指定以下配置:
* 项目依赖
-* 插件
-* 执行目标
+* 插件:执行目标
* 项目构建 profile
* 项目版本
* 项目开发者列表
* 相关邮件列表信息
-## 2 POM 标签大全详解
+
+### pom工程之间的关系
+* 在dependency中的依赖关系。
+* 在parent中的继承关系
+* 在module中的聚合关系
+
+
+## 2 依赖关系dependency
+> 依赖的传递主要通过dependency标签实现的
+
+### scope依赖范围标签
+scope的取值用来定义依赖生效的空间(main目录、test目录)和时间(开发中、部署中)。
+
+标签位置 dependencies/dependency/scope
+标签取值 compile/test/provided/system/runtime/import
+
+* compile是最基本的标签,在所有的范围、所有的时间都能生效。
+* test标签,仅仅在test目录开发阶段生效的依赖,生效空间和时间范围最小。
+* prvoide标签,在开发阶段生效,在部署阶段不生效的依赖(因为部署环境提供了该依赖,不需要打包到jar或者war包中)
+* import maven也是单继承。通过import导入多个依赖。导入的依赖必须是POM工程,package中的打包方式是pom
+
+* system 强行将当前系统下的jar包作为依赖导入进来。使用系统根路径,可以是相对路径。
+
+* runtime编译时不需要,但是运行时需要的jar。实际运行时需要接口的实现类。JDBC接口标准提供了一系列借口,能够进行编译。但是运行时需要JDBC的具体实现。
+
+
+### optional可选依赖
+
+在开发阶段需要的类,但是在运行阶段可能不需要的类,就不需要再打包的时候导入到其中。
+
+
+
+
+### 依赖的传递性
+能够通过依赖传递,导入大量相关的间接依赖。而不需要手动导入所有的依赖。
+* A依赖B,B依赖C的时候,A不需要引入C即可使用C依赖。A会间接依赖C
+* compile范围的依赖能够传递,test和provide范围的依赖无法传递。
+
+
+### 依赖的排除
+
+阻断依赖的传递性。多个间接依赖可能不兼容,需要排除不兼容的间接依赖。
+
+
+
+标签位置 dependency/exclusions/exclusion
+
+```xml
+
+
+
+
+
+
+
+
```
+
+### 版本仲裁
+
+
+1. 最短路径优先
+2. 路径相同先声明者优先。
+
+## 3 继承关系parent
+> 依赖的继承主要是通过parent标签实现的。
+
+
+### 继承关系
+Maven工程之间,A工程继承B工程
+* B工程:父工程
+* A工程:子工程
+
+本质上是A工程的pom.xml中的配置继承了B工程中pom.xml的配置。
+
+继承,也就是父工程,主要管理依赖信息的版本
+
+### 继承的作用
+在付工程中统一管理项目中的依赖信息,管理以来信息的版本。
+
+
+背景
+* 一个大型的项目进行了模块拆分
+* 一个project下面创建了很多module
+* 每一个module都需要自己的依赖信息
+
+
+需求
+* 每一个module中各自维护各自的依赖信息很容易发生不一致的情况,不易统一管理
+* 使用框架内的的不同的jar包,应该是同一个版本,所以整个项目使用的框架版本需要统一
+* 使用框架时所需要的jar包组合,需要经过长期摸索和反复调试,最终确定一个可用的组合。
+
+通过在父工程中为整个项目维护依赖信息的组合,既保证了整个项目的使用规范、准确的jar包;又能讲以往的经验沉淀下来,节约时间和精力。
+
+### 继承的使用
+
+1. 创建父工程,修改工程的打包方式。只有打包方式为pom的maven工程能够管理其他的maven工程。**打包方式为pom**的maven工程总不写业务代码,是专门管理其他maven工程的工程。
+
+```xml
+com.ykl
+project-maven
+1.0.2
+pom
+```
+
+2. 创建模块工程。idea中的module。从聚合分解的角度分析就是聚合和模块两种工程。而不是父子工程。
+
+
+3. 模块间的依赖关系
+ 1. 在父工程中通过modules来引入子工程
+ 2. 在子工程中通过parent引入父工程
+
+
+
+```xml
+
+
+
+
+
+```
+4. 在付工程进行依赖信息的统一管理
+```xml
+
+
+
+
+
+
+```
+
+* 并不是在父工程管理了依赖,子工程具体使用哪个依赖,还要明确配置。仅仅是不需要配置版本号。
+
+* 对于已经在付工程进行管理的依赖,子工程引用时可以不写version
+ * 父子工程版本一致,可以省略了version标签
+ * 父子工程版本冲突,子工程的版本覆盖了父工程中的版本。
+
+### 继承中的属性
+
+创建自定以的属性标签,标签名也就是属性名,标签纸也就是属性值。
+
+引用方式 `$com.ykl.spring.version$`。通过属性名解析后才知道具体的版本号值。
+
+```xml
+
+ 4.1.0.RELEASE
+
+
+ ${com.ykl.spring.version}
+```
+### 实际意义
+
+
+
+* 梳理出一整套版本之间依赖的方案。与我们的火车头版本很想,会总结出一套可以相互兼容没有问题的中间件的合集。
+
+## 4 聚合关系modules
+
+### 聚合的含义
+
+通过moudules标签聚合子项目。好处
+1. 如果没有聚合标签,或者说聚合功能,则需要去每个模块下执行maven命令,并且按照依赖顺序从前到后执行。
+1. 如果有聚合标签,可以一键执行maven命令。mvn 会按照模块之间的依赖关系依次执行命令。
+2. 能够显示各个所有的模块。
+
+```xml
+
+ project04-maven-moduele
+ project05-maven-moduele
+ project06-maven-moduele
+
+```
+### 循环依赖
+
+* 防止循环依赖,会出现报错
+
+```xml
+the ... dependencies has cyclic dependency
+
+```
+## 5 POM的层次
+
+### 基本概念
+Maven不仅仅用来做依赖管理和项目构建。还用来做**项目管理**。
+
+POM有四个层次:超级POM、父POM、当前POM、生效POM
+
+
+### 超级pom
+
+默认继承了超级POM。超级POM
+
+* moduleversion版本信息
+* repository 仓库的地址
+* pluginrepostory 插件仓库的地址
+* builid 主要设置各个目录的位置。
+* 插件管理
+* profiles 配置文件
+
+
+### 父POM
+> 当前的POM的parent
+
+
+### 当前POM
+
+> 下层POM会继承上层POM。最近的有效配置是下层pom
+
+
+### 有效POM
+> 最终生效的POM文件,将所有的父POM叠加到一起
+
+```
+mvn help:effective-pom
+```
+## 6 POM 标签大全详解
+```xml
-
- com.xykj
- wallet-api
- 0.0.1-SNAPSHOT
- wallet-api
- 浔银电子钱包接口服务
-
-
- 1.8
- 1.18.12
- 2.1.2
- 2.9.2
- 1.0.0
- 0.9.1
- 1.2.68
- 5.3.5
-
-
-
-
-
-
- org.springframework.retry
- spring-retry
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-tomcat
-
-
-
-
- org.springframework.boot
- spring-boot-starter-undertow
-
-
- org.springframework.boot
- spring-boot-starter-aop
-
-
-
-
- org.projectlombok
- lombok
- ${lombok.version}
- provided
-
-
-
-
- cn.hutool
- hutool-all
- ${hutool.version}
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.junit.vintage
- junit-vintage-engine
-
-
-
-
-
-
- com.aliyun
- aliyun-java-sdk-core
- 4.5.1
-
-
-
- com.aliyun
- aliyun-java-sdk-dysmsapi
- 2.1.0
-
-
-
-
- com.alibaba
- fastjson
- ${fastjson.version}
-
-
-
- org.aspectj
- aspectjrt
- 1.9.5
-
-
-
- commons-codec
- commons-codec
- 1.13
-
-
- org.apache.commons
- commons-lang3
- 3.9
-
-
- commons-io
- commons-io
- 2.0.1
-
-
-
-
-
-
-
-
-
-
- com.zxw.zcloud
- db-spring-boot-starter
- ${zcloud.version}
-
-
-
- com.zxw.zcloud
- swagger-spring-boot-starter
- ${zcloud.version}
-
-
-
- com.zxw.zcloud
- cache-spring-boot-starter
- ${zcloud.version}
-
-
-
- com.zxw.zcloud
- license-boot-starter
- ${zcloud.version}
-
-
-
- io.jsonwebtoken
- jjwt
- ${jjwt.version}
-
-
-
-
- com.github.binarywang
- weixin-java-mp
- 3.8.0
-
-
- junit
- junit
-
-
- org.springframework.security
- spring-security-core
- 5.2.1.RELEASE
-
-
-
- io.swagger
- swagger-annotations
- 1.5.20
-
-
- org.xmlunit
- xmlunit-core
-
-
- org.mybatis
- mybatis
- 3.5.5
-
-
- org.redisson
- redisson
- 3.11.4
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- zclod
- zcloud nexus
- http://maven.zoujy.com/repository/zcloud_group/
-
- true
-
-
-
-
-
-
- public
- zcloud nexus
- http://maven.aliyun.com/nexus/content/groups/public/
-
-
- true
-
-
- false
-
-
-
-
-
-```
\ No newline at end of file
diff --git a/maven/03 maven与Idea.md b/maven/03 maven与Idea.md
new file mode 100644
index 00000000..0b79fd74
--- /dev/null
+++ b/maven/03 maven与Idea.md
@@ -0,0 +1,32 @@
+# Idea的使用
+
+## 1 创建工程
+
+1. 创建maven工程。可以选择archetype创建模板工程,也可以不选,创建标准工程。
+2. 配置项目。基本配置包括groupId、artifactId、version
+3. maven的配置。在setting/preference自定义maven的位置,加载maven的仓库位置,而不是使用Idea集成的maven。可以通过maven工具窗口。
+4. 创建Java模块工程。在父工程中自动添加modules和package
+
+
+## 2 侧边栏使用
+
+
+1. 扳手:配置maven
+2. 打开关闭目录
+3. M:表示执行maven命令
+
+
+## 3 工程导入
+
+### 导入整个工程
+IDEA直接打开目录就能识别。含有parent-pom的目录
+
+### 导入单个模块
+
+project-structures Import module导入基本组件。
+
+project-structures Import facets导入Web组件
+
+
+## 4 生命周期
+提高构件过程的自动化程度。
\ No newline at end of file
diff --git a/maven/4pom生命周期.md b/maven/04 maven生命周期.md
similarity index 67%
rename from maven/4pom生命周期.md
rename to maven/04 maven生命周期.md
index 5a0ea1a0..2df341e1 100644
--- a/maven/4pom生命周期.md
+++ b/maven/04 maven生命周期.md
@@ -1,26 +1,35 @@
-## 一个普通项目的生命周期
+## 1 命令构成
-
+> 生命周期、插件和目标
+### 基本命令
-| 阶段 |处理 |描述|
-|-|-|-|-|
-| 验证 validate |验证项目 |验证项目是否正确且所有必须信息是可用的|
-| 编译 compile |执行编译 |源代码编译在此阶段完成|
-| 测试 Test |测试 |使用适当的单元测试框架(例如JUnit)运行测试。|
-| 包装 package |打包 |创建JAR/WAR包如在 pom.xml 中定义提及的包|
-| 检查 verify |检查 |对集成测试的结果进行检查,以保证质量达标|
-| 安装 install |安装 |安装打包的项目到本地仓库,以供其他项目使用|
-| 部署 deploy |部署 |拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程|
+* 主命令
+* 插件
+* 子命令
-## maven项目的三个生命周期
+
-### clean生命周期:清理项目,包含三个phase。
+
+
+
+* 添加-Dmaven.test.skip=true表示跳过执行。
+
+
+
+## 2 maven项目的生命周期
+
+
+> maven项目开发主要包括以下三个生命周期
+### clean生命周期
+
+清理项目,包含三个phase。
1. pre-clean:执行清理前需要完成的工作
2. clean:清理上一次构建生成的文件
3. post-clean:执行清理后需要完成的工作
-### default生命周期:构建项目,重要的phase如下。
+### default生命周期
+构建项目,重要的phase如下。
1. validate:验证工程是否正确,所有需要的资源是否可用。
1. compile:编译项目的源代码。
@@ -31,9 +40,27 @@
1. install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
1. Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
-### site生命周期:建立和发布项目站点,phase如下
+### site生命周期
+建立和发布项目站点,phase如下
1. pre-site:生成项目站点之前需要完成的工作
2. site:生成项目站点文档
3. post-site:生成项目站点之后需要完成的工作
-4. site-deploy:将项目站点发布到服务器
\ No newline at end of file
+4. site-deploy:将项目站点发布到服务器
+
+
+## 3 maven命令
+
+三个生命周期是独立的。maven命令是按顺序依次执行的。每次执行都会将同一周期之前的命令执行一遍。
+
+
+
+| 阶段 |处理 |描述|
+|-|-|-|-|
+| 验证 validate |验证项目 |验证项目是否正确且所有必须信息是可用的|
+| 编译 compile |执行编译 |源代码编译在此阶段完成|
+| 测试 Test |测试 |使用适当的单元测试框架(例如JUnit)运行测试。|
+| 包装 package |打包 |创建JAR/WAR包如在 pom.xml 中定义提及的包|
+| 检查 verify |检查 |对集成测试的结果进行检查,以保证质量达标|
+| 安装 install |安装 |安装打包的项目到本地仓库,以供其他项目使用|
+| 部署 deploy |部署 |拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程|
\ No newline at end of file
diff --git a/maven/5maven仓库.md b/maven/05 maven仓库.md
similarity index 98%
rename from maven/5maven仓库.md
rename to maven/05 maven仓库.md
index 3dd5819e..f1523f3e 100644
--- a/maven/5maven仓库.md
+++ b/maven/05 maven仓库.md
@@ -3,7 +3,7 @@
## 1 仓库简介
仓库是项目中依赖的第三方库。任何一个依赖、插件或者项目构建输出,都可以称之为构件。maven仓库能够帮我们管理构件(比如jar程序)。maven仓库有3中类型,本地、中央、远程。
-
+
## 2 本地仓库
第一次运行maven仓库时,创建本地仓库。maven所需要的构建都是直接从本地仓库获取的。如果本地仓库没有,会首先尝试从远程仓库下载值本地仓库,然后使用本地仓库的构件。
diff --git a/maven/06 maven命令插件Plugins.md b/maven/06 maven命令插件Plugins.md
new file mode 100644
index 00000000..fcea3cdd
--- /dev/null
+++ b/maven/06 maven命令插件Plugins.md
@@ -0,0 +1,274 @@
+## 1 简介
+
+### 插件概念
+maven项目包含三个生命周期,每个生命周期包含多个节点。每个节点都是由maven插件实现。例如maven-clean-plugin
+
+maven实际上是一个依赖插件执行的框架。
+
+插件提供了一个目标的集合。使用以下语法执行
+```
+mvn [plugin-name]:[goal-name]
+mvn compiler:compile
+```
+
+### 插件与生命周期
+插件可以通过phase标签绑定到指定的生命周期环境。而在执行命令的时候,会执行该生命周期之前的所有生命周期关联的插件。
+
+
+### 配置额外的插件
+在项目的build标签中,添加plugins/plugin标签,然后进行配置。
+* plugin的坐标groupId/artifactId/version
+* execution 插件的id和绑定的生命周期phase。
+* execution 插件的名称和目标goal。
+```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
+
+
+
+
+
+
+
+
+```
+
+
+## 2 常用插件
+
+
+分为两类
+* Build plugins
+* Repoting plugins
+
+常用插件列表
+
+* clean 构建之后清理目标文件。删除目标目录。
+* compiler 编译 Java 源文件。
+* surefile 运行 JUnit 单元测试。创建测试报告。
+* jar 从当前工程中构建 JAR 文件。
+* war 从当前工程中构建 WAR 文件。
+* javadoc 为工程生成 Javadoc。
+* antrun 从构建过程的任意一个阶段中运行一个 ant 任务的集合。
+
+### help插件:分析依赖
+
+
+
+### archetype插件:创建工程
+
+```
+mvn archetype:generate -DgroupId=com.ykl -DartifactId=project04-maven-import -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot
+```
+
+
+
+### mvn差价dependcy:依赖管理和分析
+
+
+* 查看依赖列表
+
+```
+mvn dependcy:list
+mvn dependcy:tree
+```
+### spring-boot-maven-plugin
+
+spring-boot-maven-plugin是spring boot提供的maven打包插件。可打直接可运行的jar包或war包。
+
+```xml
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+```
+插件提供了6个maven goal
+
+* build-info:生成项目的构建信息文件 build-info.properties
+* help:用于展示spring-boot-maven-plugin的帮助信息。使用命令行mvn spring-boot:help -Ddetail=true -Dgoal=可展示goal的参数描述信息。
+* repackage:可生成可执行的jar包或war包。插件的核心goal。
+* run:运行 Spring Boot 应用
+* start:在集成测试阶段,控制生命周期
+* stop:在集成测试阶段,控制生命周期
+
+## 2 自定义插件
+
+### 创建工程
+```shell
+➜ maven源码 git:(master) ✗ mvn archetype:generate -DgroupId=com.ykl -DartifactId=project05-maven-plugin -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot
+```
+### 打包方式
+
+```
+maven-plugin
+```
+
+### maven依赖
+
+
+下面两种方式二选一:
+
+```xml
+#[1]将来在文档注释中使用注解
+
+ org.apache.maven
+ maven-plugin-api
+ 3.5.2
+
+#[2]将来直接使用注解
+
+ org.apache.maven.plugin-tools
+ maven-plugin-annotations
+ 3.5.2
+
+```
+### 创建Mojo类
+
+maven old java object maven的核心类。每一个 Mojo 都需要实现 org.apache.maven.plugin.Mojo 接口。
+
+
+
+
+
+```java
+public class MyHelloPlugin extends AbstractMojo {
+ @Override
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ getLog().info("---> This is my first maven plugin. <---");
+ }
+}
+```
+### 添加注解标识
+* 文档注释中用注解:对应的 pom.xml 中的依赖: maven-plugin-api
+
+
+
+* 直接在类上标记注解:对应 pom.xml 中的依赖:maven-plugin-annotations
+```
+// name 属性:指定目标名称
+@Mojo(name = "firstBlood")
+public class MyPluginOfFistBlood extends AbstractMojo {
+ @Override
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ getLog().info("---> first blood <---");
+ }
+}
+```
+
+### 安装插件
+要在后续使用插件,就必须至少将插件安装到本地仓库。
+
+```
+mvn clean install
+```
+
+### 注册插件。
+
+我们需要将插件坐标中的 groupId 部分注册到 settings.xml 中。再pluginGroups声明插件仓库。
+
+```xml
+
+
+ com.ykl
+
+```
+
+
+
+### 使用插件
+
+Maven 根据插件的 artifactId 来识别插件前缀。例如下面两种情况:
+```
+#[1]前置匹配
+匹配规则:${prefix}-maven-plugin
+artifactId:hello-maven-plugin
+前缀:hello
+#[2]中间匹配
+匹配规则:maven-${prefix}-plugin
+artifactId:maven-good-plugin
+前缀:good
+```
+
+**在命令行直接用**
+
+命令:
+```
+mvn hello:sayHello
+```
+效果:
+
+
+**配置到build标签里**
+这里找一个和插件无关的 Maven 工程配置才有说服力。
+```
+#[1]配置
+
+
+
+ com.atguigu.maven
+ hello-maven-plugin
+ 1.0-SNAPSHOT
+
+
+ hello
+
+ clean
+
+ sayHello
+
+
+
+ blood
+ validate
+
+ firstBlood
+
+
+
+
+
+
+```
+效果
+
+
+**图形化界面使用**
+
+
+
+**命令行使用**
+执行已和插件目标绑定的生命周期:
+
+
+
+
+
diff --git a/maven/7maven构建java项目.md b/maven/07 maven项目实战.md
similarity index 56%
rename from maven/7maven构建java项目.md
rename to maven/07 maven项目实战.md
index a79f06a9..3fb47a88 100644
--- a/maven/7maven构建java项目.md
+++ b/maven/07 maven项目实战.md
@@ -40,4 +40,24 @@ mvn clean package
运行文档生成
```
mvn site
-```
\ No newline at end of file
+```
+
+## 5 引入外部依赖到项目中
+在src下创建lib文件夹,用来防止第三方的jar文件。
+```
+
+
+
+ ldapjdk
+ ldapjdk
+ 1.0
+ system
+ ${basedir}\src\lib\ldapjdk.jar
+
+
+```
+
+### 引入外部依赖到本地中
+
+可以直接下载到当前的mvn本地仓库中。.m2/repository
+
diff --git a/maven/08 maven属性标签Properties.md b/maven/08 maven属性标签Properties.md
new file mode 100644
index 00000000..29cbaab5
--- /dev/null
+++ b/maven/08 maven属性标签Properties.md
@@ -0,0 +1,148 @@
+# 属性的生命与使用
+
+
+## 1 自定义maven属性值
+
+### 创建属性值
+```
+
+ temp
+ world
+
+```
+
+### 查看属性值
+```
+mvn help:evaluate
+```
+
+### 访问属性值
+
+```
+${a.b}
+```
+
+## 2 maven中的其他属性
+
+### maven访问的系统属性
+
+
+这里的系统属性指的是Java虚拟机中定义的变量。
+
+```java
+Properties properties = System.getProperties();
+
+Set