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以及正确的权限才能发布和使用。