一.Maven介绍
1.1 什么是 Maven
Maven 的正确发音是[ˈmevən],而不是“马瘟”以及其他什么瘟。Maven 在美国是一个口语化的词
语,代表专家、内行的意思。
一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个项目对象模
型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管
理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标
(goal)的逻辑。
Maven 是项目管理工具 对软件项目提供构建与依赖管理
Maven是Apache下的Java开源项目
1.2Maven 核心特性
项目设置遵循统一的规则,保证不同开发环境的兼容性
强大的依赖管理,项目依赖组件自动下载、自动更新
可扩展的插件机制,使用简单,功能丰富
Maven 的依赖管理:传统工程jar包放在项目中,maven开发的工程根据jar的坐标找到jar仓库。
仓库检索网站https://search.maven.org/
项目的一键构建:我们的项目,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个过程称为构建。
二. Maven 的使用
1.下载安装:
1.1下载并解压到D盘
下载第二个
1.2添加环境变量
变量名:MAVEN_HOME
变量值:D:\apache-maven-3.8.1
在Path中添加:%MAVEN_HOME%\bin
确保环境变量中有JAVAHOME
输入mvn -v
1.3本地仓库的配置
MAVE_HOME/conf/settings.xml 文件中配置本地仓库位置
<localRepository>D:\Apache\repository</localRepository>
1.4设置maven编码为utf-8
设置环境变量
变量名 MAVEN_OPTS
变量值 -Xms256m -Xmx512m -Dfile.encoding=UTF-8
运行mvn -v查看修改结果
2.maven项目标准目录结构
src/main/java目录 | 核心代码 |
src/main/resources | 配置文件部分 |
src/test/java目录 | 测试代码部分,如 JUnit 测试类 |
src/test/resources | 测试配置文件,如 spring, hibernate 配置文件 |
src/main/webapp | 页面资源 ,js,css,图片等等 |
target | 项目输出的目录,用于存储jar,war文件 |
target/classes | 字节码(.class)的编译输出目录 |
pom.xml | maven 项目核心配置文件 |
3.Maven常用命令
命令 | 用途 |
mvn archetype:generate | 创建Maven工程结构 |
mvn compile | 编译源代码 |
mvn test | 执行测试用例 |
mvn clean | 清除产生的项目 |
mvn package | 项目打包 |
mvn install | 安装至本地仓库 |
1.clean
clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。
2.compile
compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target
目录下。
3.test
test 是 maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。也会编译src/main/java的代码
4.package
package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war
包。
5.install
install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。会执行compile,test,package,把项目放在了本地仓库
4.Maven生命周期
5.Maven概念模型
项目对象模型 (Project Object Model)
一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、
插件目标等。
赖管理系统(Dependency Management System)
通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。
比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,如下所示是 junit4.9
的依赖定义:
<!-- 依赖关系 -->
<dependencies>
<!-- 此项目运行使用 junit,所以此项目依赖 junit -->
<dependency>
<!-- junit 的项目名称 -->
<groupId>junit</groupId>
<!-- junit 的模块名称 -->
<artifactId>junit</artifactId>
<!-- junit 版本 -->
<version>4.9</version>
<!-- 依赖范围:单元测试时使用 junit -->
<scope>test</scope>
</dependency>
三.配置
pom.xml 是 Maven 项目的核心配置文件,位于每个工程的根目录,基本配置如下:
<project > :文件的根节点 .
<modelversion > : pom.xml 使用的对象模型版本
<groupId > :项目名称,一般写项目的域名
<artifactId > :模块名称,子项目名或模块名称
<version > :产品的版本号 .
<packaging > :打包类型,一般有 jar、war、pom 等
<name > :项目的显示名,常用于 Maven 生成的文档。
<description > :项目描述,常用于 Maven 生成的文档
<dependencies> :项目依赖构件配置,配置项目依赖构件的坐标
<build> :项目构建配置,配置编译、运行插件等。
1.设置Maven本地仓库路径
在setings.xml 文件<settings节点下添加
<localRepository>D:/maven_repositroy</localRepository>
2.坐标
GroupId:机构或者团体的英文,采用 逆向域名 形式书写
ArtifactId:项目名称 说明其用途,例如:cms,oa...
Version: 版本号,一般采用 版本+单词 形式 例如1.1.0.RELEASE
3.依赖范围
依赖范围 | 编译有效 | 测试有效 | 运行时有效 | 例如 |
compile | Y | Y | Y | spring-core |
test | Y | Junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | Y | JDBC驱动 | |
system | Y | Y | 本地的,Maven仓库之外的类库 |
4.设置jdk版本
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
5.设置tomcat插件
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat9-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path></path>
</configuration>
</plugin>
</plugins>
6.Maven国内服务器
maven.aliyun.com 仓库服务 (aliyun.com)
1.选择public
2.在版本下添加依赖
<repositories>
<repository>
<!--创建私服-->
<id>aliyun</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
四.idea 开发 maven 项目
1 打开FileSettings 配置 maven
-DarchetypeCatalog=internal在没网时会加载本地的
1 Maven聚合工程概念
Maven聚合工程:就是可以在一个Maven父工程中创建多个组件(项目),这个多个组件之间可以相互依赖,实现组件的复用
2 创建Maven聚合工程
2.1 创建Maven父工程
Maven聚合工程的父工程 packing必须为 pom
-
创建一个Maven工程
-
修改父工程的pom.xml,设置打包方式为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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qfedu</groupId> <artifactId>maven-parent</artifactId> <version>1.0.0</version> <packaging>pom</packaging> </project>
-
父工程用于管理子工程,不进行业务实现,因此src目录可以选择性删除
2.2 创建Module
-
选择父工程---右键---New---Module
-
输入子工程名称(g和v都从父工程继承)
-
子工程的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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--module的pom继承 父工程的pom--> <parent> <artifactId>maven-parent</artifactId> <groupId>com.qfedu</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>common</artifactId> </project>
-
父工程的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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qfedu</groupId> <artifactId>maven-parent</artifactId> <version>1.0.0</version> <!-- 声明当前父工程的子module --> <modules> <module>common</module> </modules> <packaging>pom</packaging> </project>
3.1 依赖继承
-
在父工程的pom文件添加的依赖,会被子工程继承
3.2 依赖版本管理
在父工程的pom.xml的dependencyManagement中添加依赖,表示定义子工程中此依赖的默认版本(此定义并不会让子工程中添加当前依赖)
<!-- 依赖管理:在dependencyManagement中添加依赖,表示定义子工程中此依赖的默认版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.1</version>
</dependency>
</dependencies>
</dependencyManagement>