Spring Boot 2 精髓学习笔记(二)---Maven技术

本节是 Spring Boot基础,主要介绍了Maven技术。如果您对此部分已有了解可越过本节的学习。

一、Mave介绍

​ Maven 最初用于代替Apache Ant。Maven 采用了不同方式对项目构建进行抽象,比如源码位置总是在src/ main/java 中,配置文件则是在src/main/resources 中,编译好的类总是放在项目的target 目录下等。

1、Maven实现了以下目标
  • 使构建项目变得很容易, Maven 屏蔽了构建的复杂过程。比如,你只需要输入maven package 就可以构建整个Java 项目。
  • 统一了构建项目的方式,不同人、不同公司的项目都有同样的描述项目和构建项目的方式, Maven 通过pom.xml 来描述项目,井提供一系列插件来构建项目。只要熟悉了Maven ,就熟悉了所有项目的构建方式。
  • 提出了一套开发项目的最佳实践,而不用每个项目都有不同结构和构建方式,比如源代码在src/main/iava 中,测试代码则在src/test/iava 中,项目需要的配置文件则放在src/main/resources 中。
  • 包含不同环境项目的构建方式。
  • 解决了类库依赖的问题,只需要声明使用的类库, Maven 会自动从仓库下载依赖的jar包,并能协助你管理jar 包之间的冲突。

注意:仓库有多种,位于Apache 的是中心仓库,是jar 发布存放的地方,可以通过http: //search . maven . org/查询仓库和下载jar 文件。国内外也有大量镜像库,与中心仓库同步,比如国内的阿里云提供的Maven 镜像库。也可以用Sonatype 创建一个私服,用来发布和存放库以提高下载速度或者存放公司私有的jar 。无论依赖的jar 包来自哪个仓库,在开发人员本地, Maven 都会创建一个本地仓库来缓存已经下载的jar包,以避免每次都去仓库下载。这个本地仓库位默认在用户目录下的.m2隐藏文件夹中。

2、pom.xml

Maven 的核心是pom.xml ,用XML 方式描述了项目模型, pom 通常有以下元素。

  • group Id :表示项目所属的组,通常是一个公司或者组织的名称,如org.springframework。
  • artifactld :项目唯一的标识,比如,有spring-boot-starter-web 、spring-boot-devtools

group Id 和artifactld 能唯一标识一个项目或者一个库,我们通常称之为项目坐标。

  • packaging : 项目的类型,常用的有jar 和war 两种, jar 表示项目会打包成一个jar 包,这是Spring Boot 的默认使用方式。
  • version : 项目的版本号,比如0.0.1-SNAPSHOT、1.5.2.RELEASE。

通常来说,项目版本号分三段,主版本号. 次版本号.修订版本号。主版本号变动代表架构变动或者不兼容实现,次版本号是兼容性修改、功能增强, 修订版本号则是bug 修复。版本的后缀意味着项目的不同阶段, SNAPSHOT 表示开发中的版本,会修复bug 和添加新功能;

RELEASE 表示的是一个正式发布版,中间还可能有M1 、M2(M 指里程碑, 即将发布)

RC (Release Candidate ,发布候选)

GA(general availability ,基本可用版本)等

表示即将发布前的各个过程, SNAPSHOT<ml <m2…<RC <GA<Realease 。

  • model Version :代表pom 文件的Maven 的版本 。
  • dependencies :此元素下包含了多个dependency ,用来声明项目的依赖,这是pom最核心的部分。
  • dependency : 包含在dependencies 中,用来声明项目的依赖,比如项目用到的MySQL驱动。
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>6.0.5</version>
<scope>provided</scope>
</dependency>

依赖的坐标是mysq1/mysq 1-connector-java,版本号是6 . 0 . 5 。

  • scope: scope标签 代表此类库与项目的关系,默认是compile。
标签值 说明
compile 编译和打包都需要此类库
test 表示仅仅在单元测试的时候需要
provided 表示在编译阶段需要此类库,但打包阶段不需要,这是因为项目的目标环境己经提供了
runtime 表示在编译和打包的时候都不需要,但在运行的时候需要
  • build :在pom 中可选, build 包含了多个插件plugin,用来辅助项目构建。Maven与以往的Ant 等其他构建工具不同, Maven 己经约定俗成地包含了构建方法,插件可以在构建过程中影响项目的构建。

