基本概念
maven是一款服务于Java平台的自动化构建工具。
对应目录结构
构建过程
构建过程中的各个环节
1、清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备。
2、编译:将Java源程序编程成class字节码文件。
3、测试:自动测试,自动调用Junit程序。
4、报告:测试程序执行的结果。
5、打包:动态Web工程打war包,Java工程打jar包。
6、安装:maven特定的概念,将打包得到的文件复制到“仓库”中的指定位置。
7、部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行。
安装
安装maven核心程序
1、检查JAVA_HOME环境变量
dos命令:echo %JAVA_HOME%
2、配置环境变量
变量名:MAVEN_HOME或者M2_HOME
变量值为maven的目录
添加至path环境变量中
3、查看验证maven版本
dos命令:mvn -v
目录结构
为什么要遵守约定的目录结构
maven要负责项目的自动化构建,以编译为例,maven要想自动进行编译,那么它必须知道Java源文件保存在哪里。
如果我们自己定义的东西想要让框架或工具知道,有两种办法
1、以配置的方式明确告诉框架
例如:
<param-value>classpath:spring-context.xml</param-value>
2、遵守框架内部已经存在的约定。约定>配置>编码
常用maven命令
- mvn clean 清理
- mvn compile 编译主程序
- mvn test-compile 编译测试程序
- mvn test 执行测试
- mvn package 打包
- mvn install 安装
- mvn site 生成站点
注意:执行与构建过程相关的maven命令,必须进入pom.xml所在的目录。
仓库默认的路径
系统中当前用户的家目录.m2\repository
maven配置
本地仓库路径配置
给maven的settings.xml配置文件的settings标签添加
<localRepository>D:\maven_repository</localRepository>
阿里仓库配置
给maven的settings.xml配置文件的settings标签的mirrors标签添加
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirrors>
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
JDK的配置
给maven的settings.xml配置文件的settings标签的profiles标签添加。
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
pom
Project Object Model 项目对象模型
Document Object Model DOM 文档对象模型
坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.10</version>
</dependency>
groupId:公司或组织域名倒序+项目名
artifactId:模块名
version:版本
maven工程的坐标与仓库中路径的对应关系:org/springframework/spring-core/5.3.10/spring-core-5.3.10.jar
仓库
仓库的分类
1、本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有maven工程服务。
2、远程仓库
(1)私服:搭建在局域网环境中,为局域网范围内的所有maven工程服务。
(2)中央仓库:架设在Internet上,为全世界所有maven工程服务。
(3)中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度。
依赖
1、maven解析依赖信息时会到本地仓库中查找被依赖的jar包。
对于我们自己开发的maven工程,使用mvn install命令安装后就可以进入仓库。
2、依赖的范围
(1)compile范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:是
是否参与部署:是
典型例子:spring-core
(2)test范围依赖
对主程序是否有效:无效
对测试程序是否有效:有效
是否参与打包:否
是否参与部署:否
典型例子:Junit
(3)provided范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:否
是否参与部署:否
典型例子:servlet-api
3、依赖的传递性
好处:可以传递的依赖不必在每个模块工程中都重复声明,在“最下面”的工程中依赖一次即可。
注意:非compile范围的依赖不能传递,所以在各个工程模块中,如果有需要就得重复声明依赖。
3、依赖的排除
(1)需要设置依赖排除的场合
(2)依赖排除的设置方式
<exclusions>
<exclusion>
<groupId>coommons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
4、统一管理依赖的版本
(1)使用properties标签内使用使用自定义标签统一声明版本号
<properties>
<jack.spring.version>4.0.0.RELEASE</jack.spring.version>
</properties>
(2)在需要统一版本的位置,使用${自定义标签名}引用声明的版本号
<version>${jack.spring.version}</version>
(3)其实properties标签配合自定义标签声明数据的配置并不是只能用于声明依赖的版本号,凡是需要统一声明后在引用的场合都可以使用。
<properties>
<jack.spring.version>4.0.0.RELEASE</jack.spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
继承
1、假如:
Hello依赖Junit:4.0
HelloFriend依赖Junit:4.0
MakeFriends依赖Junit:4.9
由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。
2、需求:统一管理各个模块工程中对Junit依赖的版本
3、解决思路:将Junit依赖统一提取到“父”工程中,在子工程中声明Junit依赖时不指定版本,以父工程中统一设定的为准,同时也便于修改。
4、操作步骤
(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>com.jack.maven</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 配置聚合 -->
<modules>
<!-- 指定各个子工程的相对路径 -->
<module>../hello</module>
<module>../hello_friend</module>
<module>../make_friends</module>
</modules>
<!-- 配置依赖的管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
(2)在子工程中声明对父工程的引用
<?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>
<artifactId>hello</artifactId>
<!-- 子工程中声明父工程 -->
<parent>
<groupId>com.jack.maven</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前文件为基准的父工程pom.xml文件的相对路径 -->
<relativePath>../parent/pom.xml</relativePath>
</parent>
<properties>
<atguigu.spring.version>4.1.1.RELEASE</atguigu.spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<name>hello</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${jack.spring.version}</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency> -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${jack.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${jack.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${jack.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${jack.spring.version}</version>
</dependency>
</dependencies>
</project>
<?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>
<artifactId>hello_friend</artifactId>
<name>hello_friend</name>
<!-- 子工程中声明父工程 -->
<parent>
<groupId>com.jack.maven</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前文件为基准的父工程pom.xml文件的相对路径 -->
<relativePath>../parent/pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jack.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency> -->
</dependencies>
</project>
<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>
<artifactId>make_friends</artifactId>
<!-- 子工程中声明父工程 -->
<parent>
<groupId>com.jack.maven</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前文件为基准的父工程pom.xml文件的相对路径 -->
<relativePath>../parent/pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>com.jack.maven</groupId>
<artifactId>OurFriends</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency> -->
<dependency>
<groupId>com.jack.maven</groupId>
<artifactId>hello_friend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
聚合
1、作用:一键安装各个模块工程。
2、配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块
<!-- 配置聚合 -->
<modules>
<!-- 指定各个子工程的相对路径 -->
<module>../hello</module>
<module>../hello_friend</module>
<module>../make_friends</module>
</modules>
3、使用方式:在聚合工程的pom.xml上点右键run as ->maven install