1 Maven概述
1.1 为什么使用Maven
- 添加第三方jar包。通过坐标引用jar包。
- jar包间的依赖关系。通过Maven管理包之间的依赖。
- 管理jar包之间的冲突。自动处理jar包间的冲突。
- 获取第三方jar包。从中央仓库获取规范的jar包。
- 将项目拆分成多个工程模块。多个module间使用Maven进行管理,多个package(MVC分层等)。
- 实现项目分布式部署。不同的module在不同的服务器上运行。
2 Maven是什么
2.1 自动化构建工具
2.2 什么是构建
2.3 构建的重要环节
2.4 自动化构建
- 将以上重要环节自动化
2.5 Maven的核心概念
- POM
- 约定的目录结构
- 坐标
- 依赖管理
- 生命周期
- 插件和目标
- 继承
- 聚合
3 如何使用Maven
3.1安装Maven核心程序
- JAVA_HOME环境变量配置
- 将apache-maven-3.5.4-bin.zip解压到非中文无空格目录
- 配置M2_HOME环境变量目录\apache-maven-3.5.4
- 配置Path:%M2_HOME%\bin
- dos中输入mvn -v查看是否安装成功
3.2 第一个Maven工程(Hello)
1 约定的目录结构
Hello
src
main
resources
tset
main
resources
pom.xml
2 创建Maven的核心配置文件pom.xml
<?xml version="1.0" ?>
<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>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hello</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3 编写主代码
package com.atguigu.maven;
public class Hello {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
4 编写测试程序代码
package com.atguigu.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {
@Test
public void testHello(){
Hello hello = new Hello();
String results = hello.sayHello("atguigu");
assertEquals("Hello atguigu!",results);
}
}
5 运行基本的Maven命令(dos窗口)
// 运行前需要进入到pom.xml目录下
mvn compile //编译
mvn clean // 清理
mvn test-compile // 编译测试程序
mvn test // 测试程序
mvn package // 打包
mvn install // 程序jar包放到本地仓库
3.3 Maven联网问题
1 配置本地仓库
<localRepository>本地仓库路径</localRepository>
2 配置阿里云镜像,不使用中央仓库
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
3.4 IDEA中配置Maven
1 设置安装目录和本地仓库
2 配置Maven自动导入jar包
3 在File - Other Settings - Settings for New Projects设置以上操作
3.5 创建Maven Module
3.6 Maven打包插件
- 和依赖
并列
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- 指定主类 -->
<mainClass>xxx.xxx.XXX</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
4 Maven的核心概念
4.1 POM
- Project Object Module项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型
- pom.xml的大致结构
<project...> // 1 工程
<modelVersion>...</modelVersion>// 1.1 版本
<groupId>...</groupId>// 1.2 工程坐标
<artifactId>...</artifactId>
<version>...</version>
<properties>// 1.3 自定义依赖版本
<xxx.version>...</xxx.version>
</properties>
<dependencies>// 1.2 依赖
<dependency>//1.2.1 依赖1
<groupId>...</groupId>// 1.2.1.1 依赖坐标
<artifactId>...</artifactId>
<version>...</version>
<scope>...</scope> //1.2.1.2 依赖范围
</dependency>
<exclusions>// 1.2.2 排除
<exclusion>// 1.2.2.1 排除1
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>
</dependencies>
<build>//1.3构建部分
<plugins>//1.3.1插件部分
<plugin>...<plugin>// 1.3.1.1插件1
</plugins>
</build>
<reporting>// 1.4报表部分
</reporting>
</project>
4.2 约定的目录结构
- 约定 > 配置 > 编码。有了约定,就可以不进行配置,是自动化构建的前提
4.3 坐标
1 module的坐标
- 写在
标签下的坐标
<project...>
...
<groupId>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
...
</project>
2 依赖的坐标
<project...>
...
<dependencies>
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
...
</project>
4.4 依赖管理
1 依赖的范围
2 依赖的传递性
直接依赖和间接依赖
好处
注意
3 依赖的原则
- 路径段优先
- 配置文件中
声明顺序优先 - 同时需要考虑依赖的范围
4 依赖的排除
5 统一管理目标jar包版本
<project>
<properties>
<spring.version>4.0.0.RELEASE</spring.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</project>
4.5 仓库
1 本地仓库
@H_922_404@2 远程仓库3 仓库的内容
4.6 生命周期
- Clean LifeCycle:构建前的清理工作
- 三个阶段:pre-clean、clean、post-clean
- Default LifeCycle:构建的核心工作:编译、测试、打包、安装、部署等
- compile编译主程序
- test-comply编译测试程序
- test进行测试
- package打包
- install安装到本地仓库
- Site LifeCycle:生成项目报告,站点,发布站点
- pre-site、site、post-site、site-depoly
- pre-site、site、post-site、site-depoly
4.7 插件和目标(plugin and target)
- Maven的核心,每个生命周期的每个步骤都是由插件完成的
- 每个插件有多个功能,每个功能完成一个步骤
- compile是maven-compiler-plugin的一个功能,pre-clean是maven-clean-plugin的一个目标
5 继承
- 说明:
- test范围依赖(例如junit)不能传递,各个工程都有一样的该依赖,容易造成版本不一致。
- 例如:Hello(junit 4.0) <--- HelloFriend(junit 4.0) <--- MakeFriends(junit 4.9)
- 解决方案:
- 操作步骤:
- 配置继承后,执行安装命令前要先安装父工程。
//父
<project>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<g, a, v />// 指明junit的版本
<scope>4.9</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
//子
<project>
<parent>
<relativePath>../Parent/pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<g, a, v />
//删除scope标签
</dependency>
</dependencies>
</project>
6 聚合
<project>
<modules>
<module></module>// 模块1
<module></module>// 模块2
<module></module>// 模块3
</modules>
</project>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。