HOME
HOME
文章目录
  1. 1. maven介绍
  2. 2. maven配置
  3. 3. maven常用命令
  4. 4. 依赖管理
  5. 5. Archetype
  6. 参考资料

maven学习笔记

maven很久之前学过,但后面没搞java就基本忘了,基本的打包命令都忘得一干二净。最近准备深入学习下java,头一个要学的便是maven。在此记录下maven的学习笔记。

1. maven介绍

maven主要用作java程序的打包,专门为java项目设计的管理和构建工具。

通过maven创建的项目结构大致如下:

1
2
3
4
5
6
7
8
9
10
11
➜  maventest tree
.
├── pom.xml
└── src
├── main
│   ├── java
│   └── resources
└── test
└── java

6 directories, 2 files

pom.xml文件就是maven的描述文件,里面存放了对应的依赖包名及对应的版本。

src目录存放代码,下面的子目录java文件夹存放java代码,resource文件主要存放资源文件。

pom.xml文件的基本结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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>org.example</groupId>
<artifactId>maventest</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>

</project>

groupId类似于java的包名,一般是公司或者组织名称。

artifactId通常是项目的名称

version就是项目的版本

通常由这三个元素作为了项目的唯一标识。

dependencies则是当前maven项目所要依赖的包。包的标识也由上面三个因素所确定。当写好依赖后,maven会自动的将依赖包下载到classpath当中。

注:只有以-SNAPSHOT结尾的版本号会被Maven视为开发版本,开发版本每次都会重复下载依赖,这种SNAPSHOT版本只能用于内部私有的Maven repo,公开发布的版本不允许出现SNAPSHOT。

2. maven配置

maven有仓库的概念,所有的依赖都是从仓库中下载的。

仓库的类型有如下几种:

  • 本地仓库:电脑上的仓库,默认路径在:~/.m2/repository
  • 私服仓库:一般公司内部自己搭建的仓库
  • 中央仓库:apache团队维护的仓库

仓库的查找顺序如下:

image-20210616172647670

中央仓库的优先级最低,一般是从本地开始查找,没有就找私服仓库,再没有就找中央仓库。一般国内的情况访问中央仓库都比较慢,所以一般在使用仓库的时候都要配置仓库镜像。

配置仓库镜像

配置文件的位置在:~/.m2/settings.xml

在里面添加如下的配置即可:

1
2
3
4
5
6
7
8
9
<mirrors>
<mirror>
<id>google-maven-central</id>
<name>Google Maven Central</name>
<url>https://maven-central.storage.googleapis.com
</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

该处最好不要使用阿里云的maven仓库,默认是不带索引的,所以添加到idea中,会无法更新maven索引,也就没法使用dependency自动添加的插件。

maven依赖查询的网站在:https://search.maven.org/搜索关键字即可找到对应的包

image-20210616175234372

3. maven常用命令

maven中有几个常用的命令,在IDEA中直接做成了按钮,可以点击实现,但也要学一下命令是怎么回事。

mvn clean:清理编译好的文件

mvn compile:将java代码编译成class文件

mvn test:项目测试

mvn package:根据配置将项目打包成jar或者war

mvn install:将生成的jar包复制到本地的maven仓库中,其他项目就可以使用这个jar包了

mvn deploy:将生成的jar包复制到私有的仓库中,供其他开发者使用

生命周期Lifecycle

生命周期包含一系列的阶段(phase),下面是default的声明周期:

  • 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 pachage时,maven就会执行声明周期,运行到package的phase为止。

第二个clean的声明周期,由三个phase组成:

  • pre-clean
  • Clean
  • post-clean

当我们使用mvn命令时,后面跟上的参数就是phase,maven根据生命周期运行到指定的phase。

例如执行命令mvn clean test,则是先执行clean生命周期到clean,然后再执行default生命周期到test,执行的phase如下:

  • Pre-clean
  • clean
  • validate
  • Package

Goal

执行一个phase又会触发多个goal,相当于goal是组成phase的一部分,phase又是组成lifecycle的一部分。

执行compile,对应的goal:compiler:compile

执行test,对应的goal:compiler:testCompile surefire:test

大多数情况,我们只要指定phase,就默认执行这些phase默认绑定的goal,只有少数情况,我们可以直接指定运行一个goal,例如,启动Tomcat服务器:

1
mvn tomcat:run

IDEA中配置自动加载dependency

maven的中央仓库镜像设置为谷歌的镜像后,通过idea可以自动更新仓库索引,如下图

image-20210616210900735

更新完了后,在pom.xml的dependencies中就可以进行模糊查找依赖包了。

image-20210616211004143

4. 依赖管理

通常的依赖的配置文件如下:

1
2
3
4
5
6
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>

组成依赖的元素有四个:groupIdartifactIdversionscope

其中scope表示了依赖的范围,主要的值如下所示:

image-20210616211531581

依赖还有模块的继承使用方法,具体可以查看https://www.liaoxuefeng.com/wiki/1252599548343744/1309301243117601

5. Archetype

顾名思义就是模板,maven项目的模板工具包。能够通过这些模板快速创建一些工程。在使用IDEA创建maven工程时,内置了许多模板。

image-20210616212336017

一般我们很少去研究所有的模板,一般常用的模板就那么几个,一般最常用的就是下面这个,拿来创建web站点:

org.apache.maven.archetypes:maven-archtype-webapp

还有其他很多模板,就不再去深究了

参考资料

  1. 廖雪峰maven教程

  2. https://www.cnblogs.com/lenve/p/12047793.html