4.1(工具)Maven

4.1(工具)Maven,第1张

4.1(工具)Maven Maven 为啥用Maven 项目的分工

在最开始我们都是一个工程就是一个项目,这样很杂乱。我们可以借助Maven分为多个模块,模块之间进行引入,从而实现项目的多模块开发,便于分工。

在之后又出现了分布式项目就更好了

项目的jar文件 jar的大小

我们项目中都要放入jar文件,此时每一个jar包都有个自己的大小。通过Maven,我们只需要编写引用,会自己想指定好的仓库查找引用,并不会真正添加到项目中

jar的查找

通过Maven到仓库中查找。本地仓库没有可以去远程仓库中下载

jar包依赖

Maven对jar包之间的依赖做了处理

Maven是什么

Maven使一款服务于java平台的自动化构建工具

构建工具发展(make ant Maven gradle)gradle新的工具

构建

Maven可以去构建一个java项目

  1. 清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
  2. 编译:以java源文件编译class字节码文件交给JVM去执行
  3. 测试:自动调用junit程序
  4. 报告:测试程序执行的结果
  5. 打包:将web工程打成wae包,或jar包
  6. 安装:将打包得到的文件复制到仓库中
  7. 部署:一个BS项目最终运行并不是动态web工程本身,而是整个web工程编译的结果
安装Maven 检查是否存在JDK环境
java -version
在官网下载maven

进行环境变量配置

查看maven版本

mvn -v

安装这一块我这里说明的并不细致

安装完毕之后还需要改变仓库的地址,一边提高下载jar文件的效率

Maven的核心概念
  1. 约定的目录结构
  2. POM
  3. 坐标
  4. 依赖
  5. 仓库
  6. 生命周期/插件/目标
  7. 继承
  8. 聚合
约定的目录结构

根目录:工程名

src目录:源码

pom.xml文件:maven工程的核心配置文件

main目录:存放主程序

test目录:存放测试程序

java目录:存放java源文件

resources目录:存放框架或其他工具配置文件

正常我们创建SpringBoot等也都是创建Maven项目

为什么要遵守目录结构

Maven要负责我们这个项目的自动化构建,以编译为例。Maven想要编译就需要知道java源代码保存在哪里。

遵守框架的 约定>配置>编码

当然可以自定义文件位置让Maven知道

常见Maven命令

现在使用IDEA,使用Maven构建项目基本上都可以在IDEA上进行 *** 作命令

mvn clean:			清理
mvn compile			编译主程序
mvn test-compile:	编译测试程序
mvn test:			执行测试
mvn package:		打包
mvn install:		安装
mvn site:			生成站点

IDEA中的Maven项目

lifecycle:中存放这些命令,点击即可执行

dependencies:中存放载入了哪些jar文件,jar包之间展开可以看到引入的其他jar文件

POM

(project object model)项目对象模型

pom.xml对于Maven来说使核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。

该文件可以用来添加jar文件,添加Maven插件。继承关系等

Maven的 *** 作基本上都在此文件上进行

坐标

使用三个向量在仓库中指定唯一的Maven工程(jar文件)

groupid:公司或组值域名的倒叙+项目名		
org.springframework.boot
artifactid:模块名字
spring-boot-starter-parent
version:版本
2.3.4.RELEASE

Maven通过坐标来查找仓库中的文件(jar)或者自己写的maven模块

这些坐标结合父标签编写在pom中

仓库 仓库的分类

**本地仓库:**当前电脑上部署的仓库目录,优先查找该仓库是否存在指定的依赖坐标。在远程库查找到的坐标,会及进行下载到本地仓库

远程仓库:

私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务

中央仓库:在interner上,世界上所有Maven工程服务

中央仓库镜像:为了分担中央仓库的流量,提高用户访问速度出现的

仓库中的内容

maven自身所需要的插件

第三方框架或工具的jar包

我们自己开发的maven工程

依赖

Maven解析依赖信息时会到本地仓库查找被依赖的jar包

我们自己开发的Maven工程,使用mvn install命令安装后就进入了仓库

依赖的范围
在最开始我是用Maven的时候因为scope的依赖范围,编写了jar包但是一直显示jar包不存在。 

            javax.servlet
            javax.servlet-api
            provided
        

常见的依赖范围

依赖范围对主程序是否有效对测试程序是否有效是否参与打包是否参与部署compile1111test0100provided1100 依赖的传递性

Maven可以进行多模块开发,模块与模块之间的引用

当A模块引入B模块,B模块有的内容A模块也可以使用,这就是依赖的传递性。

继承

我们编写项目的时候每个模块都需要jar包,为了方便进行maven各个模块之间的管理,可以创建一个父模块。

父模块可以做到统一各个子模块的依赖管理

通过继承和传递性来完成Maven的多模块开发

聚合

当夫模块出现,为了方便查看夫模块下的子模块

子啊夫模块pom中存在聚合,可以看到引入了哪些子模块

Maven的多模块开发

随着项目的越来越大,为了更好的进行管理项目

我们可以使用Maven来进行多模块开发,将一个大项目拆分为一个一个小的模块(针对庞大复杂的项目可以更好的管理)

步骤 首先创建一个Maven的项目作为父工程

父工程中的src文件夹删除掉
  1. 因为父工程是为了管理下层多个子工程
  2. 在父工程导入依赖,其他的子工程都会存在,(继承性)(传递性)
父工程之下创建多个子模块(子模块中创建子工程)

父工程与子工程之间联系 观察pom配置文件

父工程



    4.0.0

    ParentMaven
    ParentMaven

    pom
    1.0-SNAPSHOT

    
    
    
        One
    

    
    
    
        
        
        
            
                org.springframework
                spring-webmvc
                4.3.7.RELEASE
            
        
    



子工程




    
    
    
        ParentMaven
        ParentMaven
        1.0-SNAPSHOT
    

    4.0.0

    One
    One
    1.0-SNAPSHOT


  1. 父工程的依赖可以对子工程进行管理
  2. 子父工程在pom中存在明显的相互调用关系
多个子工程之间的联系

因为现在子工程之间都是独立的小工程,想要建立联系怎么办呢

谁想要调用谁 就在pom中进行引入需要调用子工程即可

Two工程想要使用One工程的功能示例

展示项目结构

展示two工程的pom文件



    
        ParentMaven
        ParentMaven
        1.0-SNAPSHOT
    
    4.0.0

    Two

    
    
        
            One
            One
            1.0-SNAPSHOT
        
    


展示各个工程的依赖

展示Two工程的Test类

import cn.pojo;

public class Test {
    public static void main(String[] args) {

//        自身并不存在pojo类但是因为引入One依赖所以可以使用One中的代码
        pojo pojo = new pojo();

    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5638374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存