1. Maven介绍
1.1 为什么要用Maven
1)项目管理
项目庞大时,借助Maven将一个项目拆分成多个工程,例如每个模块对应一个工程,利于分工协作;
2)jar包管理
传统项目需要手动添加到WEB-INF/lib 目录下,同样jar包出现在不同项目工程中,Maven可以将jar包保存到“仓库”中,工程中进行引用即可;
3)jar包下载
不同技术的jar包下载形式五花八门,Maven已将各种jar包统一存放在Maven的中央仓库中,从而可以以一种规范的方式下载jar包;
4)jar包间依赖关系
jar包之间依赖关系较为复杂,Maven会自动导入被依赖的jar包。
参考:
项目构建过程:
①清理
删除旧的class 字节码文件,为下一次编译做准备
②编译
将java 源程序编译成class 字节码文件
③测试
准备好Junit测试程序,由Maven自动调用并测试
④报告
测试程序执行的结果
⑤打包
动态Web工程打war 包,Java工程打jar 包
⑥安装
将打包得到的文件复制到“仓库”中的指定位置
⑦部署
将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
1.2 Maven是什么
是一款服务于java平台的自动化构建工具
Make ⇒ Ant ⇒ Maven ⇒ Gradle
2. Maven的核心概念
2.1 约定的目录结构
Hello '工程名
|---src '源码
|---|---main '主程序
|---|---|---java 'java源文件
|---|---|---resources '资源文件
|---|---test '测试程序
|---|---|---java '
|---|---|---resources '
|---pom.xml 'Maven核心配置文件
约定(架构) > 配置(框架)> 编码(基本语法)
2.2 POM
Project Object Model:项目对象模型
Maven核心配置文件:pom.xml
2.3 坐标(gav)
使用三个向量在仓库中唯一定位一个Maven工程
1)groupid:公司或组织域名倒叙+项目名
2)artifactid:模块名称
3)version:版本
Maven工程的坐标与仓库中路径的对应关系:
根据坐标找仓库中路径
jar包中的pom文件中的坐标
<groupId>org.springframwork</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
仓库中路径:
org/springframwork/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar
2.4 依赖
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<scope>compile</scope>
</dependency>
</dependencies>
Maven解析依赖信息时,会到本地仓库中查找依赖jar包
对于自己开发的Maven工程,使用install命令安装后,就可以进入仓库
2.4.1 依赖范围
1)compile:
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与
2)test:
对主程序是否有效:无效
对测试程序是否有效:有效
是否参与打包:不参与
典型例子:junit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
3)provided:
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:不参与
典型例子:servle-api.jar,开发用,发布时由于服务端自带,所以不参与打包
servlet依赖:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
依赖具有传递性,非compile范围的依赖不能传递
2.4.2 依赖的排除
<dependency>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>1.1.1</version>
<scope>compile</scope>
<exclusion>
<exclusion>
<groupId>test-01</groupId>
<artifactId>test-01</artifactId>
</exclusion>
</exclusion>
</dependency>
2.4.3 依赖的原则
就近原则,相同依赖,版本不同时,就近依赖
路径相同时,依赖先声明者优先原则
2.4.5 依赖应用
统一版本升级:
使用properties标签内使用自定义标签统一声明版本号
在需要统一版本号的位置,使用${自定义标签名}引用声明的版本号
如,对Spring所有jar包进行升级
<properties>
<chengyu.spring.version>4.0.0.RELEASE</chengyu.spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${chengyu.spring.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
2.5 仓库
本地仓库:当前电脑的仓库目录
远程仓库:私服(局域网)、中央仓库(面向全世界)、中央仓库镜像(分担中央仓库压力)
默认本地仓库:[当前用户目录.m2\repository]
修改默认本地仓库:
找到Maven解压目录\conf\settings.xml
标签localRepository可以更改本地仓库路径
2.6 生命周期/插件/目标
2.7 继承
test范围的依赖,不能传递,所以会分散在各个模块中的版本会不一致,将junit依赖的版本统一提取到父工程中,在子工程中声明依赖时不指定版本
注意:配置继承后,执行安装命令时,要先安装父工程
步骤:
1)创建一个Maven工程为父工程。注意:打包的方式为pom
<modelVersion>4.0.0</modelVersion>
<groupId>com.chengyu.parent</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
2)在子工程中声明对父工程的引用
<!-- 子工程中声明父工程 -->
<parent>
<groupId>com.chengyu.parent</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前文件的pom.xml文件为基准的父工程pom.xml文件的相对路径 -->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
3)将子工程坐标中与父工程坐标中重复的内容删除
4)在父工程中统一管理junit的依赖
<!-- 统一配置依赖管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>juint</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
5)删除子工程中junit版本号部分
2.8 聚合(一键安装)
配置方式:
在一个总的聚合工程中,配置各个参与聚合的模块
<!-- 配置聚合 -->
<modules>
<!-- 指定各个子工程的相对路径 -->
<module>../Hello</module>
<module>../HelloFriend</module>
</modules>
调用方式:
在聚合工程的pom.xml上右键 ⇒ run as ⇒ maven install
3. 常用Maven命令
进入pom.xml 目录
mvn clean:清理
mvn compile:编译主程序
mvn test-compile:编译测试程序
mvn test:执行测试
mvn package:打包
mvn install:将包安装到本地仓库,让其他项目依赖
mvn deplay:将最终的包复制到远程仓库,以让其他开发人员与项目共享或部署到服务器上运行
mvn site:生成站点
4. Eclipse中设置Maven
Window => 设定 => Maven
1)installations:指定Maven核心程序的位置;(自带不稳定)
2)user settings:指定conf/Setting.xml的位置,进而获取本地仓库的位置
5. Eclipse中创建Maven项目
5.1 创建MavenJava项目
注意:
工作空间发生变化后,上面的修改方式仍需重新设定
设置Maven工程的JDK版本(一劳永逸)
打开Maven核心程序的settings.xml文件,修改profiles标签
<profile>
<id>jdk-1.8<id/>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compoiler.source>1.8</maven.compoiler.source>
<maven.compoiler.target>1.8</maven.compoiler.target>
<maven.compoiler.compoilerVersion>1.8</maven.compoilerVersion.target>
</properties>
</profile>
5.2 创建MavenWeb项目
动态Web选项,取消后再选中
点击页面下方连接
6. Eclipse中执行Maven命令
6.1 自带命令
pom.xml文件右键
6.2 手动添加命令
点击[Maven build…] 添加【compile】、【package】…
手动部署Web项目:
手动build(package) 生成war包,复制到tomcat的webapps目录下,CMD中catalina run 启动服务后可以访问