Maven工具的学习

Updated on with 0 views and 0 comments

Maven工具的学习

Maven工具

什么是maven?

maven是Apache基金会管理的项目,开源的。

maven是自动化构建工具。

1)自动化---给出命令,maven可以根据给出的命令实现操作

2)构建---将项目所需要的原材料,生产加工成为可以被运行和使用的项目的过程(JDBC(JAR、DbUtils)、数据库、前端、连接池)

3)项目的原材料:静态和动态的两部分。静态:html、css、js、图片、音频、视频、flash动画、gif动图;动态:servlet、jsp、代码、配置文件(不能直接访问的、放在web-info、classpath类路径下)

maven的作用?

1)自动化构建

2)实现jar包的管理

3)实现项目结构设计

maven官网

1)https://maven.apache.org/

下载和安装

1)下载位置

http://archive.apache.org/dist/ (apache基金会项目档案目录)

2021.4.4 maven 3.8.1

注意:jdk1.8 和 开发工具支持什么版本

2)安装

A、maven的条件:jdk安装、maven安装路径不能有中文和空格

B、解压即用,配置环境变量,可能需要初始化配置

环境变量 配置MAVEN_HOME 和Path ;%MAVEN_HOME%/bin;

测试安装 mvn -v 是否配置完成

C、初始化 --- 如果都不配置,均使用默认配置方式

镜像配置、jdk版本配置、本地仓库配置

本地库配置(默认配置:C/Users/Adminstrator/.m2/repository(默认用户家目录))

路径不含有中文和空格 maven路径 conf/settings

配置localRepositiory

镜像配置

常见:阿里、华为

阿里云maven镜像 https://maven.aliyun.com/mvn/guide

配置mirror

jdk版本(默认情况下,使用创建maven项目时,jdk版本默认1.5)

配置profile

maven的仓库

1)存储内容---jar包

2)本地库和远程库

3)本地库:当前所使用的电脑中的路径

4)远程库:中央库、镜像库、私服

A、中央库:maven世界下的中心仓库 默认

B、镜像库:是中央库的副本 国内镜像目的提高下载速度

C、私服:局域网内的路径 (公司内部共用的仓库 指定的计算机 网络链接下载JAR包)

image-20210705111353483

要使用maven工具、那么遵守工具的一些规则

1)创建项目时,项目的目录结构规则

image-20210705113926820

image-20210705114235610

2)pom.xml 文件

A、pom---project object model 项目对象模型,对使用maven工具创建的项目进行了相关的定义,是maven项目的核心,在pom.xml文件中可以定义?

B、可以定义项目的打包方式、相关依赖、当前项目坐标(GAV)、jar包统一管理、相关插件配置等

3)坐标

用于确定jar包在仓库中的唯一位置的组成(groupId、artifactId、version)

maven的使用

1)和其他工具整合使用,比如和eclipse整合、和idea整合

2)eclipse 或者 idea 负责准备项目的原材料;maven项目的结构设计、jar包的管理、项目自动化构建;分工协作

3)idea工具和maven工具的整合

settings---bulid---build tools---maven

设置maven home directory

设置 settings files

设置 local repository

4)使用 idea+maven 创建项目(在 idea 整合 maven 之后使用综合性质的工具创建项目),只是借助了maven,符合 maven 要求的目录结构,那么项目就可以称为maven项目,但实际上项目的本质还是java项目或者web项目

A、创建java性质的maven项目

使用模板、也可以不使用模板

apache.maven下的quickstart模板

当前项目的坐标设置:

GroupId:组名,设置组名称,为项目实现分组,设置格式;通常是域名倒置,如:com.baidu;com.ujiuye,如果项目较为复杂,实现了分模块的设计,那么在 GroupId 中可以添加整体项目名称,如 com.ujiuye.xxx(整体项目名称)

ArtifactId:项目Id,设置项目名称(如果项目较为复杂,实现了分模块设计,那么artifactId可以设置模块名称)

Version:版本号,标志当前项目的开发版本;版本号的组成:大版本号、副版本号、小版本号、希腊字母(单词)

例如Spring 5.1.1.RELEASE

大版本号轻易不会改变,在 jdk 或者是项目的架构发生时才会修改此号

副版本号在项目中扩展了新的功能时候,会变化此号

小版本号变动频繁,主要是修复bug之后

希腊字母:标志当前项目处于哪个阶段,比如开发阶段、测试阶段、稳定版

com.offcn

maven_01

项目的属性标志:packaging标签 默认是Java项目

jar java项目 war web项目 pom 父项目

B、创建web性质的maven项目

两种 项目的属性标志:war web项目

项目的构建操作

1)假设项目原材料已经准备齐全,那么如何实现构建自动化操作

A、构建过程包含有主要的一些步骤:清理、编译、测试、报告、打包、安装、部署

