Maven

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 启动服务后可以访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值