Maven是专门为Java项目打造的项目管理和构建工具,类似 NodeJS 的 NPM,PHP 的 composer。
它的主要功能有:
- 提供了一套标准化的项目结构;
- 提供了一套标准化的构建流程(编译,测试,打包,发布……);
- 提供了一套依赖管理机制。
安装配置
MasOS
1、下载 apache-maven-x.x.x-bin.tar.gz 压缩包
2、解压到自定义目录,如:/usr/local
3、配置环境变量
# 或者 ~/.bash_profile,根据自己使用终端决定
$ vim ~/.zshrc
# 添加环境变量(根据自己的目录进行修改)
export M2_HOME=/usr/local/apache-maven-3.9.1
export PATH=${PATH}:${M2_HOME}/bin
# 生效
$ source ~/.zshrc4、查看是否安装成功
$ mvn -v
Apache Maven 3.9.1 (2e178502fcdbffc201671fb2537d0cb4b4cc58f8)
Maven home: /usr/local/apache-maven-3.9.1
Java version: 19.0.1, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "13.3", arch: "aarch64", family: "mac"目录结构
一个使用Maven管理的普通的Java项目,它的目录结构默认如下:
./maven-project
├── pom.xml // 项目描述文件
├── src
│ ├── main
│ │ ├── java // 存放Java源码
│ │ └── resources // 存放资源文件
│ └── test // 单元测试
│ ├── java // 单测源码
│ └── resources // 单测资源
└── targetpom.xml
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiqiesuifeng.blog</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
...
</properties>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>groupId:类似于Java的包名,通常是公司或组织名称artifactId:类似于Java的类名,通常是项目名称version:项目版本号
一个Maven工程就是由groupId,artifactId和version作为唯一标识。我们在引用其他第三方库的时候,也是通过这3个变量确定。例如,依赖commons-logging:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>使用<dependency>声明一个依赖后,Maven就会自动下载这个依赖包并把它放到classpath中。
依赖管理
Maven定义了几种依赖关系:
compile:编译时需要用到该jar包(默认)test:编译Test时需要用到该jar包runtime:编译时不需要,但运行时需要用到provided:编译时需要用到,但运行时由JDK或某个服务器提供
使用示例:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>镜像管理
切换镜像
用户主目录下进入.m2目录,创建一个settings.xml配置文件,内容如下:
<settings>
<mirrors>
<mirror>
<id>aliyun</id>
<name>aliyun</name>
<mirrorOf>central</mirrorOf>
<!-- 阿里云的Maven镜像 -->
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
</settings>构建流程
Maven不但有标准化的项目结构,而且还有一套标准化的构建流程,可以自动化实现编译,打包,发布,等等。
- lifecycle相当于Java的package,它包含一个或多个phase;
- phase相当于Java的class,它包含一个或多个goal;
- goal相当于class的method,它其实才是真正干活的。
Lifecycle和Phase
Maven的生命周期(lifecycle)由一系列阶段(phase)构成
使用mvn这个命令时,后面的参数是phase,Maven自动根据生命周期运行到指定的phase。
常用命令:
mvn clean:清理所有生成的class和jarmvn clean compile:先清理,再执行到compilemvn clean test:先清理,再执行到test,因为执行test前必须执行compile,所以这里不必指定compilemvn clean package:先清理,再执行到package
生命周期default
它包含以下phase:
- validate
- initialize
- generate-sources
- process-sources
- generate-resources
- process-resources
- compile
- process-classes
- generate-test-sources
- process-test-sources
- generate-test-resources
- process-test-resources
- test-compile
- process-test-classes
- test
- prepare-package
- package
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install
- deploy
运行mvn package,Maven就会执行default生命周期,它会从开始一直运行到package这个phase为止:
- validate
- ...
- package
运行mvn compile,Maven也会执行default生命周期,但这次它只会运行到compile,即以下几个phase:
- validate
- ...
- compile
生命周期clean
它会执行3个phase:
- pre-clean
- clean (注意这个clean不是lifecycle而是phase)
- post-clean
Goal
执行一个phase又会触发一个或多个goal
- compile:compiler:compile
test:
- compiler:testCompile
- surefire:test
goal的命名总是abc:xyz这种形式
模块管理
一个Maven大项目:
single-project
├── pom.xml
└── src拆分成3个模块:
mutiple-project
├── pom.xml
├── parent
│ └── pom.xml // 父级公共配置
├── module-a
│ ├── pom.xml
│ └── src
├── module-b
│ ├── pom.xml
│ └── src
└── module-c
├── pom.xml
└── src每个模块下面都有独立的 pom 配置,可以抽取pom公共配置作为父级配置,模块下面的pom配置基础父级配置
根目录下的 pom.xml 负责统一编译:
<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.practice.xxx</groupId>
<artifactId>build</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>build</name>
<modules>
<module>parent</module>
<module>module-a</module>
<module>module-b</module>
<module>module-c</module>
</modules>
</project>父级 pom.xml 示例:
<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.practice.xxx</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>parent</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.28</version>
</dependency>
...
</dependencies>
</project>注:parent的<packaging>是pom而不是jar,因为parent本身不含任何Java代码
module-a 的 pom.xml 示例:
<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>
<parent>
<groupId>com.practice.xxx</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>module-a</artifactId>
<packaging>jar</packaging>
<name>module-a</name>
</project> 
███ ㊙️ ███ 㸔 黃 魸【 T55V.CC 】浏 览 噐 咑 开【 T55V.CC 】免 ِ曊 ِ㸔 ███ ㊙️ ███
-
-
█ █ █ 幼 女 资 源 在 线 观 看【 w w w . 3 p u . b i z 】 █ █ █
█ █ █ 幼 女 资 源 在 线 观 看【 w w w . 3 p u . b i z 】 █ █ █
唐人阁论坛(品茶)a0gz.cn
华纳圣淘沙开户步骤详解(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程全解析(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司账户注册指南(183-8890-9465—?薇-STS5099【6011643】
新手如何开通华纳圣淘沙公司账户(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙企业开户标准流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户:从零到一(183-8890-9465—?薇-STS5099【6011643】
官方指南:华纳圣淘沙公司开户流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程说明书(183-8890-9465—?薇-STS5099【6011643】
东方明珠客服开户联系方式【182-8836-2750—】?μ- cxs20250806
东方明珠客服电话联系方式【182-8836-2750—】?- cxs20250806】
东方明珠开户流程【182-8836-2750—】?薇- cxs20250806】
东方明珠客服怎么联系【182-8836-2750—】?薇- cxs20250806】
新盛开户前客服电话咨询材料清单【1558--7291-507薇同1】
新盛开户官方客服电话 【1558--7291-507 薇同1】
新盛开户业务办理电话 【1558--7291-507 薇同1】
新盛开户联系电话大全 【1558--7291-507 薇同1】
新盛开户前客服电话咨询材料清单【1558--7291-507薇同1】
新盛开户官方客服电话 【1558--7291-507 薇同1】
新盛开户业务办理电话 【1558--7291-507 薇同1】
新盛开户联系电话大全 【1558--7291-507 薇同1】
华纳东方明珠客服电话是多少?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】
华纳东方明珠开户专线联系方式?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】
华纳企业开户所需材料?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
新盘新项目,不再等待,现在就是最佳上车机会!
无限旅程
梦犯
为子寻父
至尊无上
忠犬八公
浴血无名奔袭
交叉点
地狱来的战尸
惊天追踪
一纸婚约
君主制的未来
作者的布局谋篇匠心独运,让读者在阅读中享受到了思维的乐趣。
对趋势的预判具有战略参考价值。
故事线完整,伏笔巧妙,结局耐人寻味。
作者对主题的挖掘深入骨髓,展现了非凡的洞察力和理解力。
哈哈哈,写的太好了https://www.lawjida.com/
你的文章充满了创意,真是让人惊喜。 https://www.4006400989.com/qyvideo/87897.html
你的文章充满了智慧,让人敬佩。 http://www.55baobei.com/AruG4E0H3O.html
想想你的文章写的特别好www.jiwenlaw.com
不错不错,我喜欢看 https://www.ea55.com/
不错不错,我喜欢看 https://www.237fa.com/