Spring Cloud与微服务构建(三)构建微服务的准备 3.3 构建工具Maven的使用

3.3.1 Maven简介

Apache Maven是一款软件项目管理的开源工具,是基于工程对象模型(Pom)的概念而设计的。 Maven可以管理项目构建的整个生命周期,包括清理( Clean)、编译( Compile)、打包( Package)、测试(Test)等环节。同时 Maven提供了非常丰富的插件,使得构建项目和管理项目变得简单。构建一个项目所需要的流程如下

(1)生成源码
(2)从源码中生成文档。
(3)编译源码
(4)测试
(5)将源码打包成Jar,运行在服务器、仓库或者其他位置。

Apache Maven已经实现了以上的全部功能,并且只需要相关的命令就可以完成相关的功能

3.3.2 Maven的安装

安装 Maven前,需要保证JDK已经正确安装,并且环境变量已经配置正确, Maven版本为3.0之后的液木,需要的DK版车至少为1.6版本。
从官网http://maven.apche.org/download.cgi下载完Apache Maven,解压到任意目录,例如我解压到D:\MyTools\apache-maven-3.3.9下:
配置环境变量,如图
在这里插入图片描述
添加到Path
在这里插入图片描述
检查Maven是否安装成功和Maven的环境变量是否配置正确,可以使用Maven命令“mvn -v”去检查。打开命令管理器,输入“mvn -v”,如果显示如下信息,则证明Maven安装成功且环境变量配置正确。

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: D:\MyTools\apache-maven-3.3.9\bin\..
Java version: 1.8.0_71, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_71\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

设置Maven的本地仓库,在终端输入命令切换到Maven配置文件的目录,打开Maven的配置文件settings.xml。
打开配置文件settings.xml后,在配置文件中修改本地仓库的路径,本案例的本地仓库路径为D:/EAWorkspace/mavenRepositories,配置如下:

  <localRepository>D:/EAWorkspace/mavenRepositories</localRepository>

早于Maven远程服务器在国外,可以添加阿里云的镜像,这样下载Jar包的速度会大大增加,在配置文件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>
</mirrors>

3.3.3 Maven的核心概念

Maven的核心是pom文件,pom文件以xml文件的形式来表示资源,包括一些依赖Jar、插件、构建文件等。Maven的工作过程如下:

  • 首先读取pom文件。pom文件是Maven的核心,所有的项目依赖、插件都在pom文件中统一管理。
  • 下载依赖Jar到本地仓库。Maven命令执行时,首先会检查pom文件的依赖Jar,当检测到本地没有安装Jar时,会默认从Maven的中央仓库下载依赖Jar,中央仓库地址为“http://repol.maven.org/maven2/”。 依赖Jar下载成功后,会存放在本地仓库中,如果下载不成功,则该命令执行不会通过。
  • 执行构建的生命周期。Maven的构建过程会被分解成构建阶段和构建目标,它们共同构成了Maven的生命周期。
  • 执行构建插件。插件可以更方便地执行构建的各个阶段,也可以用插件实现一些额外的功能。目前Maven有非常丰富的插件,如果需要,你也可以自己实现Maven插件。

3.3.4 编写Pom文件

pom文件是一个xml文件,用于描述项目用到的资源、项目依赖、插件、代码位置等信息,是整个工程的核心。pom.xml文件一般放在项目的根目录下。以3.2.1节案例中工程的pom文件为例来讲解,其代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.21.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.forezp</groupId>
    <artifactId>hello-world</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hello-world</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

pom. xml的第一行指定了xml的版本和编码方式。 project的标签是该文件的根元素,它声明了pom相关的命名空间。 model version指定了pom的版本,对于Maven3来说,它的版本为4.0.0。

groupId、 artifactId和 version是3个最重要的标签,根据这3个标签,可以在 Maven仓库中唯一确定该依赖Jar。其中, groupId代表了公司、组织的名称,一般为公司域名的倒写,如本例中的 com. forezp; artifactId代表该项目的全局唯一ld,如本例中的helo- world; version是指该项目的版本。将项目上传到 Maven仓库中,有这3个标签才能准确无误地找到该Jar包。

parent标签用于指定父pom,本案例采用的父pom是版本号为1.5.21 RELEASE的
spring-boot-starter-parent 的 pom。