二、安装Maven

  • 从maven.apache.org 上下载最新的Maven,下载后解压到任意目录。
  • 设置环境变量, Windows 系统类似如下:

设置 MAVEN_HOME=D:\develepment\apache-maven-3.5.2

设置 path =D:\develepment\apache-maven-3.5.2\bin

目录根据解压目录更改。

  • 验证Maven 是否安装成功,进入命令行,输入mvn -version 显示类似如下提示表示成功安装。
C:>mvn -version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
Maven home: D:\develepment\apache-maven-3.5.2\bin\..
Java version: 1.8.0_162, vendor: Oracle Corporation
Java home: D:\Program Files\Java\jdk1.8.0_162\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

三、设置Maven

使用Maven 的唯一问题可能就是网络问题, Maven 管理了依赖库, 默认情况下都是从中心仓库下载。幸好国内有几个镜像网站可以用,因此在配置Maven 时,应优先使用国内镜像网站, 当国内镜像仓库下载失败(因为有可能没有需要的依赖库)的时候,再切换到中心仓库下载。

进入Maven 的安装目录,进入conf 目录,编辑settings.xml 。

找到mirrors 元素,添加如下仓库镜像:

 <mirror>  
     <id>alimaven</id>  
     <name>aliyun maven</name>  
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
     <mirrorOf>central</mirrorOf>          
 </mirror>

注意: 镜像不一定包含所有依赖仓库,如没找到暂时注释掉这个镜像并重新构建,切换到中心仓库。

四、在IntelliJ IDEA 中设置Maven

在lntelli J IDEA 界面中选择【File】→【Settings】→【Build,Execution,Deployment】→【Build Tools】, 在出现的窗口中找到Maven选项,分别把【Maven home directory】【User settings file 】【Local repository 】设置为我们自己Maven 的相关目录。

在这里插入图片描述

五、Maven常用命令

1、创建项目

首先创建一个目录,比如test 目录,我们在此目录下创建Maven 的Java 工程。进入此目录创建一个Maven 工程:

D:\test>mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app

如上所示,指定了项目坐标, groupId 是com.mycompany.app ,项目的标识是my-app, archetypeGroupld 是生成Maven 项目的模板, Maven 提供了很多模板用来生成不同应用的Maven项目。

第一次运行需要花较长的时间,主要是从阿里云上下载Maven 本身需要的类库。直至如下标识成功:

...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.136 s
[INFO] Finished at: 2019-09-11T17:15:43+08:00
[INFO] Final Memory: 18M/122M
[INFO] ------------------------------------------------------------------------

这时检查test 目录, Maven 己经创建了一个项目工程my-叩p,里面有一系列文件,最主要的就是pom.xml ,内容如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

2、mvn compile :编译Maven 工程

进入my-app , 运行mvn compile , 能看到如下提示:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.063 s
[INFO] Finished at: 2019-09-11T17:24:18+08:00
[INFO] Final Memory: 13M/146M
[INFO] ------------------------------------------------------------------------

3、mvn package:编译井打包工程

根据pom.xml 中元素packaging 是jar 还是war 进行打包,本例中,会在target 目录下生成一个jar 包。

...
[INFO] Building jar: D:\test\my-app\target\my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.675 s
[INFO] Finished at: 2019-09-11T17:27:08+08:00
[INFO] Final Memory: 23M/208M
[INFO] ------------------------------------------------------------------------

4、mvn install :打包井安装到本地仓库。

如果你的项目是一个基础类库,本地其他项目也需要,则需要安装到本地仓库。这样,其他本地Maven 项目就可以通过项目坐标引用。mvn install 有类似如下输出:

5、mvn deploy :同install ,但打包井安装到远程仓库。本书不会用到这个命令。
6、mvn clean :删除target 目录。

(本节结束)

第一节 Spring Boot 2 精髓学习笔记(一)
第二节 Spring Boot 2 精髓学习笔记(二)—Maven技术
第三节 Spring Boot 2 精髓学习笔记(三)—Spring 核心技术

发布了40 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LUCKWXF/article/details/100749027