①. Maven 简介
①. Maven概述
- ①. Maven是Apache软件基金会组织维护的一款自动化构建工具。主要有两个作用:
- maven工程对jar包的管理过程
- 项目的一键构建
- ②. maven工程对jar包的管理过程
- ③. 项目的一键构建
- 先来说说什么是构建?指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个过程称为构建
- 一键构建指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作
②. maven的安装
- ①. 确保安装了java环境:maven本身就是java写的,所以要求必须安装JDK。查看java环境变量:echo %JAVA_HOME%
- ②. 下载并解压 maven 安装程序
- ③. 配置 Maven 的环境变量:
MAVEN_HOME=d:/apache-maven-3.3.9 或者 M2_HOME=d:/apache-maven-3.3.9 path=%MAVEN_HOME%/bin; 或者%M2_HOME%/bin;
④. 验证是否安装成功 mvn -v
③. 原生Maven演示:
①. 如果没有添加上junit测试的依赖,只要类名和方法名,类名和方法名是test开头的,maven约定会去执行,当我们在项目下执行mvn test,会发现如下的"coming…"进行了输出
②. 如果引入了junit测试,那么①的说明变了,我们会按照junit的测试来
②. Maven的核心概念
①. Maven目录结构
- ①. maven中约定的目录结构图解:
②. 各个目录结构详解:
Maven工程的目录结构
(1). src/main/java —— 存放项目的.java 文件
(2). src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
(3). src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
(4). src/test/resources —— 测试资源文件
(5). target —— 项目输出位置,编译后的 class 文件会输出到此目录
(6). pom.xml——maven 项目核心配置文件
注意:如果是普通的 java 项目,那么就没有 webapp 目录
②. pom.xml
①. modelVersion:Maven模型的版本,对于Maven2和Maven3来说,它只能是4.0.0
②. groupId:组织id,一般是公司域名的倒写,格式可以为
域名倒写,例如 com.baidu
域名倒写+项目名,例如com.baidu.appolo
③. artifactId:项目名称,也是模块名称对应groupId中项目中的子项目
④. version:项目的版本号。如果项目还在开发中,是不稳定版本,通常在版本后带 -SNAPSHOT。version使用三位数字标识,例如1.1.0
⑤. name:项目的名称
⑥. packaging:项目打包的类型,可以使 jar、war、rar、ear、pom,默认是 jar(一般父工程设置为pom,子工程设置为jar),web项目是war包
⑦. dependencies | dependency:Maven 的一个重要作用就是管理jar包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些 jar 就被称为依赖,使用标签dependency来配置。而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,maven 把所有的 jar包也都视为项目存在了
⑧.properties:是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级(配置属性)
<properties> <!--源码编译jdk版本--> <maven.compiler.source>1.8</maven.compiler.source> <!--运行代码的jdk版本--> <maven.compiler.target>1.8</maven.compiler.target> <!--项目构建使用的编码,避免中文乱码--> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--生成报告的编码--> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties>
⑨.build:表示与构建相关的配置,例如设置编译插件的jdk版本(构建)
⑩.parent:在Maven中,如果多个模块都需要声明相同的配置,例如:groupId、version、有相同的依赖、或者相同的组件配置等,也有类似Java的继承机制,用parent声明要继承的父工程的pom配置(继承)
⑩①.modules:在Maven的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块,该模块打包方式为pom,并且在其中使用modules聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有模块,叫Maven的聚合
⑩②. description:描述信息
⑩③. relativePath
父项目的pom.xml文件的相对路径。默认值为…/pom.xml。maven首先从当前构建项目开始查找父项目的pom文件,然后从本地仓库,最有从远程仓库。RelativePath允许你选择一个不同的位置
如果默认…/pom.xml没找到父元素的pom,不配置relativePath指向父项目的pom则会报错
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--Maven模型的版本,对于Maven2和Maven3来说,它只能是4.0.0--> <modelVersion>4.0.0</modelVersion> <!--groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标, 在众多的maven项目中可以唯一定位到某一个项目。 坐标也决定着将来项目在仓库中的路径及名称 --> <groupId>com.atguigu.gulimall</groupId> <artifactId>gulimall</artifactId> <version>0.0.1-SNAPSHOT</version> <!--名称--> <name>gulimall</name> <!--描述--> <description>聚合</description> <!--打包--> <packaging>pom</packaging> <!--模块--> <modules> <module>gulimall-member</module> <module>gulimall-order</module> <module>gulimall-coupon</module> <module>gulimall-ware</module> <module>gulimall-product</module> <module>renren-fast</module> <module>renren-generator</module> <module>gulimall-common</module> <module>gulimall-gateway</module> </modules> <!--插件--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build> </project>
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--Maven模型的版本,对于Maven2和Maven3来说,它只能是4.0.0--> <modelVersion>4.0.0</modelVersion> <!--父工程的坐标--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!--公司名或组织名的域名倒序--> <groupId>com.atguigu.gulimall</groupId> <!--模块名--> <artifactId>gulimall-order</artifactId> <!--版本号--> <version>0.0.1-SNAPSHOT</version> <!--名称--> <name>gulimall-order</name> <!--描述--> <description>谷粒商城-订单服务</description> <!--配置信息--> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR3</spring-cloud.version> </properties> <!--依赖--> <dependencies> <dependency> <groupId>com.atguigu.gulimall</groupId> <artifactId>gulimall-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>