Maven知识梳理
本文主要记录Maven学习和使用中的知识点
1.MAVEN 概念
1.1 简介
Maven本质上是项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。主要服务于基于java平台的项目构建、依赖管理和项目信息管理。核心功能是合理的叙述项目间的依赖关系,通过pom.xml来自动获取jar包,用来运行定义在生命周期阶段内的插件和逻辑。
1.2 可以干什么
Maven可以帮忙完成项目开发过程中的几乎所有活动
- 版本管理:
- 工程构建
- jar包管理
- 代码编译
- 自动化运行单元测试
- 打包
- 生成报表
- 项目部署,生成web站点
1.3 工程结构
Maven的标准工程结构如下:
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
| `-- java(java源代码目录)
| `-- resources(资源文件目录)
|-- test
`-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
|--classes(编译后的class文件存放处)
1.4 Maven 生命周期
Maven 对项目构建过程分为三套相互独立的生命周期,分别是:
- Clean Lifecycle :在进行真正的构建之前进行一些清理工作;
- Default Lifecycle :构建的核心部分,编译,测试,打包,部署等;
- Site Lifecycle :生成项目报告,站点,发布站点;
1.5 Maven坐标规则
Maven使用如下几个要素来唯一定位某一产出物。
- groudId:团体、组织的标识符,它以创建这个项目的组织名称的逆向域名开头,对应java包的结构,例如org.apache,必须定义;
- artifactId:实际项目中的一个Maven项目(模块),推荐使用实际项目名称作为artifactId的前缀,不要包含点号(.),必须定义;
- version:项目特定版本,如:1.0.0-,分别对应:主版本、此版本、增量版本、里程碑版本;
- 主版本:表示项目的重大架构变化
- 次版本:较大范围功能增加和变化,及bug修复
- 增量版本:表示重大bug的修复,如果发现项目发布之后,出现影响功能的bug,及时修复,则应该是增量版本的变化
- 里程碑版本:常见的有snapshot(快照版,稳定版本,开发过程中使用)、alpha(预览版,不向外部发布,测试人员使用)、beta(测试版,对外公开,这个阶段会增加一些新功能,在Alpha版之后推出)、release(正式版本)
- packaging:项目类型,默认jar包,描述了项目打包后的输出。类型为JAR会产生一个jar包,类型为war会产生一个web应用;
- classifier帮助定义构件输出的一些附属附件。注意,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的。
1.6 仓库的概念
仓库是指存放jar包的地方,主要分为:仓库分为:本地仓库,第三方仓库,中央仓库。
- 本地仓库:用来存储从远程仓库或者中央仓库下载的插件和jar包,项目使用一些插件或jar包,可以通过设置修改;
- 第三方仓库:内部中心仓库,又称为私服,一般由公司自己设立,只为本公司内部共享使用;
- 中央仓库:在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2。这就是中央仓库,服务于整个互联网
获取jar包的过程:本地仓库>私服>中央仓库
1.7 常用命令
- compile:compile是maven工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target
目录下; - test:test是maven工程的测试命令,会执行 src/test/java 下的单元测试类;
- clean:clean是maven工程的清理命令,执行clean会删除target目录及其内容;
- package:package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成 war包;
- install:install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库
2 Maven配置
这里省去maven安装过程,安装过程可自行百度
2.1 IDEA设置
<localRepository>E:\Tools\maven-repository</localRepository>
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
- 配置JDK版本
<!-- java版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
- 配置国内镜像源
<mirrors>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>maven.net.cn</id>
<name>oneof the central mirrors in china</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
</mirrors>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)