重量级 | 重量级!Maven史上最全教程,看了必懂
共 3799字,需浏览 8分钟
·
2020-11-01 05:35
Hi! 我是小小,今天是本周的第一篇,本周第一篇主要内容是maven项目的创建和使用。
前言
为了持续集成和持续部署,需要把项目改造为,或者使用maven创建项目,下面介绍maven
为什么要使用maven
在开发中经常需要依赖第三方包,包与包之间存在依赖关系,版本之间存在兼容问题,还有需要把包进行升级和降级,当项目复杂到了一定程度的时候,需要对包进行管理。maven是当前最受欢迎的自动化综合工具,类似的还有ant,npm,nuget,composer。maven提供了开发人员构建一个完整生命周期的框架,开发团队可以自动化的完成项目的基础工具建设,maven使用标准目录结构和默认构建生命周期, 因此maven是一个项目管理工具。主要做了以下几件事情
统一开发规范与工具。 统一管理jar包
maven生命周期
maven把项目构建划分为不同的生命周期,它这个过程包括编译,测试,打包,集成测试,验证,部署,maven的所有执行动作都需要指明自己在这个过程的执行位置,然后在maven执行的时候,依照过程的发展依次调用包进行处理。这个是maven的一个基本的调度机制,
maven的标准工程结构
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
|-- java(java源代码目录)
|-- resources(资源文件目录)
|-- test
|-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
|-- classes(编译后的class文件存放处)
Maven的约定优于配置
所谓的约定优于配置,在maven中,并不是完全不可以修改,他们只是一些配置的默认值。每一个阶段的任务都知道自己要这么正确的完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出的class文件存放到target/classes文件中。对于maven来说,采用约定优于配置,可以减少工作量,降低学习成本。
Maven版本规范
groupId - 团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。一般对应着 JAVA 的包的结构。例如 org.apache artifactId - 单独项目的唯一标识符。比如我们的 tomcat, commons 等。不要在 artifactId 中包含点号(.)。version - 一个项目的特定版本。packaging - 项目的类型,默认是 jar,描述了项目打包后的输出。类型为 jar 的项目产生一个 JAR 文件,类型为 war 的项目产生一个 web 应用。
maven版本规范一般定义为
、、-
处理逻辑的版本号为
SNAPSHOT - 这个版本一般用于开发过程中,表示不稳定的版本。
LATEST - 指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个 snapshot 版,具体看哪个时间最后。
RELEASE - 指最后一个发布版。
安装
配置环境变量
(1)解压压缩包(以 apache-maven-3.3.9-bin.zip 为例)
(2)添加环境变量 MAVEN_HOME,值为 apache-maven-3.3.9 的安装路径(3)在 Path 环境变量的变量值末尾添加%MAVEN_HOME%bin
(4)在 cmd 输入 mvn –version,如果出现 maven 的版本信息,说明配置成功。
本地仓储配置
从中央仓库下载的jar包都会统一的保存在本地仓库中,我们需要配置本地仓库的位置。在conf目录下的setting.xml文件。
第一个maven工程
在 Intellij 中创建 Maven 工程
(1)创建 Maven 工程
依次点击 File -> New -> Project 打开创建工程对话框,选择 Maven 工程。(2)输入项目信息(3)点击 Intellij 侧边栏中的 Maven 工具界面,有几个可以直接使用的 maven 命令,可以帮助你进行构建。
Maven 命令构建方式
进入工程目录,输入maven命令
使用指导
添加外部依赖 jar 包
在maven工程中添加 jar 包,只需要在 pom 文件中引入对应的标签即可。
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.zp.maven
MavenDemo
0.0.1-SNAPSHOT
jar
MavenDemo
http://maven.apache.org
UTF-8
3.8.1
junit
junit
${junit.version}
test
log4j
log4j
1.2.12
compile
标签具有四个属性。
- 项目组织唯一的标识符,实际对应 JAVA 的包的结构。
- 项目唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
- jar 包的版本号。可以直接填版本数字,也可以在 properties 标签中设置属性值。
- jar 包的作用范围。可以填写 compile、runtime、test、system 和 provided。用来在编译、测试等场景下选择对应的 classpath。
如何寻找 jar 包
在 mvnrepository.com 站点搜寻你想要的 jar 包版本
使用 maven 插件
要添加 Maven 插件,可以在 pom.xml 文件中添加
org.apache.maven.plugins
maven-compiler-plugin
3.3
1.7
一次编译多个工程
需要创建一个父 maven 工程,它有两个字工程,my-app,my-webapp
+- pom.xml
+- my-app
| +- pom.xml
| +- src
| +- main
| +- java
+- my-webapp
| +- pom.xml
| +- src
| +- main
| +- webapp
app 工程的pom.xml 如下,重点在于 modules 中引入了两个子 module
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.mycompany.app
app
1.0-SNAPSHOT
pom
my-app
my-webapp
选择编译 某某 时,会依次对它所有的 module 执行相同的操作。
如何打包一个可以直接运行的Spring Boot jar 包
可以使用 Spring-boot-maven-plugin 插件
org.springframework.boot
spring-boot-maven-plugin
repackage
如果引入了第三方jar包,如何打包 首先,添加依赖
io.github.dunwu
dunwu-common
1.0.0
system
${project.basedir}/src/main/resources/lib/dunwu-common-1.0.0.jar
然后配置插件
org.springframework.boot
spring-boot-maven-plugin
repackage
true
最佳实践
通过 bom 统一管理版本 使用类似 spring-boot-dependencies的方式统一管理依赖版本 spring-boot-dependencies的pom.xml的形式
4.0.0
org.springframework.boot
spring-boot-dependencies
2.1.4.RELEASE
pom
其他项目中,通过引入来管理依赖
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
关于作者
我是小小,一个生于二线,活在一线城市的程序猿,我是小小,我们下期再见。