1. Maven介绍
Maven 是一款为 Java 项目管理构建、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。
Maven就是一个软件,掌握安装、配置、以及基本功能 (项目构建、依赖管理) 的理解和使用即可!
-
依赖管理:
Maven 可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突、依赖版本管理等。通过 Maven,我们可以方便地维护项目所依赖的外部库,避免版本冲突和转换错误等,而我们仅仅需要编写配置即可。
-
构建管理:
项目构建是指将源代码、配置文件、资源文件等转化为能够运行或部署的应用程序或库的过程
Maven 可以管理项目的编译、测试、打包、部署等构建过程。通过实现标准的构建生命周期,Maven 可以确保每一个构建过程都遵循同样的规则和最佳实践。同时,Maven 的插件机制也使得开发者可以对构建过程进行扩展和定制。主动触发构建,只需要简单的命令操作即可。
2. Maven安装和配置
2.1 Maven安装
下载地址:https://maven.apache.org/docs/history.html
各个工具选用版本:
工具 | 版本 |
---|---|
Maven | 3.8.8 |
JDK | 17 |
IDEA | 2022.2 |
安装条件: maven需要本机安装java环境、必需包含java_home环境变量!
软件安装: 右键解压即可(绿色免安装)
软件结构:
bin:含有Maven的运行脚本
boot:含有plexus-classworlds类加载器框架
conf:含有Maven的核心配置文件
lib:含有Maven运行时所需要的Java类库
LICENSE、NOTICE、README.txt:针对Maven版本,第三方软件等简要介绍
2.2 Maven环境配置
- 配置MAVEN_HOME
- 配置path
- 测试配置是否成功
bash
mvn -v
# 如果输出版本信息说明配置成功
2.3 Maven环境配置
我们需要需改maven/conf/settings.xml配置文件,来修改maven的一些默认配置。我们主要休要修改的有三个配置:
1.依赖本地缓存位置(本地仓库位置)
2.maven下载镜像
3.maven选用编译项目的jdk版本
-
配置本地仓库地址
xml<!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository <localRepository>/path/to/local/repo</localRepository> --> <localRepository>D:\ProgramData\maven-repository</localRepository>
-
配置国内阿里镜像
xml<!--在mirrors节点(标签)下添加中央仓库镜像--> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
-
配置jdk17版本项目构建
xml<!--在profiles节点(标签)下添加jdk编译版本--> <profile> <id>jdk-17</id> <activation> <activeByDefault>true</activeByDefault> <jdk>17</jdk> </activation> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion> </properties> </profile>
2.4 IDEA配置本地Maven
将Maven home path 、User settings file、Local repository改为自己本地maven的路径即可。
注意:
-
如果本地仓库地址不变化,只有一个原因,就是maven/conf/settings.xml配置文件编写错误!仔细检查即可!
-
一定保证User settings file对应之前修改的settings.xml的路径,若 不一致,选中Override复选框,手动选择配置文件
3. 基于IDEA创建Maven工程
3.1 Maven工程的GAVP
Maven工程相对之前的项目,多出一组gavp属性,gav需要我们在创建项目的时候指定,p有默认值。
Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写,其中前三个是必要的,而 Packaging 属性为可选项。这四个属性主要为每个项目在maven仓库中做一个标识,类似人的姓名!有了具体标识,方便后期项目之间相互引用依赖等!
GAVP遵循一下规则:
-
GroupID 格式:com.{公司/BU }.业务线.[子业务线],最多 4 级。
说明:{公司/BU} 例如:alibaba/taobao/tmall/aliexpress 等 BU 一级;子业务线可选。
举例:com.taobao.tddl 或 com.alibaba.sourcing.multilang
-
ArtifactID 格式:产品线名-模块名。语义不重复不遗漏,先到仓库中心去查证一下。
举例:tc-client / uic-api / tair-tool / bookstore
-
Version版本号格式推荐:主版本号.次版本号.修订号
1) 主版本号:当做了不兼容的 API 修改,或者增加了能改变产品方向的新功能。
2) 次版本号:当做了向下兼容的功能性新增(新增类、接口等)。
3) 修订号:修复 bug,没有修改方法签名的功能加强,保持 API 兼容性。
例如: 初始→1.0.0 修改bug → 1.0.1 功能调整 → 1.1.1等
-
Packaging定义规则:
指示将项目打包为什么类型的文件,idea根据packaging值,识别maven项目类型!
packaging 属性为 jar(默认值),代表普通的Java工程,打包以后是.jar结尾的文件。
packaging 属性为 war,代表Java的web工程,打包以后.war结尾的文件。
packaging 属性为 pom,代表不会打包,用来做继承的父工程。
3.2 Idea构建Maven Java SE工程
- Name:maven工程名
- Location:工程地址
- Language:语言,选Java
- Build system:构建工具,选maven
- JDK:Java版本,我们选17
- Groupid:安装上述规则制定
- Artifactid:一般与工程名相同
创建工程之后,若第一次使用maven,或者使用的是新的本地仓库,idea右下角会出现进度条,表示maven正在下载相关插件,等待下载完毕,进度条消失即可。
验证maven工程是否创建成功,当创建完毕maven工程之后,idea中会自动打开Maven视图,如下图:
- Lifecycle:maven工程的生命周期
- Plugins:maven工程的相关插件
- Dependencies:maven工程的相关依赖,这里因为我的项目目前还没有导入依赖,因此没有显示。
4. 基于IDEA进行Maven工程构建
4.1 构建概念
项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率,使得开发人员能够更加专注于应用程序的开发和维护,而不必关心应用程序的构建细节。
同时,项目构建还能够将多个开发人员的代码汇合到一起,并能够自动化项目的构建和部署,大大降低了项目的出错风险和提高开发效率。常见的构建工具包括 Maven、Gradle、Ant 等。
4.2 命令行构建
命令 | 描述 |
---|---|
mvn compile | 编译项目,生成target文件 |
mvn package | 打包项目,生成jar或war文件 |
mvn clean | 清理编译或打包后的项目结构 |
mvn install | 打包后上传到maven本地仓库 |
mvn deploy | 只打包,上传到maven私服仓库 |
mvn site | 生成站点 |
mvn test | 执行测试源码 |
war包打包插件和jdk版本不匹配:pom.xml 添加以下代码即可
xml
<build>
<!-- jdk17 和 war包版本插件不匹配 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
</plugins>
</build>
例如:
bash
#清理
mvn clean
#清理,并重新打包
mvn clean package
#执行测试代码
mvn test
4.3 基于IDEA构建
- clean:清理
- compile:编译
- test:测试
- package:打包
- install:安装
- deploy:部署
注意:打包(package)和安装(install)的区别是什么
打包是将工程打成jar或war文件,保存在target目录下
安装是将当前工程所生成的jar或war文件,安装到本地仓库,会按照坐标保存到指定位置。
4.4 构建插件、命令、生命周期命令之间关系
-
构建生命周期
当我们执行package命令也会自动执行compile命令!
这种行为就是因为构建生命周期产生的!构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令!!!
构建周期作用:会简化构建过程
例如:项目打包时,我们只是用package即可,前面的过程无需执行。
主要两个构建生命周期:
-
清理周期:主要是对项目编译生成文件进行清理
包含命令:clean
-
默认周期:定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分
包含命令:compile - test - package - install - deploy
-
-
插件、命令、周期三者关系(了解)
周期→包含若干命令→包含若干插件
使用周期命令构建,简化构建过程!
最终进行构建的是插件!