Maven超详细使用

定义

是一款用于管理构建java项目的工具

作用

1. 依赖管理
2. 统一项目结构
3. 项目构建

项目目录结构

POM

项目对象模型 (Project Object Model)

POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。

仓库

本地仓库:自己计算机上的一个目录

中央仓库:由Maven团队维护的全球唯一的

远程仓库(私服):一般由公司团队搭建的私有仓库

使用

1.下载完maven后在目录中新建一个文件夹

2.进入到conf目录下修改settings.xml配置文件 

1). 使用超级记事本软件,打开settings.xml文件,定位到53行

2). 复制<localRepository>标签,粘贴到注释的外面(55行)

3). 复制之前新建的用来存储jar包的路径,替换掉<localRepository>标签体内容

3.配置阿里云私服

进入到conf目录下修改settings.xml配置文件:

1). 使用超级记事本软件,打开settings.xml文件,定位到160行左右

2). 在<mirrors>标签下为其添加子标签<mirror>,内容如下:

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

4.配置环境变量(两步)

打开cmd输入命令看是否安装成功

IDEA集成Maven

1.选择所有设置,就不用再一个一个配置。

2、设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库路径

3、配置工程的编译版本为21(数字为你自己JDK的版本)

创建Maven项目

坐标

* Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置
* 使用坐标来定义项目或引入项目中需要的依赖

Maven坐标主要组成

* groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.lzy)
* artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
* version:定义当前项目版本号

导入maven项目

打开IDEA,选择右侧Maven面板,点击 + 号,选中对应项目的pom.xml文件,双击即可

依赖管理

依赖配置

1. 在pom.xml中编写<dependencies>标签

2. 在<dependencies>标签中使用<dependency>引入坐标

3. 定义坐标的 groupId、artifactId、version

4.记得点击刷新依赖按钮

<dependencies>
    <!-- 第1个依赖 : logback -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.11</version>
    </dependency>
    <!-- 第2个依赖 : junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

依赖传递

依赖具有传递性

- projectA依赖了projectB。对于projectA 来说,projectB 就是直接依赖。
- 而projectB依赖了projectC及其他jar包。 那么此时,在projectA中也会将projectC的依赖传递下来。对于projectA 来说,projectC就是间接依赖。

排除依赖:

<!--排除依赖, 主动断开依赖的资源-->
    <exclusions>
    	<exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>

依赖范围

如果希望限制依赖的使用范围,可以通过<scope>标签设置其作用范围。

生命周期

三套生命周期

  • clean:清理工作。

  • default:核心工作。如:编译、测试、打包、安装、部署等。

  • site:生成报告、发布站点等。

主要关注以下几个:

• clean:移除上一次构建生成的文件

• compile:编译项目源代码

• test:使用合适的单元测试框架运行测试(junit)

• package:将编译后的文件打包,如:jar、war等

• install:安装项目到本地仓库

• deploy:打包项目到远程仓库(公司私服)

同一套(注意有三套)生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行

高级内容

为什么要学高级:

如果我们需要开发一些中大型的项目,此时仅凭我们前面所学习的 Maven 的基础知识就比较难以应对了

1.分模块设计与开发

将一个 Java 项目拆分成多个模块进行开发

注意:分模块开发需要先针对模块功能进行设计,再进行编码。

作用:方便项目的管理维护、拓展,也方便模块键的相互调用、资源共享

2.继承与聚合

继承

为什么要继承:

如果是做一个大型的项目,多个模块当中重复的依赖可能会很多很多。如果每一个 Maven 模块里面,我们都来单独的配置一次,功能虽然能实现,但是配置是比较繁琐的。

解决方法:可以将各个子工程当中共有的这部分依赖,统一的定义在父工程 parent 当中,从而来简化子工程的依赖配置。

 版本锁定

  • 在父工程中所配置的 <dependencyManagement> 只能统一管理依赖版本,并不会将这个依赖直接引入进来。 这点和 <dependencies> 是不同的。

  • 子工程要使用这个依赖,还是需要引入的,只是此时就无需指定 <version> 版本号了,父工程统一管理。变更依赖版本,只需在父工程中统一变更。

父工程

<!--统一管理依赖版本-->
<dependencyManagement>
    <dependencies>
        <!--JWT令牌-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
</dependencyManagement>

子工程

<dependencies>
    <!--JWT令牌-->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
    </dependency>
</dependencies>

面试题:<dependencyManagement><dependencies> 的区别是什么?

  • <dependencies> 是直接依赖,在父工程配置了依赖,子工程会直接继承下来。

  • <dependencyManagement> 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)

聚合

为什么要聚合?

如果开发一个大型项目,拆分的模块很多,模块之间的依赖关系错综复杂,那此时要进行项目的打包、安装操作,是非常繁琐的

通过maven的聚合就可以轻松实现项目的一键构建(清理、编译、测试、打包、安装等

代码实现,在父工程中写明要聚合的模块

<!--聚合其他模块-->
<modules>
    <module>../tlias-pojo</module>
    <module>../tlias-utils</module>
    <module>../tlias-web-management</module>
</modules>

那此时,我们要进行编译、打包、安装操作,就无需在每一个模块上操作了。只需要在聚合工程上,统一进行操作就可以了

继承与聚合对比

  • 作用

    • 聚合用于快速构建项目

    • 继承用于简化依赖配置、统一管理依赖

  • 相同点:

    • 聚合与继承的pom.xml文件打包方式均为pom,通常将两种关系制作到同一个pom文件中

    • 聚合与继承均属于设计型模块,并无实际的模块内容

  • 不同点:

    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些

    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

3.私服

是什么:私服其实就是架设在公司局域网内部的一台服务器,就是一种特殊的远程仓库

作用:用于解决团队内部的资源共享与资源同步问题

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值