B、对应这些步骤有关命令

清理:对应命令 clean 清除上一次编译的结果,为下一次重新编译做准备

编译:对应命令 complie,将 java 源程序进行编译

测试:对应命令 test 执行 test-java 中的测试代码

报告:展示测试结果

打包:对应命令package,将项目实现打包处理,java项目生成jar包,web项目生成war包

安装:对应命令 install,将打包成的包复制到本地库

部署:对应命令 deploy 将本地库jar包上传远程哭或者实现项目部署

2)生命周期

A、是指构建过程中的步骤实现分组(一个生命周期包含几个操作步骤);

B、maven生命周期包含三个:清理周期(clean、lifecycle)、默认周期(default lifecycle)、站点周期(site lifecycles)

C、当输入相关命令执行构建时,构建不是只执行指定的步骤,而是从本生命周期第一个命令步骤开始,执行到命令指定步骤

D、还可以使用组合命令(组合生命周期)实现不同周期执行一次性的操作

简化了人工操作

maven 的 jar 包管理

1)依赖:就是当我们的项目需要其他项目中的程序代码时,我们的项目中需要把其他项目引入,那么对于两个项目的关系来说,我们的项目依赖于被引入的项目;通常在项目中引入其他项目,实际上引入的是项目生成的jar包;所以把jar包看做依赖也可以;

2)如何把jar包引入到当前项目?在当前项目的pom.xml文件中,使用依赖配置来实现。

3)依赖的配置就是一个依赖的坐标配置,组成结构

dependency标签 groupId、artifactId、version

4)在依赖配置中,决定依赖的作用范围的配置

scope标签,通过此配置可以决定jar包中的程序在什么位置可以使用

scope标签的设置值有:compile(默认值)、test、provided

image-20210705163908517

5)jar包管理

A、maven 可以实现 jar 包引入

B、jar包的传递---依赖的传递:如果乙项目中使用到丙项目生成的jar包,而甲项目又需要使用乙项目生成的jar包,那么maven工具在甲项目引入乙项目依赖时,也会把丙项目的依赖引入到甲项目中,此时在甲项目中会有两个jar包,甲项目pom.xml文件中不需要添加丙依赖配置,这是maven的jar包传递操作

C、按照maven的默认情况,丙项目jar包会向甲项目中传递,有些时候,可能在甲项目中不需要把丙传递过来,想实现不传递,可以考虑scope标签中的值设置(乙项目能做主 test和provided都排除依赖的传递)或者排除方式(exclusions标签exclusion标签groupId与artifactId)jar包排除操作

D、版本冲突的问题:同一种 jar 包不同版本的情况(在项目中 jar 包的依赖和传递等特点可能造成同一个 jar 包,出现不同版本),maven 工具帮助我们解决不同版本的冲突问题;解决的原则:就近原则(传递路径最短的优先)、声明原则(dependency上面的优先)

E、jar包的统一版本管理 抽离version

  • maven 的功能--jar包管理
    • jar 包版本统一管理

      properties自定义标签junit-version标签版本号

      ${junit-version} OGNL表达式使用 对象导航图语言(Object Graph Navigation Language),应用于EL。

  • maven 功能--项目结构设计
    • 项目结构---项目有哪些组成部分,这些部分之间存在什么关系

    • 使用 maven 实现项目结构设计:简而言之就是通过maven可以帮助我们实现项目的组成划分,可以实现组成中各个成员之间关系的设置

    • 如何划分组成,可以设置哪些关系?

      1)继承关系:项目由多层父项目和子项目组成,项目和项目之间存在父子关系,子和子之间是并列关系

      先建空项目,再建moudles,建父项目,建子项目指定parent

      继承关系特点:对于父项目来说,不知道自己有哪些子项目;对于子项目来说,知道自己父项目是谁

      继承关系作用:使用继承关系的项目结构,可以实现 jar包 的统一管理

      使用 dependencies

      缺点是子项目不需要的包也会继承

      统一管理(即有 jar 包 又有版本) 区别继承(不同项目 jar 包不同 )

      父项目使用 dependencyManagement 标签

      子项目使用dependency 去掉version

      2)聚合关系:项目由多层多个模块项目和一个聚合项目组成,聚合项目和模块之间存在父子关系,模块项目和模块项目之间并列关系

      先建空项目,再建moudles,建父项目,建子项目指定moudle

      聚合关系特点:对于聚合项目来说,知道自己包含哪些模块,对于模块项目来说不知道自己被哪个聚合项目包含;侧重于对项目进行功能划分

      3)不论是继承关系项目还是聚合关系项目 父项目都是 pom 项目 GAVP maven 的四元组 src 路径可删除


标题:Maven工具的学习
作者:HB2Ocean
地址:http://future-hb.top:8080/articles/2021/07/17/1626513187269.html