Maven学习记录

一、Maven是什么

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

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


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

Maven学习记录_第1张图片

  • 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
        
	

其中:

  • 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包。
Maven学习记录_第2张图片
不同的依赖关系 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,这样结构为
Maven学习记录_第3张图片
模块a可以简化为:


    4.0.0

    
        com.itranswarp.learnjava
        parent
        1.0
        ../parent/pom.xml
    

    module-a
    jar
    module-a

即使用继承parent的内容


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

    ...
    
        
            com.itranswarp.learnjava
            module-b
            1.0
        
    

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



    4.0.0
    com.itranswarp.learnjava
    build
    1.0
    pom
    build

    
        parent
        module-a
        module-b
        module-c
    

你可能感兴趣的:(Java,maven,学习,pycharm)