Maven核心
- 约定的目录结构
- POM
- 坐标
- 依赖
- 仓库
- 生命周期/ 插件/目标
- 继承
- 聚合
创建Maven工程
1. 创建约定的目录结构
[1]根目录 : 工程名
[2]src目录:源码
[3]pom.xml文件 :Maven工程核心配置文件
[4]main目录:存放主程序
[5]test目录:存放测试程序
[6]java目录:存放Java源文件
[7]resources目录:存放框架或其他工具配置文件
为什么要遵守约定目录结构?
- maven负责项目自动化构建,必须知道源文件在什么地方
- 如果自己定义的东西要让框架或工具知道
- 1.以配置方式告诉框架
- 2.遵守框架内部存在的约定
- 约定>配置>编码
常用maven命令
- 执行与构建过程相关的Maven命令必须进入pom.xml所在目录。
- 与构建过程相关:编译、测试、打包。。。
- mvn clean 清理
- mvn compile 编译
- mvn test-compile:编译测试程序
- mvn test:执行测试
- mvn package:打包
- mvn install:安装
POM
- 含义:Project Object Model 项目对象模型
- pom.xml 对于Maven项目是最核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置
坐标
- Maven的坐标
- groupid : 公司或组织域名倒序+项目名
<groupid>com.wzy.maven</groupid>
- artifactid: 模块名
<artifactid>hello</artifactid>
- version: 版本
<version>1.0.0</version>
仓库
- 本地仓库 :为当前本机电脑上所有Maven工程服务
- 远程仓库
- 私服:架设在当前局域网环境下,为当前局域网范围内所有Maven工程服务
- 中央仓库:假设在Interent上,为全世界所有Maven工程服务
- 中央仓库镜像:架设在各个大洲,为中央仓库分担流量。诚轻中央仓库的压力,同时更快的访问
- 仓库中保存的内容
- Maven自身需要的插件
- 第三方工具或工程的jar包
- 自己开发的maven工程
依赖
① Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。对于我们自己开发的 Maven工程,使用 myn installa命令安装后就可以进入仓库
②依赖的范围
1.compile:
- 对主程序是否有效:有效
- 对测试程序是否有效: 有效
- 是否参与打包:不参与
2.test:
- 对主程序是否有效:无效
- 对测试程序是否有效: 有效
- 是否参与打包:不参与
3.provided:
- 对主程序是否有效:有效
- 对测试程序是否有效: 有效
- 是否参与打包:不参与
生命周期
- 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
插件
在 Eclipse中使用 Maven
① Maven插件: Eclipse内置
② Maven插件的设置
installations:指定 Maven核心程序的位置。不建议使用插件自带的 Maven程序,而应该使用我们自己解压的那个user settings:指定 conf/settings。 xm的位置,进而获取本地仓库的位置
依赖
例:
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>per.wzy.maven</groupId> <artifactId>javaProject01</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> |
- 依赖的传递性
- 好处:可以传递的依赖不必在每个模块工程中都重复声明,在“最下面"的工程中依赖一次即可
- 注意:非 compile范围的依赖不能传递。所以在各个工程模块中,如果有需要就得重复声眀依赖
2.排除传递依赖
- 需要设置依赖排成的场合
- 依赖排除方式
<exclusions>
<exclusion>
<groupId>org.jfree</groupId>
<artifactId>jcommon</artifactId>
</exclusion>
</exclusions>
6
1
<exclusions>
2
<exclusion>
3
<groupId>org.jfree</groupId>
4
<artifactId>jcommon</artifactId>
5
</exclusion>
6
</exclusions>
4.统一管理依赖的版本号
建议配置方式
i使用 properties标签内使用自定义标签统一声明版本号
ii在需要统一版本的位置,使用${自定义标签名}引用
${atguigu.spring.version} //依赖version中
1
1
${atguigu.spring.version} //依赖version中
继承
①现状
Hello依赖的unt:4.0Hello Friend依赖的 Junit:4.0MakeFriends依赖的 Junit:4.9由于test范围的依赖不能传递,所以必然会分散在各个横块工程中,很容易造成版本不一致
②需求∶统一管理个模块工程中对jun依赖的版本
解决思路:将junit依赖统一提取到“父”工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准。同时也便于修改
④操作步骤
[1]仓库建一个 Maven工程作为父工程。注意:打包的方式pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>per.wzy.maven</groupId>
<artifactId>ParentPom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.13</version>
</dependency>
</dependencies>
</project>
14
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
<modelVersion>4.0.0</modelVersion>
3
<groupId>per.wzy.maven</groupId>
4
<artifactId>ParentPom</artifactId>
5
<version>0.0.1-SNAPSHOT</version>
6
<packaging>pom</packaging>
7
<dependencies>
8
<dependency>
9
<groupId>jfree</groupId>
10
<artifactId>jfreechart</artifactId>
11
<version>1.0.13</version>
12
</dependency>
13
</dependencies>
14
</project>
[2]在子工程中声明对父工程的引用
<parent>
<groupId>per.wzy.maven</groupId>
<artifactId>ParentPom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前文件为基准的父工程中的pom.xml -->
<relativePath>../ParentPom/pom.xml</relativePath>
</parent>
7
1
<parent>
2
<groupId>per.wzy.maven</groupId>
3
<artifactId>ParentPom</artifactId>
4
<version>0.0.1-SNAPSHOT</version>
5
<!-- 以当前文件为基准的父工程中的pom.xml -->
6
<relativePath>../ParentPom/pom.xml</relativePath>
7
</parent>
[3]将子工程的坐标中与父工程坐标中重复的内容删除
[4]在父工程中统一junit的依赖
[5]在子工程中除junit依赖的版本号部分
聚合
作用:一键安装各个模块工程
配置方式:在一个总的聚合工程中,配置各个参与聚合的模块
<modules>
<module>../javaProject01</module>
<module>../Webproject</module>
</modules>
4
1
<modules>
2
<module>../javaProject01</module>
3
<module>../Webproject</module>
4
</modules>
使用方式:在聚合工程的pom.xml上运行 maven instal
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">