properties标签用于声明一些常量,例如上述代码中的Java版本为1.8。
dependencies标签为依赖的根元素,里面可以包含多个 dependency元素, dependency里具体为各个依赖Jar的3个坐标,即 groupId、 artifactId和 version。其中 version可以缺省,如果缺省,就会默认为最新发布的版本。
build为构建标签,它可以包含 plugins(插件)标签, plugins标签中可以包含若干个 plugin标签,可以根据项目的需求添加相应的 plugin。本例中有 spring-boot-maven-plugin插件,用此插件可以启动 Spring Boot工程。

3.3.5 Maven构建项目的生命周期

在 Maven工程中,已经默认定义了构建工程的生命周期,不需要额外引用其他的插件,
因为 Maven本身就已经集成了这些插件。默认的生命周期包括了23个阶段,如表所示。

阶段描述
validate验证工程的完整性
initialize初始化
generate-sources生成源码
process-sources处理源码
generate-resources生成所有源码
process-resources处理所有源码
compile编译
process-classes处理class文件
generate-test-sources生成测试源码
process-test-sources处理测试源码
generate-test-resources生成所有测试源码
process-test-resources处理所有测试源码
test-compile测试编译
process-test-classes处理测试class文件
test测试
prepare-package预打包
package打包(如Jar、War)
pre-integration-test预集成测试
integration-test集成测试
post-integration-test完成集成测试
verify验证
install安装到本地仓库
deploy提交到远程仓库

3.3.6 常用的Maven命令

(1)mvn clean 删除工程的target 目录下的所有文件
(2)mvn package将工程打包为Jar包。

在终端上切换到3.2.1节中项目的要目录下,输入mvn package命令,终端最后会显示如下信息,证明工程打包Jar包成功

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ hello-world ---
[INFO] Building jar: D:\IDEAspace\hello-world\target\hello-world-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.21.RELEASE:repackage (default) @ hello-world ---
Downloading: http://172.29.12.46:8081/nexus/content/groups/public/org/springframework/boot/spring-boot-loader-tools/1.5.21.RELEASE/spring-boot-loader-tools-1.5.21.RELEASE.pom
Downloaded: http://172.29.12.46:8081/nexus/content/groups/public/org/springframework/boot/spring-boot-loader-tools/1.5.21.RELEASE/spring-boot-loader-tools-1.5.21.RELEASE.pom (4 KB at 7.1 KB/sec)
Downloading: http://172.29.12.46:8081/nexus/content/groups/public/org/springframework/boot/spring-boot-loader-tools/1.5.21.RELEASE/spring-boot-loader-tools-1.5.21.RELEASE.jar
Downloaded: http://172.29.12.46:8081/nexus/content/groups/public/org/springframework/boot/spring-boot-loader-tools/1.5.21.RELEASE/spring-boot-loader-tools-1.5.21.RELEASE.jar (150 KB at 92.0 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 43.267 s
[INFO] Finished at: 2019-05-28T11:05:41+08:00
[INFO] Final Memory: 29M/85M
[INFO] ------------------------------------------------------------------------

上述的mvc package命令不是一个简单的命令,它是由一系列有序的命令构成的,mvc package命令执行过程包含以下6个阶段。

  • 验证。
  • 编译代码。
  • 处理代码。
  • 生成资源文件。
  • 生成Jar包。
  • 测试。
(3)mvn pacckage -Dmaven.test.skip=true,打包时跳过测试。
(4)mvn compile编译工程代码,不生成Jar包。
(5)mvn install命令包含了mvn package的所有过程,并且将生成的Jar包安装到本地仓库。执行mvn install命令,可以看到终端输出的日志,经过了与mvn package相同的阶段,最后将Jar包安装到本地仓库。
(6)mvn spring-boot:run使用spring-boot插件,启动Spring Boot工程。该命令执行时先检查Spring Boot工程源码是否编译,如果工程源码没有编译,则先编译;如果编译了;则启动工程,启动后工程日志如下:
[INFO] --- spring-boot-maven-plugin:1.5.21.RELEASE:run (default-cli) @ hello-world ---

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v1.5.21.RELEASE)
2019-05-28 11:13:52.097  INFO 30164 --- [           main] c.f.helloworld.HelloWorldApplication     : Started HelloWorldApplication in 4.219 seconds (JVM running for 9.417)
(7)mvn test 测试。
(8)mvn idea:idea 生成 idea项目。
(9)mvn jar:jar 只打Jar包。
(10)mvn validate 检验资源是否可用。

本章讲述了开发项目中开发环境的搭建和开发工具的使用,难免会有点枯燥,但却是开发微服务的基本前提,下一章将讲述Spring Boot的入门内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值