Maven个人总结 以及一些相关的配置文件
1. 核心概念 pom 约定的项目结构 插件和目标
生命周期 仓库 坐标 依赖 继承 聚合
2. pom模型版本 modelVesion
项目坐标:groupId artifactId version packing
父模块和子模块:parent and modules
项目依赖:denpendencies
项目构建:build
属性和属性文件:properties profiles
3.maven的生命周期
clean Lifecycle 在进行真正的构建前进行的一些清理工作
Default Lifecycle 构建核心部分 编译 测试 打包 安装 部署等
Site LifeCycle 生成项目报告 站点 发布地点等
Default 生命周期:
compile 编译项目的源代码
test-compile 编译测试源代码
test 使用适合的单元测试框架运行测试 这些测试代码不会被打包或部署
package 接受编译好的代码 打包完成可发布的格式 如JAR
install 将包安装至本地仓库 以便让其他项目依赖
在运行任何一个阶段的时候 它前面的所有阶段都会运行
4. Maven插件和目标
编译 测试 打包 部署
maven生命周期的每一个阶段的具体实现都是由maven插件实现的
5. maven坐标
groupId 定位到公司开发的项目 域名倒叙.项目名
artifactId 定位到项目中的模块 模块名
version 指定的模块版本 无
6.Maven的依赖管理
compile:main 可以 log4j
test 可以
lib 无
test :main 不可以 junit
test 可以
lib 不可以
provided :main 可以 servlet-api lombok
test 可以
lib 不可以
runtime :main 不能 JDBC驱动类
test 可以
lib 可以
system :可以
可以
不可以
import 都不行
7. 依赖的传递
项目项目B 依赖项目C
<dependencies>
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>pro04_maven_moduleC</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
依赖的冲突:
最短路径优先
路径相同的先声明优先
依赖的排除:
<exclusions>
<exclusion>
<gropuId>
<artifactId>
<exclusion>
<exclusions>
依赖的统一管理:
<properties>
<version>****</version>
<properties>
<dependencies>
<denpendency>
<groupId>*****
<artifactId>****
<version>${****}
<denpendency>
<denpendencies>
8. maven 继承
父项目
<packing>pom</packing>
子项目
<parent>
<groupId>
<artifactId>
<version>
</parent>
+ 问题:子项目不认父项目
方法1: 将父项目打包上传到本地库
方法2:如果父项目没有打包上传到本地库,需要通过relativePath指定父项目的pom.xml文件的位置
<parent>
<groupId>com.atguigu.maven</groupId>
<artifactId>pro05_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pro05_parent/pom.xml</relativePath>
</parent>
依赖管理:
父项目:在父项目中通过dependencyManagement指定的依赖,只是声明,父项目中本身也不具有。子项目自然也无法继承
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
子项目:在子项目中重新指定需要的依赖,删除范围和版本号;如果需要不同的版本,就需要指定版本。
9. 聚合
父项目
<packaging>pom</packaging>
<modules>
<module>product</module>
<module>payment</module>
<module>order</module>
</modules>
子项目
<parent>
<artifactId>myshopping</artifactId>
<groupId>com.atguigu.maven</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>order</artifactId>
测试聚合
聚合关系其实是一个大项目包含多个子项目,
对父项目进行clear、compile、install等命令,
是对所有子项目进行clear、compile、install命令。
但是如果对一个子项目进行maven操作,不影响其他子项目。
和继承一样,可以在父项目中通过dependencyManagement来管理依赖