Maven

发布时间 2023-09-28 13:52:38作者: sTruth

一、Java项目构建流程

  1. 确定需引入的依赖包并将其放入classpath
  2. 确定项目目录结构:src目录存放java源码,resources目录存放配置文件,bin目录存放编译生成的.class文件
  3. 配置环境:JDK版本、编译打包的流程、当前代码的版本号
  4. 能够使用IDE及命令行方式编译成功

完成上述步骤才能够让项目在一个独立的服务器上编译、测试、部署

 

二、构建

  1. 含义:将一个Java项目从源代码编译、打包、部署到目标环境的过程
  2. 目的:将源代码转换为可执行的程序或库,并将其组织成一个可部署的文件或目录结构
  3. 构建步骤:涉及到编译源代码、打包依赖库、生成文档、运行测试、版本控制等一系列步骤
  4. 工具:Maven可更方便地管理项目的依赖、打包方式、生命周期等,提高项目的开发效率和可维护性

 

三、项目部署与项目发布的区别

  1. 项目部署:指将项目的各个组件和资源在目标环境中进行配置和安装的过程。在部署的过程中,会将项目的文件复制到适当的位置、配置项目的运行环境、启动项目所需的服务等。
  2. 项目发布:指将经过构建的项目从开发环境转移到生产环境的过程。在发布过程中,会将项目的可执行文件、配置文件以及其他相关资源部署到目标服务器上。

 

四、Maven

  1. 提供标准化的依赖管理
  2. 提供一套标准化的构建流程:编译、测试、打包、运行、发布
  3. 提供一套标准化的项目结构

(1) 默认的标准目录结构如下:

a-maven-projec:项目名称、pom.xml:项目描述文件、src/main/java:存放Java源码、src/main/resources:存放资源文件、src/test/java:存放测试源码、src/test/resources:存放测试资源文件、target:存放所有编译、打包生成的文件

 

(2) 项目描述文件pom.xml

groupId:项目组织唯一的标识符,实际对应项目的包名称,一般分三段,即“域.公司名称.子项目”

artifactId:项目的唯一标识符,实际对应项目名称

version:版本号

maven工程的唯一标识:由groupId+artifactId+version构成

 

 

五、Maven依赖管理

  1. 依赖关系

compile:默认,编译时需要用到该jar包、编译、测试、运行时皆可用

test:compile&test时需要用到该jar包,如JUnit

runtime:compile时不需要,但run时需要,如MYSQL驱动

provided:compile时需要用到,但run时由JDK或某个服务器提供,如Servlet API

 

  1. 依赖下载

Maven中央仓库:Maven的默认镜像仓库,是一个公共的、全球分布的仓库,所有第三方将自身的jar及相关信息上传到中央仓库

Maven镜像仓库:Maven用户自行配置的一/多个仓库,用于在下载时替代中央仓库,一般下载速度较快,Maven镜像仓库会定期从中央仓库同步信息

私有仓库、本地仓库

一旦一个jar包被下载过,就会被自动缓存到本地目录(用户主目录的.m2目录),Maven后续便不会再从中央仓库进行下载,所以一般第一次编译时间较长

  1. 依赖包唯一标识:groupId+artifactId+version,Maven通过对jar包进行PGP签名确保一个jar包一经发布就无法修改
  2. 依赖包版本

开发版本:以"-SNAPSHOT"结尾,每次都会重新下载

公开发布版本:不以"-SNAPSHOT"结尾

  1. 依赖查找:https://mvnrepository.com/search.maven.org

 

六、Maven构建流程

  1. Maven生命周期

Maven有三套独立的生命周期(lifecycle),每套lifecycle都由一系列阶段(phase)构成,执行一个phase会触发一或多个goal,goal的命名格式为:abc:xyz

(1)Clean Lifecycle :在进行真正的构建之前进行一些清理工作

(2)Default Lifecycle :构建的核心部分,编译,测试,打包,部署等

(3)Site Lifecycle 生成项目报告,站点,发布站点

  1. 命令行编译命令:mvn+阶段名称+阶段名称

  如:mvn clean package:用于构建项目并打包生成可部署的应用程序,运行后,Maven将执行以下操作

(1)清理项目目录,删除之前构建生成的目录和文件

(2)编译项目的源代码,并将编译后的结果放置在target目录中。

(3)进行单元测试,以确保代码的正确性和质量

(4)打包项目,生成一个可部署的应用程序文件(例如JAR、WAR或EAR文件)

  1. Maven插件

Maven生命周期本身不做任何实际工作,而是由Maven插件中的插件目标(plugin goal)完成

 

七、Maven Wrapper

  1. 含义:用于管理Maven版本的工具,它允许开发者在没有全局安装Maven的情况下,使用指定的Maven版本构建和运行项目
  2. 安装Maven Wrapper后的项目目录结构

 

  1. mvnw命令执行格式:./mvnw clean package,添加./是因为当前目录通常不在系统的可执行文件路径中,通过./显示指定当前目录路径

 

八、开源库

  1. 使用:一般是通过Maven自动下载它的jar包,并根据其pom文件解析依赖,自动把相关依赖包都下载后放入classpath,确保编译和运行时能正确使用它们