九个核心概念
1. POM(Project Object Model)
项目对象模型,将Java 工程的相关信息封装为对象作为便于操作和管理的模型。 学习Pom.xml 文件中的配置
2. 约定的目录结构
-
main 目录用于存放主程序
-
test 目录用于存放测试程序
-
java 目录用于存放源代码
-
resources 目录用于存放配置文件和资源文件
约定>配置>编码
3. 坐标
-
pom.xml 文件中 gav
<groupId></gropId> #内容一般由公司或者组织的域名倒叙+当前项目名称 <artifactld></artifactid> #当前项目的模块名称 <version></version> #当前模块的版本 <dependencies></dependencies>
-
maven 的中央资源库:
https://mvnrepository.com/
4.依赖管理
-
直接依赖与间接依赖
-
依赖的范围
<!--依赖范围 compile :编译范围 默认值 这个范围的包,可以个main 和test 下面的类使用;参与部署 test: 测试范围 这个范围的包,只给test下面的类使用,不能给main不能用 不参与部署 provided : 提供范围 这个范围的包,可以给main和test下面类使用;不参与部署 runtime: 测试时 classpath 运行时:classpath -->
-
依赖的传递性
maven maven maven 依赖范围 对A的可见性 A B C compile Yes A B D test No A B E provided No -
依赖的原则性
- 路径最短优选
- 声明优先
-
依赖的排除
<!-- 依赖的移除 --> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <!-- <version>3.1.0</version>--> </exclusion> </exclusions> </dependency>
-
统一管理目标jar包的版本
<!-- maven 项目类型: jar 表示java 项目默认值 war 表示web项目 pom 表示父工程 --> <packaging>jar</packaging> <!--全局变量声明,可以声明版本号--> <properties> <mybatis.version>3.4.6</mybatis.version> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> <!--依赖范围 compile :编译范围 默认值 这个范围的包,可以个main 和test 下面的类使用;参与部署 test: 测试范围 这个范围的包,只给test下面的类使用,不能给main不能用 不参与部署 provided : 提供范围 这个范围的包,可以给main和test下面类使用;不参与部署 --> <!-- 依赖的移除 --> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <!-- <version>3.1.0</version>--> </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
5.仓库管理
仓库中的文件
-
Maven的插件
-
我们自己开发的项目模块
-
第三方框架和工具的Jar包
按照坐标生成目录结构,可以通过统一的方式查询或依赖
6. 生命周期
Maven 三套相互独立的生命周期 分别是:
- Clean Lifecycle 进行真正的构建之前进行一些清理工作。
- 三个阶段
-
- pre-clean 执行一些需要在clean 之前完成的工作
- clean 移除所有上一次构建生成的文件
- post-clean 执行一些需要在clean 之后立即完成的工作
- Default Lifrcycle 构建的核心部分,编译,测试,打包,安装,部署等。
- compile 编译项目源码
- test-Compile 编译测试源代码
- test 使用合适的单元测试框架运行测试,这些测试代码不会打包或者部署
- package 接受编译好的代码,打包成可发布的格式,如 JAR
- install 将包安装至本地仓库,以让其他项目依赖
- deploy 将最终的包复制到远程仓库,以让其他开发人员项目共享或部署到服务器上运行。
- Site Lifecycle 生成项目报告,站点 ,发布站点
- pre-site 执行一些需要在生成站点文档之前完成的工作
- site 生成项目的站点文档
- site-deploy 将生成的站点文档部署到特定的服务器上
**运行任何一个阶段的时候,它前面的所有阶段都会被运行 **
7. 插件和目标
8. 继承
在父工程
<-- 依赖管理配置声明:声明配置,当前项目并不会直接引入jar包。
子项目继承父项目,子项目不能直接使用jar包。子项目想用,必须得声明才能使用。
好处:由父工程管理使用,子工程不需要管理版本
-->
<dependencyManagement>
<dependencies>
<dependency>
项目依赖
</dependency>
</dependencies>
</dependencyManagement>
<!-- 依赖管理:jar会被当前项目引入。子项目可以继承当前项目 并且可以直接使用-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
**子工程 **
子工程继承父工程后,g和v 可以省略。子工程与父工程的g和v就保持一致 *** 子工程依赖只需g和v ***
<!--子工程继承父工程-->
<parent>
<groupId></gropId> #内容一般由公司或者组织的域名倒叙+当前项目名称
<artifactld></artifactid> #当前项目的模块名称
<version></version> #当前模块的版本
<relativePath>../pom.xm</relativePath>
</parent>
9.聚合
在父工程pom.xml文件中 project 标签内加入
好处:对当前项目进行任何的操作,被聚合的项目都跟着做相同的操作
<modules>
<module>项目名</module>
<module></module>
<module></module>
</modules>
Maven 常用命令
- mvn compile 执行编译
- mvn clean 清理 mvn clean compile
- mvn test-compile 对测试代码进行编译
- mvn clean test 先删除 后单元测试
- mvn clean package 打包
- mvn source:jar 生成源码包