一、Java项目构建流程
- 确定需引入的依赖包并将其放入classpath
- 确定项目目录结构:src目录存放java源码,resources目录存放配置文件,bin目录存放编译生成的.class文件
- 配置环境:JDK版本、编译打包的流程、当前代码的版本号
- 能够使用IDE及命令行方式编译成功
完成上述步骤才能够让项目在一个独立的服务器上编译、测试、部署
二、构建
- 含义:将一个Java项目从源代码编译、打包、部署到目标环境的过程
- 目的:将源代码转换为可执行的程序或库,并将其组织成一个可部署的文件或目录结构
- 构建步骤:涉及到编译源代码、打包依赖库、生成文档、运行测试、版本控制等一系列步骤
- 工具:Maven可更方便地管理项目的依赖、打包方式、生命周期等,提高项目的开发效率和可维护性
三、项目部署与项目发布的区别
- 项目部署:指将项目的各个组件和资源在目标环境中进行配置和安装的过程。在部署的过程中,会将项目的文件复制到适当的位置、配置项目的运行环境、启动项目所需的服务等。
- 项目发布:指将经过构建的项目从开发环境转移到生产环境的过程。在发布过程中,会将项目的可执行文件、配置文件以及其他相关资源部署到目标服务器上。
四、Maven
- 提供标准化的依赖管理
- 提供一套标准化的构建流程:编译、测试、打包、运行、发布
- 提供一套标准化的项目结构
(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依赖管理
- 依赖关系
compile:默认,编译时需要用到该jar包、编译、测试、运行时皆可用
test:compile&test时需要用到该jar包,如JUnit
runtime:compile时不需要,但run时需要,如MYSQL驱动
provided:compile时需要用到,但run时由JDK或某个服务器提供,如Servlet API
- 依赖下载
Maven中央仓库:Maven的默认镜像仓库,是一个公共的、全球分布的仓库,所有第三方将自身的jar及相关信息上传到中央仓库
Maven镜像仓库:Maven用户自行配置的一/多个仓库,用于在下载时替代中央仓库,一般下载速度较快,Maven镜像仓库会定期从中央仓库同步信息
私有仓库、本地仓库
一旦一个jar包被下载过,就会被自动缓存到本地目录(用户主目录的.m2目录),Maven后续便不会再从中央仓库进行下载,所以一般第一次编译时间较长
- 依赖包唯一标识:groupId+artifactId+version,Maven通过对jar包进行PGP签名确保一个jar包一经发布就无法修改
- 依赖包版本
开发版本:以"-SNAPSHOT"结尾,每次都会重新下载
公开发布版本:不以"-SNAPSHOT"结尾
六、Maven构建流程
- Maven生命周期
Maven有三套独立的生命周期(lifecycle),每套lifecycle都由一系列阶段(phase)构成,执行一个phase会触发一或多个goal,goal的命名格式为:abc:xyz
(1)Clean Lifecycle :在进行真正的构建之前进行一些清理工作
(2)Default Lifecycle :构建的核心部分,编译,测试,打包,部署等
(3)Site Lifecycle 生成项目报告,站点,发布站点
- 命令行编译命令:mvn+阶段名称+阶段名称
如:mvn clean package:用于构建项目并打包生成可部署的应用程序,运行后,Maven将执行以下操作
(1)清理项目目录,删除之前构建生成的目录和文件
(2)编译项目的源代码,并将编译后的结果放置在target目录中。
(3)进行单元测试,以确保代码的正确性和质量
(4)打包项目,生成一个可部署的应用程序文件(例如JAR、WAR或EAR文件)
- Maven插件
Maven生命周期本身不做任何实际工作,而是由Maven插件中的插件目标(plugin goal)完成
七、Maven Wrapper
- 含义:用于管理Maven版本的工具,它允许开发者在没有全局安装Maven的情况下,使用指定的Maven版本构建和运行项目
- 安装Maven Wrapper后的项目目录结构
- mvnw命令执行格式:./mvnw clean package,添加./是因为当前目录通常不在系统的可执行文件路径中,通过./显示指定当前目录路径
八、开源库
- 使用:一般是通过Maven自动下载它的jar包,并根据其pom文件解析依赖,自动把相关依赖包都下载后放入classpath,确保编译和运行时能正确使用它们