重量级 | 重量级!Maven史上最全教程,看了必懂

互联网全栈架构

共 3799字,需浏览 8分钟

 ·

2020-11-01 05:35


Hi! 我是小小,今天是本周的第一篇,本周第一篇主要内容是maven项目的创建和使用。

前言

为了持续集成和持续部署,需要把项目改造为,或者使用maven创建项目,下面介绍maven

为什么要使用maven

在开发中经常需要依赖第三方包,包与包之间存在依赖关系,版本之间存在兼容问题,还有需要把包进行升级和降级,当项目复杂到了一定程度的时候,需要对包进行管理。maven是当前最受欢迎的自动化综合工具,类似的还有ant,npm,nuget,composer。maven提供了开发人员构建一个完整生命周期的框架,开发团队可以自动化的完成项目的基础工具建设,maven使用标准目录结构和默认构建生命周期, 因此maven是一个项目管理工具。主要做了以下几件事情

  1. 统一开发规范与工具。
  2. 统一管理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
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




关于作者

我是小小,一个生于二线,活在一线城市的程序猿,我是小小,我们下期再见。


浏览 65
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报