• Maven学习记录


    一、Maven是什么

    简单来说Maven是一个标准化的java管理和构建工具,它提供了一系列规范,包括项目结构,构建流程(编译,测试,打包,发布……),依赖管理等。

    标准化就是定下的规矩,不能变,该是什么结构就是什么结构,该怎么构建就怎么构建。


    二、Maven项目的标准项目结构

    在这里插入图片描述

    • pom.xml:项目描述文件,maven项目管理的关键所在,提供项目版本,java版本管理,模块管理,依赖管理等关键信息
    • src/main:存放Java源码的目录
    • src/main/resources:存放资源文件的目录
    • src/test:存放测试源码的目录
    • target:所有编译、打包生成的文件都放在target目录里

    三、pom.xml文件结构分析

    文件基本结构如图

    
    	4.0.0
    	com.itranswarp.learnjava
    	hello
    	1.0
    	jar
    	
            ...
    	
    	
            
                commons-logging
                commons-logging
                1.2
            
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    其中:

    • modelVersion:指定POM(Project Object Model)结构版本,这个版本规定好了能够在Maven项目配置文件中使用的结构和元素
    • groupId:类似于Java包名,通常是公司或者组织名称
    • artifactId:java类名,通常是项目名称
    • version:版本
    • dependency:项目的依赖包

    引用其他第三方库时,用groupId,artifactId, version确定这个库


    三、依赖管理

    Maven通过递归式的分析包的依赖关系,不断导入依赖的包,解决包的管理关系。

    当我们声明了abc的依赖时,Maven自动把abc和xyz都加入了我们的项目依赖,不需要我们自己去研究abc是否需要依赖xyz。

    因此,Maven的第一个作用就是解决依赖管理。我们声明了自己的项目需要abc,Maven会自动导入abc的jar包,再判断出abc需要xyz,又会自动导入xyz的jar包,这样,最终我们的项目会依赖abc和xyz两个jar包。
    在这里插入图片描述
    不同的依赖关系 dependence中的项目:

    • compile:编译时需要用到的jar包(默认)
    • test:编译Test时需要用到该jar包
    • runtime:编译时不需要,运行时需要,如jdbc
    • provided:编译时需要用到,但运行时由某个jdk或服务器提供

    Maven通过维护一个中央仓库的信息,来维护依赖的下载信息,所有第三方库将自身的jar及相关信息上传至中央仓库,Maven就可以从中央仓库把依赖库下载到本地。一个jar包一旦被下载过,就会被Maven自动缓存在本地目录。

    如果我们要引用一个第三方组件,比如okhttp,如何确切地获得它的groupId、artifactId和version?方法是通过search.maven.org搜索关键字,找到对应的组件后,直接复制

    进入到pom.xml所在目录,输入
    $ mvn clean package
    在target目录下获得自动打包的jar


    四、模块管理

    可以立即为,Maven项目下分为多个不同的模块,每个模块本质上就是一个独立的maven项目,每个项目有独立的pom.xml.这也是大型软件降低复杂度的必要方法。

    如果子模块的pom.xml存在多个相同的依赖,可以在大项目下提取出一个pom.xml,这样结构为
    在这里插入图片描述
    模块a可以简化为:

    
        4.0.0
    
        
            com.itranswarp.learnjava
            parent
            1.0
            ../parent/pom.xml
        
    
        module-a
        jar
        module-a
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    即使用继承parent的内容


    如果模块A依赖模块B,则模块A需要模块B的jar包才能正常编译,我们需要在模块A中引入模块B

        ...
        
            
                com.itranswarp.learnjava
                module-b
                1.0
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    编译时在根目录创建pom.xml统一编译,同时添加modules模块表明下属模块

    
    
        4.0.0
        com.itranswarp.learnjava
        build
        1.0
        pom
        build
    
        
            parent
            module-a
            module-b
            module-c
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    STM32WL开发之易智联LORA评估板上按键KEY的配置与应用
    Servlet规范之注解与可插拔性
    KDD 2022 | 美团技术团队精选论文解读
    海普纯化产品-多肽固相合成载体
    Word控件Spire.Doc 【段落处理】教程(四):如何在 C#、VB.NET 中设置 Word 项目符号样式
    通信原理板块——奇偶监督码、方阵码、恒比码、正反码
    Linux应用开发进程间通信 视频课笔记
    vivo 容器集群监控系统优化之道
    H5应用转换快应用
    ZZNUOJ_C语言1055:兔子繁殖问题(完整代码)
  • 原文地址:https://blog.csdn.net/good_jiojio/article/details/132748877