Maven小结
一.Maven概述
1. Maven是基于项目对象模型(POM project object model)的项目管理工具
2. Maven 使用约定而不是配置
二.Maven环境配置
1.jdk安装
URL:http://www.oracle.com/technetwork/java/javase/downloads/index.html
验证:Java -version
2.Maven安装
URL:http://maven.apache.org/download.cgi
设置环境:
win MAVEN_HOME:... Path:%MAVEN_HOME\bin;
macOS export M2_HOME=/Users/robbie/apache-maven-3.3.3
export PATH=$PATH:$M2_HOME/bin
$ source ~/.bash_profile
验证:mvn -version
三. POM
POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。
POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。
POM 也包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。能够在 POM 中设置的一些配置如下:project dependencies plugins goals build profiles project version developers mailing list
每个工程应该只有一个 POM 文件。
POM.xml 的根元素是 project,它有三个主要的子节点:groupId, artifactId,version。所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。
Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。
查看 Super POM 默认配置的一个简单方法是执行以下命令:mvn help:effective-pom
四. 生命周期
构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序。这里的阶段是生命周期的一部分。
举例说明,一个典型的 Maven 构建生命周期是由以下几个阶段的序列组成的
当需要在某个特定阶段之前或之后执行目标时,可以使用 pre 和 post 来定义这个目标。
当 Maven 开始构建工程,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。Maven 有以下三个标准的生命周期:clean default(or build) site
目标表示一个特定的、对构建和管理工程有帮助的任务。它可能绑定了 0 个或多个构建阶段。没有绑定任何构建阶段的目标可以在构建生命周期之外被直接调用执行。
mvn clean dependency:copy-dependencies package
1.clean
当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段。
pre-clean
clean
post-clean
2.Default (or Build) 生命周期
Maven 的主要生命周期,被用于构建应用。包括23 个阶段
3.Site 生命周期
Maven Site 插件一般用来创建新的报告文档、部署站点等。
阶段:
pre-site
site
post-site
site-deploy
五. 构建配置文件
构建配置文件是一组配置的集合,用来设置或者覆盖 Maven 构建的默认配置。使用构建配置文件,可以为不同的环境定制构建过程,例如 Producation 和 Development 环境。
Profile 在 pom.xml 中使用 activeProfiles / profiles 元素指定,并且可以用很多方式触发。Profile 在构建时修改 POM,并且为变量设置不同的目标环境(例如,在开发、测试和产品环境中的数据库服务器路径)。
具体查询W3Cschool https://www.w3cschool.cn/maven/tchv1ht8.html
六. Maven仓库
在 Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工程指定的文件。
Maven 仓库有三种类型:
本地(local)
中央(central)
远程(remote)
本地仓库
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %MAVEN_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
<localRepository>C:/MyLocalRepository</localRepository>
中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库的关键概念:
这个仓库由 Maven 社区管理。
不需要配置。
需要通过网络才能访问。
要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.rg/#browse. 使用这个仓库,开发人员可以搜索所有可以获取的代码库。
但是大部分时候我们会在这个仓库获取资源 URL: https://mvnrepository.com/
或者配置阿里云Maven URL:http://maven.aliyun.com/
在setting中
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
或者在pom.xml中
<repositories>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
远程仓库
如果 Maven 在中央仓库中也找不到依赖的库文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
</repository>
<repository>
<id>companyname.lib2</id>
<url>http://download.companyname.org/maven2/lib2</url>
</repository>
</repositories>
七.Maven依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4, 如果找到了则下载到本地仓库中已被将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
八.插件(使用原型插件创建工程)
maven-archetype-quickstart 插件
C:\MVN>mvn archetype:generate
-DgroupId=com.companyname.bank
-DartifactId=consumerBanking
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
九.外部依赖
在远程仓库和中央仓库中,依赖不能被满足。在 src 文件夹下添加 lib 文件夹
复制任何 jar 文件到 lib 文件夹下。
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\...jar</systemPath>
</dependency>
十.继承和聚合特性
聚合: 统一管理
<modules>
<module></module>
<module></module>
</modules>
继承:
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<relativePath></relativePath>
</parent>
十一. 依赖范围
十二.Maven命令
mvn compile 与mvn install, mvn deploy的区别
1.mvn compile 编译类文件
2.mvn install 包含 mvn compile, mvn package然后上传本地仓库
3.mvn deploy 包含mvn install 然后上传到私服
参考了 https://www.cnblogs.com/wkrbky/p/6352188.html