JAVA学习(十四)| Maven基础
Maven是一个Java项目管理和构建工具,它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具。
-
Maven使用
pom.xml定义项目内容,并使用预设的目录结构;(和package.json) -
在Maven中声明一个依赖项可以自动下载并导入classpath;
-
Maven使用
groupId,artifactId和version唯一定位一个依赖。 -
Maven通过解析依赖关系确定项目所需的jar包,常用的4种
scope有:compile(默认),test,runtime和provided;Maven从中央仓库下载所需的jar包并缓存在本地;
可以通过镜像仓库加速下载。
构建流程——生命周期⁍
Maven通过lifecycle、phase和goal来提供标准的构建流程。
最常用的构建命令是指定phase,然后让Maven执行到指定的phase:(如下面的clean、compile、test、package)
- mvn clean
- mvn clean compile
- mvn clean test
- mvn clean package
通常情况,我们总是执行phase默认绑定的goal,因此不必指定goal。
使用插件⁍
执行每个phase,都是通过某个插件(plugin)来执行的,Maven本身其实并不知道如何执行compile,它只是负责找到对应的compiler插件,然后执行默认的compiler:compile这个goal来完成编译。
Maven已经内置了一些常用的标准插件:
| 插件名称 | 对应执行的phase |
|---|---|
| clean | clean |
| compiler | compile |
| surefire | test |
| jar | package |
使用自定义插件必须在pom.xml中声明插件及配置
模块管理⁍
把每个模块当作一个独立的Maven项目,它们有各自独立的pom.xml。[1]
可以提取出共同部分作为parent,parent的<packaging>是pom而不是jar,因为parent本身不含任何Java代码。各个模块都可以直接从parent继承。
如果两个模块之间有依赖关系,需要从其中一个里引入另一个。
最后,在编译的时候,需要在根目录创建一个pom.xml统一编译,通过<modules>编译多个模块。
中央仓库、本地仓库与私有仓库⁍
- 中央仓库:上传到Maven里的
- 私有仓库:非公网上的,需要在本地的
~/.m2/settings.xml中配置好 - 本地仓库:把本地开发的项目“发布”在本地,这样其他项目可以通过本地仓库引用它。容易出现版本不一致的情况。更好的方法是使用模块化编译。
mvnw⁍
mvnw是Maven Wrapper的缩写。
对于某些项目来说,它可能必须使用某个特定的Maven版本,这个时候,就可以使用Maven Wrapper,它可以负责给这个特定的项目安装指定版本的Maven,而其他项目不受影响。
就是非全局的Maven版本
Artifact⁍
使用Maven发布一个Artifact时:[2]
- 可以发布到本地,然后推送到远程Git库,由静态服务器提供基于网页的repo服务,使用方必须声明repo地址;
- 可以发布到central.sonatype.org,并自动同步到Maven中央仓库,需要前期申请账号以及本地配置;
- 可以发布到GitHub Packages作为私有仓库使用,必须提供Token以及正确的权限才能发布和使用。





